Create a mzlib/contract compatible version of the old box/c and use that
for mzlib/contract. Change the docs so that the docs for mzlib/contract
contain the right information.
Fix the typed-scheme implementation to only force flat box (or hash)
contracts when it already is required to be flat. Otherwise, allow
non-flat contracts for the element contract (or domain/range contracts).
* Domain contracts must be either flat or chaperone contracts.
* When the domain is a chaperone contract, hash/c must check
that the hash is equal?-based.
* Flat contracts are chaperone contracts, and chaperone contracts
are (proxy) contracts.
* Check in chaperone contracts that a chaperone (or chaperone-friendly
value) is indeed returned.
- when optional arguments didn't also have rest args,
it generated the wrong wrapper function
- the object-contract interaction was broken;
it was not adding the this argument in
Also removed the hack added earlier this eve.
closes PR 11180
Now use for/fold to thread the index through the iteration form, so
that all variants can take advantage of the optional #:length
argument. Previously, only the for/vector and for/flvector used the
The behavior when #:length does not match the number of iterations has
changed: iteration stops when either the vector is full, or the
requested number of iterations has been achieved, whichever comes
first. If #:length is larger than the number of iterations performed,
then the remaining slots in the vector are filled with the default
argument of (make-vector ...), which is currently 0.
- Now the faster forms take a #:length keyword to designate the length
of the vector to pre-allocate.
- The for/[fl]vector forms take multiple body expressions and set the
vector component to the value of the last one.
- When given a #:length argument, the for/vector and for/flvector
forms check that the iteration is not exceeding the given length,
raising exn:fail if it does.
- Test cases for the multiple body expressions and the exception for
excessive iterations have been added.
- Doc modifications to bring the docs in line with the new forms.
- Doc modifications to note that the #:length versions of the form
*may* all the computation to be performed more efficiently, and
stating that it "is an error" if the given length-expr does not
produce a valid length for a vector that matches the number of
iterations for the loop.
- Note that no test is made for a number of loop iterations that is
smaller than the given vector length. Also, the for*/[fl]vector
forms do not optimize when given a #:length argument. These are
areas for future improvement.
Changed backtracking algorithm, runtime representations
- syntax classes, ~describe no longer implicitly commit
- ~describe no longer delimits effect of cut
Added keyword & optional args for stxclasses
Added ~do and #:do, ~post, ~commit and #:commit,
~delimit-cut and #:no-delimit-cut
Added syntax/parse/debug, syntax/parse/experimental/*
- expr/c for contracting macro sub-expressions
moved from syntax/parse to syntax/parse/experimental/contract
- syntax class reflection (~reflect, ~splicing-reflect)
- eh-alternative-sets (~eh-var)
- provide-syntax-class/contract
(only for params, not attrs so far)
Changed ~fail to not include POST progress (#:fail still does)
old (~fail _) is now (~post (~fail _))
Made msg argument of ~fail optional
Removed generic "repetition constraint violated" msg
Removed atom-in-list stxclass
Removed unnecessary datum->syntax on cdr of pair pattern
massive improvements to long-list microbenchmarks
Optimization: integrable syntax classes (id, expr, keyword)
need better measurements
Optimization: ad hoc elimination of head/tail choice point
for (EH ... . ()) patterns
Added unstable/wrapc (proc version of expr/c)