Run engine-feeding node-callback gatherers synchronously at the emission position - #6142
Merged
Conversation
…ion position Body walks pair an engine-feeding gatherer (impure points, execution ends, return statements, array_walk value types, anonymous-class constructor results, ...) with the rule-facing node callback in one closure, and read the gatherer's by-reference arrays as soon as the walk returns. FiberNodeScopeResolver defers node callbacks to fibers - a rule parking on an unsettled expression would delay the gathering past the read. Pair the two in a GatheringNodeCallback: the fiber engine runs the gatherer synchronously at the emission position and defers only the rule-facing remainder. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019wqGgaD7iqL44t1KgpJS7b
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Extracted from the
resolve-type-rewrite-2branch (independent PR on 2.2.x).Body walks pair an engine-feeding gatherer (impure points, execution ends, return statements,
array_walkvalue types, anonymous-class constructor results…) with the rule-facing node callback in a single closure, and read the gatherer's by-reference arrays as soon as the walk returns.FiberNodeScopeResolverdefers node callbacks to fibers — a rule parking on an unsettled expression can delay the gathering past the read. The newGatheringNodeCallbackpairs the two explicitly: the fiber engine runs the gatherer synchronously at the emission position (on the plain scope — mainline's on-demandgetTypeneeds no fiber) and defers only the rule-facing remainder.Eight gatherer sites wrapped (function/method/hook bodies, closure statements, the expression-statement assign detector, anonymous-class constructor gathering,
array_walkvalue gathering).Validation: full test suite green (17778 tests), self-analysis clean, code style clean.
🤖 Generated with Claude Code
https://claude.ai/code/session_019wqGgaD7iqL44t1KgpJS7b