Support for inter-instance stack switching #108
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There is a currently a conceptual error in the implementation, where the chain of active stacks (= continuations + the main stack) is stored per
Instance
/VMContext
.This means that when a function
$f
calls an imported function$g
, where$f
and$g
are not part of the same instance, their stack chains are completely separate. For example, it is not possible tosuspend
to a tag$t
in$g
and handle this in a resume block in$f
(assuming that the underlying modules import and export the tag$t
so that it is shared between the two).This PR rectifies this situation by sharing a single
StackChain
object between all instances of the sameStore
. TheVMContext
then contains merely a pointer to this shared chain, rather than a chain of its own. This fully mirrors how theVMRuntimeLimits
are already shared between all instances of aStore
.