From f12001705a8c7da2b198abff7df594c98a366b6b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Emma=20S=C3=B6derberg?= <emma.m.soderberg@gmail.com>
Date: Tue, 26 Jun 2018 18:18:41 +0200
Subject: [PATCH] Adds enter/exit to incremental construction state for
 circular NTAs.

Entering the construction state avoids change propagation for edits
occuring during evaluation of circular NTAs.
---
 src/template/ast/ASTNode.tt  | 2 ++
 src/template/ast/Circular.tt | 6 ++++++
 2 files changed, 8 insertions(+)

diff --git a/src/template/ast/ASTNode.tt b/src/template/ast/ASTNode.tt
index f1bf99b4..4b397a3e 100644
--- a/src/template/ast/ASTNode.tt
+++ b/src/template/ast/ASTNode.tt
@@ -425,7 +425,9 @@ $if(RewriteEnabled)
       $include(ASTNode.incHookGetChildEnterEval)
       $ASTNode rewritten = node.rewrittenNode();
       if (rewritten != node) {
+        $include(State.incHookConstructionStart)
         rewritten.setParent(this);
+        $include(State.incHookConstructionEnd)
         node = rewritten;
       }
       $include(ASTNode.incHookGetChildExitEval)
diff --git a/src/template/ast/Circular.tt b/src/template/ast/Circular.tt
index b2eb5f5b..b64f8c23 100644
--- a/src/template/ast/Circular.tt
+++ b/src/template/ast/Circular.tt
@@ -55,7 +55,9 @@ $endif
       #(signature)_value = $BottomValue;
 $if(#getNTA)
       if (#(signature)_value != null) {
+        $include(State.incHookConstructionStart)
         #(signature)_value.setParent(#ntaParent);
+        $include(State.incHookConstructionEnd)
       }
 $endif
     }
@@ -81,7 +83,9 @@ $endif
         #(signature)_value = new_#(signature)_value;
 $if(#getNTA)
         if (#(signature)_value != null) {
+          $include(State.incHookConstructionStart)
           #(signature)_value.setParent(#ntaParent);
+          $include(State.incHookConstructionEnd)
         }
 $endif
         #tracePrintStartingCycle
@@ -128,7 +132,9 @@ $endif
       #(signature)_value = new_#(signature)_value;
 $if(#getNTA)
       if (#(signature)_value != null) {
+        $include(State.incHookConstructionStart)
         #(signature)_value.setParent(#ntaParent);
+        $include(State.incHookConstructionEnd)
       }
 $endif
       $TracePrintReturnNewValue
-- 
GitLab