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.