diff --git a/src/template/ast/ASTNode.tt b/src/template/ast/ASTNode.tt index a7c287596cb2e2a9a415e3138ff62d5e407bacfe..f1bf99b41c7fee55df6f72b6a2c47d451ae7a13c 100644 --- a/src/template/ast/ASTNode.tt +++ b/src/template/ast/ASTNode.tt @@ -420,12 +420,15 @@ ASTNode.getChild [[ $if(RewriteEnabled) $if(RewriteCircularNTA) $ASTNode node = this.getChildNoTransform(i); + $include(ASTNode.incHookGetChild) if (node != null && node.mayHaveRewrite()) { + $include(ASTNode.incHookGetChildEnterEval) $ASTNode rewritten = node.rewrittenNode(); if (rewritten != node) { rewritten.setParent(this); node = rewritten; } + $include(ASTNode.incHookGetChildExitEval) } return (T) node; $else @@ -513,7 +516,6 @@ $endif return null; } T child = (T) children[i]; - $include(ASTNode.incHookGetChildNT) return child; } ]] diff --git a/src/template/incremental/Tracking.tt b/src/template/incremental/Tracking.tt index a94462671f96e5f7451f90d018d9e8e0a3a6c406..b37e88d11c6da1a790c05cdf55ed32cb47c5db47 100644 --- a/src/template/incremental/Tracking.tt +++ b/src/template/incremental/Tracking.tt @@ -329,6 +329,69 @@ $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 = [[ $if(IncrementalEnabled)