Description
Currently, lexically bound dispatch is handled uniformly with other dispatches via a LexicallyBoundDispatchNode
.
However, I noticed during debugging a stack overflow problem that it could potentially be replaced by a new subclass for AbstractMessageSendNode
.
The idea would be to transition the GenericMessageSendNode
subtree into a LexicallyBoundSendNode
, which doesn't require a separate LexicallyBoundDispatchNode
anymore.
This could give a bit of a speedup in the interpreter, and might reduce stack pressure a little.
However, this is likely going to interfere with instrumentation and other things.
This could be a good getting started issue.
It would give you some familiarity with the idea of self-optimizing AST interpreters, the relevant node rewriting, SOMns' basic structure, and interpreter optimizations.
Stack trace of the bit that might benefit from optimization:
at som.interpreter.nodes.dispatch.LexicallyBoundDispatchNode.executeDispatch(LexicallyBoundDispatchNode.java:34)
at som.interpreter.nodes.MessageSendNode$GenericMessageSendNode.doPreEvaluated(MessageSendNode.java:313)
at som.interpreter.nodes.MessageSendNode$AbstractMessageSendNode.executeGeneric(MessageSendNode.java:128)