Fixes a mistake in commit 768b93be82, which dropped a check that is
needed to trigger GCs during a sequence of large-block allocations.
Closes PR 14738
Allow pict arguments, with or without a separation-size
argument.
The recently added contract has rules out providing a
separation size with no arguments, which had been allowed
before. The underlying problem, though, was an inconsistency
in the implementation that allowed 0 pict arguments only
in the case that a separation size is provided.
slightly less terrible
... but ->i still doesn't do as good a job as -> and ->* do for arity
errors (specifically, ->i is still letting the blame-less errors that
application constructs thru when it could be assigning blame)
Refactor the code to move inside 'let' or 'begin'.
Also, in the test position of a 'if', recognize the 'not' inside a 'let' or 'begin'.
For example, transform (if (begin ... (not p)) x y) => (if (begin ... p) y x)
Previously, this conversion was made only when
the 'not' was the outermost expression.
And use the refactored code to move application inside 'let' or 'begin' in a single step
For example, transform ((let (...) ... (let (...) ... f) x) => (let (...) ... (let (...) ... (f x))
In the conversion, it's necessary to shift x to the new coordinates inside the 'let's.
In the new version x is shifted only once.
Before this commit:
- unzip would attempt to seek the input port via file-position in some cases
After this commit:
- unzip reads and discards bytes as needed to skip forward
With `replace-evt` the time that the system needs to wake up
to check the event can drift later, but scheduling state was
carried in a way that works only if the wake-up time drifts
earlier.
Unfortunately, I don't know how to write a test for this bug.
The usual stategy of using `system-idle-evt` to detect busy
waiting doesn't work here, because the business happens despite
the scheduler's conclusion that the system is idle.
As reported by Jan Dvořák on the mailing list.
When an evaluation result from a sandboxed computation is convertible
(so that it should be preserved for rendering) and serializable, then
serialize the value from transfer from the sandboxed environment to
the rendering environment.
This change complements the one that makes `pict`s serializable.
Serializing a pict result avoids retaining the sandboxed environment,
including its instance of the `pict` and `racket/draw` modules,
when a sandbox-created pict is part of the generated document.
For example, the memory use of the result of "math.scrbl" is about
20% smaller with this change.