- snip% now implements equal<%>
its equal-to? delegates to other-equal-to?.
- snip%'s other-equal-to and equal-hash-code and
equal-secondary-hash-code all just amount to using eq?. The
setup is here just to make snip% be the one that declares
that it implements equal<%> so that various snips can adjust
other-equal-to? (and the hash code methods)
- image-snip% no longer implements equal<%>
(but it extends snip% and it overrides other-equal-to?
and the hash-code methods to do what they always did)
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.
- Range checking was inconsistent between the sequence and macro forms
- The macro form could crash due to unsafe vector refs
Fixes involved refactoring the range checks so they are shared between both versions, and changing the contract slightly so start and stop are checked before the sequence runs. This allows unsafe vector refs and earlier error notifications at the cost making some valid programs (e.g. those using some condition to stop a comprehension hitting an invalid index) now be invalid. Only crazy people would rely on the old behaviour, so it isn't a problem in practice.