| If you restore the entire C stack to resume the Lua continuation, it will reset the loop in main() to i=0! That's the point of continuations, though. That's a feature, not a bug. When you create a continuation, you're saying "whatever happens after this, allow me to do it again at some later time." If the calling library happened to be in a loop, then the goal is to serialize that loop so that it can be invoked again, at a later point. If you keep applying the continuation in a loop, then you'll get an infinite loop. But if you invoke the continuation once, (and if subsequent calls to fancylib_calculate() don't), then you'll get the ability to print val[0] = 42
val[1] = 99
...
val[9] = 7
on demand. By invoking the continuation, you cause the loop to happen again.In fact, you gain the ability to prevent the program from terminating, in a controlled fashion. Since you have access to the continuation, you can choose to invoke it on the 10th call to fancylib_calculate(), up to 3 times in a row. That would produce output like: val[0] = 42
val[1] = 99
...
val[9] = 7
val[0] = 42
val[1] = 99
...
val[9] = 7
val[0] = 42
val[1] = 99
...
val[9] = 7
then the program would exit.Does that make sense? Apologies if we're talking past each other. I appreciate the patience. |
If that's what you're after, then by all means implement that. :) But I think most people would expect the Lua interpreter state to be self-contained, and not to affect the state of the surrounding C execution environment.