0.9.16.38:
Rewrite the single-stepper to solve the compilation/run-time
performance and type-inference inaccuracy problems with the old
approach. Also make some UI improvements to the stepper.
* The IR1 stage no longer instruments the code. Instead it
only detects function call forms which should (according to
the policy) be steppable, and records a string
representation of those forms in the matching combination
nodes (to be stored in the debug-info).
* Modify the function call vops to emit some instrumentation just
before the actual call happens. This will check either the
symbol-value of *STEPPING* (unithreaded) or the new STEPPING
slot of threads (multithreaded) and trap if it's true. The
trap handler will replace the closure / fdefn that was about
to be called with a wrapper, which will signal a stepper
condition and then call the original function.
* Emit a similar bit of instrumentation before any call that
got optimized to a simple VOP. The difference is that the
only thing that the trap handler will do is to directly
signal the condition.
* The necessary VOP / runtime changes have only been done on
x86, x86-64 and ppc so far. Alpha, Mips and Sparc should
still compile, but the stepper won't work there.
* Remove the old single-stepper REPL, and instead integrate the
stepper into the debugger.
* Add STEP-OUT functionality (stop stepping temporarily,
resuming it once the current function returns).
40 files changed: