... because it results in programs that have different identifiers
with overlapping ranges in the editor, something that check syntax is
not yet prepared to deal with.
references are binding/bound variables (beyond those appearing in the
define-language itself)
Specifically,
- change define-language (and friends) so they record binding and
source location information for non-terminals in the identifier that
names the language (and to expand to disappeared bindings);
- change rewrite-side-conditions/check-errs so that it accepts the
language identifier (instead of a list of non-terminals) and returns
one extra piece of syntax: that extra piece of syntax is just
(void), but it has a bunch of disappeared uses on it that connect
to the identifiers added to define-language;
- similarly, adjust (term ...) so that it puts disappeared uses for
non-terminal references.
Allow macro writers to put an 'original-for-check-syntax
property on identifiers and, if it is there, don't
insist on syntax-original? holding, just draw arrows anyway
There's mutual dependence between promises and their threads. This may
cause a thread to start running before its promise is fully initialized,
in which case it will be `#<undefined>', which causes errors down the road.
This was the cause of an intermittent failure in the TR test harness.
If a function is bound by a `letrec' (or internal definition)
that cannot be simplified to `let' or lifted to a constant or
top-/module-level function, and if the `letrec' binding is used in
a non-application position, and if the function has in its closure
a typed binding (i.e., boxed, fixnum, flonum, or extflonum),
then the validator was incorrectly rejecting the function's
bytecode --- because the validator didn't distinguish between typed
arguments and typed closure content.
File under "surprised that we didn't hit this one earlier".
This combination of changes moves the decision about rebuilding
"scribblings/main" and "scribblings/main/user" to `raco setup',
which is in a better position to know whether documentation should
be built at all.
Stress mode forces a GC on every N allocation attempts, and it makes
JIT-generated code always take a slow path.
This mode uncovered only a bad test case and some boring start-up
bugs (boring because start-up is deterministic enough that they
never happen), so far.