Skip to content
Snippets Groups Projects
Commit e7b7302d authored by Emma Söderberg's avatar Emma Söderberg
Browse files

Moves the tracking of child from getChildNoTransform to getChild.

This allows for capturing of dependencies during attribute evaluation
that otherwise would be lost. The handler of getChild is now added
to the attribute evaluation stack which means dependencies to rewrittenNode
and other attributes can be tracked.

Tested with the incremental/param suite, Test 120-128.
parent 2063275b
No related branches found
No related tags found
No related merge requests found
...@@ -420,12 +420,15 @@ ASTNode.getChild [[ ...@@ -420,12 +420,15 @@ ASTNode.getChild [[
$if(RewriteEnabled) $if(RewriteEnabled)
$if(RewriteCircularNTA) $if(RewriteCircularNTA)
$ASTNode node = this.getChildNoTransform(i); $ASTNode node = this.getChildNoTransform(i);
$include(ASTNode.incHookGetChild)
if (node != null && node.mayHaveRewrite()) { if (node != null && node.mayHaveRewrite()) {
$include(ASTNode.incHookGetChildEnterEval)
$ASTNode rewritten = node.rewrittenNode(); $ASTNode rewritten = node.rewrittenNode();
if (rewritten != node) { if (rewritten != node) {
rewritten.setParent(this); rewritten.setParent(this);
node = rewritten; node = rewritten;
} }
$include(ASTNode.incHookGetChildExitEval)
} }
return (T) node; return (T) node;
$else $else
...@@ -513,7 +516,6 @@ $endif ...@@ -513,7 +516,6 @@ $endif
return null; return null;
} }
T child = (T) children[i]; T child = (T) children[i];
$include(ASTNode.incHookGetChildNT)
return child; return child;
} }
]] ]]
......
...@@ -329,6 +329,69 @@ $endif ...@@ -329,6 +329,69 @@ $endif
$endif $endif
]] ]]
ASTNode.incHookGetChild = [[
$if(IncrementalEnabled)
$if(IncrementalLevelParam)
if (getChild_handler[i] == null) {
$if(IncrementalPropLimit)
getChild_handler[i] = new $DDGNodeName(this, "getChild", Integer.valueOf(i), !child.mayHaveRewrite());
$else
getChild_handler[i] = new $DDGNodeName(this, "getChild", Integer.valueOf(i));
$endif
}
state().addHandlerDepTo(getChild_handler[i]);
$endif
$if(IncrementalLevelAttr)
state().addHandlerDepTo(getChild_handler);
$endif
$if(IncrementalLevelNode)
if (child != null) {
state().addHandlerDepTo(child.handler);
}
$endif
$if(IncrementalLevelRegion)
$if(#isRegionRoot)
if (state().IN_COMPUTATION > 0 && child != null) {
child.handler().addDependant(handler);
}
$endif
$endif
$endif
]]
ASTNode.incHookGetChildEnterEval = [[
$if(IncrementalEnabled)
$if(IncrementalLevelParam)
state().enterAttrStoreEval(getChild_handler[i]);
$endif
$if(IncrementalLevelRegion)
// TODO(emso): Add region enter getChild eval.
$endif
$endif
]]
ASTNode.incHookGetChildExitEval = [[
$if(IncrementalEnabled)
$if(IncrementalLevelParam)
state().exitAttrStoreEval(getChild_handler[i]);
$endif
$if(IncrementalLevelRegion)
// TODO(emso): Add region exit getChild eval.
$endif
$endif
]]
TokenComponent.incHookGetToken = [[ TokenComponent.incHookGetToken = [[
$if(IncrementalEnabled) $if(IncrementalEnabled)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment