Replace TreeAssociator with a function #125
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.
Using the visitor pattern allows
TreeAssociator
to be replaced by anassociate()
function inside ofParserState
.Related issues
Part of #101.
Proposed changes
TreeAssociator
class.associate()
function to visit each node in the tree and updateParserState
directly.One interesting thing here is that the old
TreeAssociator
class used some pretty complicated recursive logic to decide whether to expand specific branches when processing a given set of#if
/#else
/#endif
nodes. I think the new code is clearer, but because the visitor isn't being called recursively, the association logic requires an explicit stack to track the state of each branch.