to gc:cons and gc:closure instead of passing locs
This enables the important change, namely that get-root-set
no longer returns roots corresponding to the arguments
of the allocation function that we're in the middle of.
This means that a common error students have (forgetting
to chase the 'hd' and 'tl' pointers in their GC) is
harder to make now, since get-root-set never contains
those locations as roots. (In the past you would have had
to write some pretty non-obvious mutator program to get
that behavior.)
* See comment about implementation issues.
* Removed the `list?' requirement on `takef' etc -- so it matches the
non-*f versions. (IMO, it'd be better to drop it from all of them.)
This also changes the output of `dropf' to `any/c'.
* Swapped the argument order so the predicate is last -- this makes it
uniform with the non-f* versions. (IMO, it'b be better to use the
popular order in all of them instead.)
* Includes tests, and also improved version of previous tests.
* Includes docs, and also fixes to previous docs (eg, drop* doesn't
return a fresh list).
As a side-effect of this fix, we don't need the thunking behavior for
external identifiers anymore. Even better!
Also include some other cleanups suggested by Ryan and moves from
quasisyntax/loc -> syntax/loc where we don't use the quasiquoting.
generate so much code
(Mostly to avoid pain with the macro stepper, but also
reducing the amount of code macros generates is good
for performance reasons)
The code used to avoid lifting identifier in more restricted circumstances,
but it seems safe to alway avoid that, which can lead to a lot
less lifting
This is mostly to better support test cases so that we
can set up namespaces that have specific collectors in them
(easiest to do with quote-based requires)
There's still a function application (here, a thunk) lurking in
external accesses, but since that's a trade-off for an entire contract
application, we profit.
This pushes almost all uses of check below into tc-expr and
tc-expr/check. This means that the optimizer sees more precise types
and can make more optimizations.
The `interactive' pict constructor is a hook for interactive GUI
elements on a slide. The callback associated with an `interactive'
pict gets a `frame%' instance for a frame that floats over the pict.
No need to stick with the srfi-1 style of `lis' and `recur'. I also
removed the srfi-1 comment since this code is straightforward. (I keep
such comments if there's something non-trivial that was taken.)
This test started failing due to the additions of the calls
to clip, introduced in commit e6dc9c28b4. The actual
difference is only 9 pixels out of about 100,000 relevant
pixels. Even better, here's the precise rgb values for the
mis-matched pixels (the alpha values don't change):
(224 251 255) vs (229 255 255)
(200 242 255) vs (205 247 255)
(205 242 255) vs (210 247 255)
(205 242 255) vs (210 247 255)
(205 242 255) vs (210 247 255)
(205 242 255) vs (210 247 255)
(200 242 255) vs (205 247 255)
(224 251 255) vs (229 255 255)
(242 255 255) vs (247 255 255)
It isn't clear to me why clipping like this would have this
particular change, but I think it is safe to assume that
Redex shouldn't change in response to this!