There is now a working new primitive and an ExuperyMethodContext class. The stress test also is mostly working, there's a bug that may not be due to Exupery but should probably be investigated further. I've started work on interrupt support. Hopefully 0.11 should have all the VM level support required for reasonable background compilation.
The new primitive only works for fixed size pointer objects that don't need a large header. This covers many cases as a small object can have up to 64 instance variables. Adding variable sized objects, larger objects, and byte storage objects should be relatively easy but can wait.
ExuperyMethodContext is there to deal with the differences between Exupery's method contexts and the interpreters. When I added block support I moved the compiled program counter into the interpreters program counter slot which meant that the debugger stopped working with Exupery's method contexts as the PC was no longer pointing to bytecodes. Before blocks, the compiled PC was stored in an unused slot in the MethodContext and compiled code would save the bytecode PC so the debugger would work if the method wasn't changed by the debugger.
The new ExuperyMethodContext class provides both a place to translate a compiled PC to a bytecode PC and also a place to put deoptimisation code if the context is modified. There is now some basic support for deoptimisation in the debugger.
With both the new primitive and ExuperyMethodContext working and the stress test mostly working, I've started work on interrupt support. Squeak has it's own interrupts that are used for processes, Alt-., and profiling. On backwards jumps and sends Squeak checks if any events have happened that require a context switch. Until now Exupery hasn't done this.
Interrupts are important for background compilation so infinite loops inside compiled code are interruptible with Alt-. and so that Squeak's profiler will see compiled code.
After 0.11, the next step will be the image side support required for background compilation. Background compilation itself should be fairly easy. It would be nice to have better ways to decide what should be compiled. The current profiler doesn't track what's already been compiled. Also methods should be deoptimised if they are changed.
Bryce
exupery@lists.squeakfoundation.org