Callbacks, simplified.

Andreas Raab andreas.raab at
Tue Jun 6 01:17:58 UTC 2006

Folks -

Another one of the issues I really need a solution for is simple 
callback support into the interpreter. For me, the simplest thing to do 
that can potentially support all the relevant use cases is to merely 
provide an interface that (via setjmp/longjmp) ensures that the C 
callstack remains in order, e.g., prevents returns "through" other 
callback frames.

I'm thinking about an interface like here:

int interpretEnter(int *cbID);
     - (Re-)Enters the interpreter. Different from interpret() in such 
that it creates an environment (via setjmp) to return to. Fills in the 
cbID with an ID that is used in the return call.

int interpretExit(int cbID);
     - Returns from a previous call to interpretEnter() with the 
provided callback ID.

Both of the above functions may fail - interpretEnter() would fail if 
for some reason the interpreter cannot be entered (no setjmp/longjmp 
support, or failure to allocate jmpbuf). interpretExit() would fail if 
the callback ID is not the last "matching" ID.

Note that the above does NOT make any assumptions on the means by which 
the VM gets notified about the occurrence of the callback itself nor any 
arguments etc. It is up to the plugin to provide that information by its 
idiosyncratic means.

Question: Does anyone have a problem with the above? I'm trying to 
design "just enough" so that projects like wxSqueak or others can 
cooperate without knowing too much about each other.

   - Andreas

More information about the Vm-dev mailing list