queue-callback / execute callback dance; also, change the behavior
a little bit so that it works a little bit more like the rest of the
DrRacket languages; in particular, the initialization of the REPL
now only happens when a window is first opened or a new tab is first
created, but not at other times (ie not when the language changes;
when the language changes, we just keep the REPL state the same and
show a warning like before)
This change also required a change to the way the repl is initialized
and a slight change to the behavior of the first-opened method. Specifically,
it is now called in a slightly better context so that errors that
happen look like errors in the user's program. The only other use of
the first-opened method in the tree was to initialize the teachpacks
in the teaching languages and this new behavior is also an improvement
there.
also cleaned up a bunch of little things in the bug report implementation:
- the abort had race conditions
- formatted the collections a little bit better (hopefully)
- broke the implementation up into multiple files
- fixed broken interaction with drracket (the drracket frame mixin is now being used properly)
- added the search string to the title of the window
- made the default preference includes scrbl files
- adjusted the title of the window to put drracket last
Specifically, it finds all variables that match the one being
renamed in the fully expanded program, as well as all variables
that have the same source locations of any of those (etc).
The bug was that the planet log message registration was happening
on drracket's thread instead of on the user's thread, so it was
using the wrong keys in the ephemerons.
including adding some uses of `with-module-read-parameterization'
so that `read-accept-lang' is set right anyway; still, so many
many places just set `read-accept-reader' to #t that making
`read-accept-lang' #f by default looks like too big of an
incompatibility
`test-covered' to use just the expression -- looks like there's no
reason to use an additional key.
Also, change its uses to map each syntax to an mcons where its mcar is
used to track coverage. This is done everywhere, since it turns out to
be much faster to insert a `set-mcar!' with a 3d mpair, rather than a
call to a thunk.
Note that it still uses mpairs as a hack. It "works" in the same way
that this simplified example does:
(define-syntax m
(let ([b (mcons 0 0)])
(lambda (stx)
(with-syntax ([b b])
#'(case-lambda [() (mcar b)]
[(x) (set-mcar! b x)])))))
I think that it's fragile, and likely to stop working at some point, but
I don't see anything better for now.