Ensure that FiberRuntime auto-yields when evaluating WhileLoops
#9289
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.
While reviewing #9131 I realised that we're not propagating the number of operations that were evaluated when we re-enter
FiberRuntime#runLoop. This means that an infinitely runningWhileLoopwill never auto-yield.Note that the implementation is not strictly correct, as the number of operations executed in "deeper" levels are not propagated backwards. The only way to make this behaviour exact is to use a heap variable or propagate a mutable counter when re-entering
runLoop. However, since I don't think we need to be very strict with when we auto-yield, this more lightweight implementation should be good enough.@jdegoes what do you think regarding the above?