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.
Cheers, - Andreas