fix(napi/parser): cache nodes in lazy deserialization #11637
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.
In lazy-deserialized AST, cache node objects, so accessing the same field twice returns the same object. Previously
assert(binaryExpression.left == binaryExpression.left)
would fail, as each access returned a new object.pos
(i.e. memory address) is used as the cache key, with 2 exceptions:RegExp
andProgram
.RegExp
doesn't have aspan: Span
field, so its first fieldRegExpPattern
has the same memory address as theRegExp
. Sopos
would not be a unique key.The codegen identifies these cases, and applies a workaround -
pos + 1
is used as the cache key instead ofpos
, so the parent and child have different cache keys.