From 7a1b275449287468a827a7781a012b6db3cd635c Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Wed, 6 Apr 2022 14:06:06 +0200
Subject: [PATCH] Port node list setter fixes from SableCC 3.6

This fixes the SableCC inlining bug that causes problems for our LTL
parser.
---
 src/main/java/org/sablecc/sablecc/node/AAlt.java   |  7 ++++++-
 .../org/sablecc/sablecc/node/AAltTransform.java    |  7 ++++++-
 src/main/java/org/sablecc/sablecc/node/AAst.java   |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AAstAlt.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AAstProd.java    |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AConcat.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AGrammar.java    |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AHelpers.java    |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AIgnTokens.java  |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AListTerm.java   |  7 ++++++-
 .../org/sablecc/sablecc/node/ANewListTerm.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/ANewTerm.java    |  7 ++++++-
 src/main/java/org/sablecc/sablecc/node/AProd.java  | 14 ++++++++++++--
 .../org/sablecc/sablecc/node/AProductions.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/ARegExp.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AStateList.java  |  7 ++++++-
 .../java/org/sablecc/sablecc/node/AStates.java     |  7 ++++++-
 .../java/org/sablecc/sablecc/node/ATokens.java     |  7 ++++++-
 .../resources/org/sablecc/sablecc/alternatives.txt |  7 ++++++-
 19 files changed, 120 insertions(+), 20 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/node/AAlt.java b/src/main/java/org/sablecc/sablecc/node/AAlt.java
index 6cdd013..156c428 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAlt.java
@@ -77,8 +77,12 @@ public final class AAlt extends PAlt
 
     public void setElems(List<PElem> list)
     {
+        for(PElem e : this._elems_)
+        {
+            e.parent(null);
+        }
         this._elems_.clear();
-        this._elems_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -87,6 +91,7 @@ public final class AAlt extends PAlt
             }
 
             e.parent(this);
+            this._elems_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
index 5e92bd1..81ad162 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAltTransform.java
@@ -77,8 +77,12 @@ public final class AAltTransform extends PAltTransform
 
     public void setTerms(List<PTerm> list)
     {
+        for(PTerm e : this._terms_)
+        {
+            e.parent(null);
+        }
         this._terms_.clear();
-        this._terms_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -87,6 +91,7 @@ public final class AAltTransform extends PAltTransform
             }
 
             e.parent(this);
+            this._terms_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAst.java b/src/main/java/org/sablecc/sablecc/node/AAst.java
index f324a73..bf3fc1f 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAst.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAst.java
@@ -42,8 +42,12 @@ public final class AAst extends PAst
 
     public void setProds(List<PAstProd> list)
     {
+        for(PAstProd e : this._prods_)
+        {
+            e.parent(null);
+        }
         this._prods_.clear();
-        this._prods_.addAll(list);
+
         for(PAstProd e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AAst extends PAst
             }
 
             e.parent(this);
+            this._prods_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
index 3f75eb8..21fa526 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstAlt.java
@@ -72,8 +72,12 @@ public final class AAstAlt extends PAstAlt
 
     public void setElems(List<PElem> list)
     {
+        for(PElem e : this._elems_)
+        {
+            e.parent(null);
+        }
         this._elems_.clear();
-        this._elems_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AAstAlt extends PAstAlt
             }
 
             e.parent(this);
+            this._elems_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AAstProd.java b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
index 902d942..470f33d 100644
--- a/src/main/java/org/sablecc/sablecc/node/AAstProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AAstProd.java
@@ -72,8 +72,12 @@ public final class AAstProd extends PAstProd
 
     public void setAlts(List<PAstAlt> list)
     {
+        for(PAstAlt e : this._alts_)
+        {
+            e.parent(null);
+        }
         this._alts_.clear();
-        this._alts_.addAll(list);
+
         for(PAstAlt e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AAstProd extends PAstProd
             }
 
             e.parent(this);
+            this._alts_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AConcat.java b/src/main/java/org/sablecc/sablecc/node/AConcat.java
index 328986f..194b8a8 100644
--- a/src/main/java/org/sablecc/sablecc/node/AConcat.java
+++ b/src/main/java/org/sablecc/sablecc/node/AConcat.java
@@ -42,8 +42,12 @@ public final class AConcat extends PConcat
 
     public void setUnExps(List<PUnExp> list)
     {
+        for(PUnExp e : this._unExps_)
+        {
+            e.parent(null);
+        }
         this._unExps_.clear();
-        this._unExps_.addAll(list);
+
         for(PUnExp e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AConcat extends PConcat
             }
 
             e.parent(this);
+            this._unExps_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AGrammar.java b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
index 8da0a7c..57d4ef7 100644
--- a/src/main/java/org/sablecc/sablecc/node/AGrammar.java
+++ b/src/main/java/org/sablecc/sablecc/node/AGrammar.java
@@ -72,8 +72,12 @@ public final class AGrammar extends PGrammar
 
     public void setPackage(List<TPkgId> list)
     {
+        for(TPkgId e : this._package_)
+        {
+            e.parent(null);
+        }
         this._package_.clear();
-        this._package_.addAll(list);
+
         for(TPkgId e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AGrammar extends PGrammar
             }
 
             e.parent(this);
+            this._package_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AHelpers.java b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
index a6ad653..d9df229 100644
--- a/src/main/java/org/sablecc/sablecc/node/AHelpers.java
+++ b/src/main/java/org/sablecc/sablecc/node/AHelpers.java
@@ -42,8 +42,12 @@ public final class AHelpers extends PHelpers
 
     public void setHelperDefs(List<PHelperDef> list)
     {
+        for(PHelperDef e : this._helperDefs_)
+        {
+            e.parent(null);
+        }
         this._helperDefs_.clear();
-        this._helperDefs_.addAll(list);
+
         for(PHelperDef e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AHelpers extends PHelpers
             }
 
             e.parent(this);
+            this._helperDefs_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
index 308ed8b..f608e6e 100644
--- a/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/AIgnTokens.java
@@ -42,8 +42,12 @@ public final class AIgnTokens extends PIgnTokens
 
     public void setListId(List<TId> list)
     {
+        for(TId e : this._listId_)
+        {
+            e.parent(null);
+        }
         this._listId_.clear();
-        this._listId_.addAll(list);
+
         for(TId e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AIgnTokens extends PIgnTokens
             }
 
             e.parent(this);
+            this._listId_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AListTerm.java b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
index fa01dab..b2a57d9 100644
--- a/src/main/java/org/sablecc/sablecc/node/AListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/AListTerm.java
@@ -72,8 +72,12 @@ public final class AListTerm extends PTerm
 
     public void setListTerms(List<PListTerm> list)
     {
+        for(PListTerm e : this._listTerms_)
+        {
+            e.parent(null);
+        }
         this._listTerms_.clear();
-        this._listTerms_.addAll(list);
+
         for(PListTerm e : list)
         {
             if(e.parent() != null)
@@ -82,6 +86,7 @@ public final class AListTerm extends PTerm
             }
 
             e.parent(this);
+            this._listTerms_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
index 274ed5a..0a378f8 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewListTerm.java
@@ -102,8 +102,12 @@ public final class ANewListTerm extends PListTerm
 
     public void setParams(List<PTerm> list)
     {
+        for(PTerm e : this._params_)
+        {
+            e.parent(null);
+        }
         this._params_.clear();
-        this._params_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class ANewListTerm extends PListTerm
             }
 
             e.parent(this);
+            this._params_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
index 9ed4904..f71060f 100644
--- a/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
+++ b/src/main/java/org/sablecc/sablecc/node/ANewTerm.java
@@ -102,8 +102,12 @@ public final class ANewTerm extends PTerm
 
     public void setParams(List<PTerm> list)
     {
+        for(PTerm e : this._params_)
+        {
+            e.parent(null);
+        }
         this._params_.clear();
-        this._params_.addAll(list);
+
         for(PTerm e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class ANewTerm extends PTerm
             }
 
             e.parent(this);
+            this._params_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AProd.java b/src/main/java/org/sablecc/sablecc/node/AProd.java
index b5db8fb..8dac357 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProd.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProd.java
@@ -107,8 +107,12 @@ public final class AProd extends PProd
 
     public void setProdTransform(List<PElem> list)
     {
+        for(PElem e : this._prodTransform_)
+        {
+            e.parent(null);
+        }
         this._prodTransform_.clear();
-        this._prodTransform_.addAll(list);
+
         for(PElem e : list)
         {
             if(e.parent() != null)
@@ -117,6 +121,7 @@ public final class AProd extends PProd
             }
 
             e.parent(this);
+            this._prodTransform_.add(e);
         }
     }
 
@@ -127,8 +132,12 @@ public final class AProd extends PProd
 
     public void setAlts(List<PAlt> list)
     {
+        for(PAlt e : this._alts_)
+        {
+            e.parent(null);
+        }
         this._alts_.clear();
-        this._alts_.addAll(list);
+
         for(PAlt e : list)
         {
             if(e.parent() != null)
@@ -137,6 +146,7 @@ public final class AProd extends PProd
             }
 
             e.parent(this);
+            this._alts_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AProductions.java b/src/main/java/org/sablecc/sablecc/node/AProductions.java
index c65832b..1704b89 100644
--- a/src/main/java/org/sablecc/sablecc/node/AProductions.java
+++ b/src/main/java/org/sablecc/sablecc/node/AProductions.java
@@ -42,8 +42,12 @@ public final class AProductions extends PProductions
 
     public void setProds(List<PProd> list)
     {
+        for(PProd e : this._prods_)
+        {
+            e.parent(null);
+        }
         this._prods_.clear();
-        this._prods_.addAll(list);
+
         for(PProd e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AProductions extends PProductions
             }
 
             e.parent(this);
+            this._prods_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ARegExp.java b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
index f4d9226..3950ef3 100644
--- a/src/main/java/org/sablecc/sablecc/node/ARegExp.java
+++ b/src/main/java/org/sablecc/sablecc/node/ARegExp.java
@@ -42,8 +42,12 @@ public final class ARegExp extends PRegExp
 
     public void setConcats(List<PConcat> list)
     {
+        for(PConcat e : this._concats_)
+        {
+            e.parent(null);
+        }
         this._concats_.clear();
-        this._concats_.addAll(list);
+
         for(PConcat e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class ARegExp extends PRegExp
             }
 
             e.parent(this);
+            this._concats_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AStateList.java b/src/main/java/org/sablecc/sablecc/node/AStateList.java
index 821711a..1fe6417 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStateList.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStateList.java
@@ -102,8 +102,12 @@ public final class AStateList extends PStateList
 
     public void setStateLists(List<PStateListTail> list)
     {
+        for(PStateListTail e : this._stateLists_)
+        {
+            e.parent(null);
+        }
         this._stateLists_.clear();
-        this._stateLists_.addAll(list);
+
         for(PStateListTail e : list)
         {
             if(e.parent() != null)
@@ -112,6 +116,7 @@ public final class AStateList extends PStateList
             }
 
             e.parent(this);
+            this._stateLists_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/AStates.java b/src/main/java/org/sablecc/sablecc/node/AStates.java
index 27ccc36..1374512 100644
--- a/src/main/java/org/sablecc/sablecc/node/AStates.java
+++ b/src/main/java/org/sablecc/sablecc/node/AStates.java
@@ -42,8 +42,12 @@ public final class AStates extends PStates
 
     public void setListId(List<TId> list)
     {
+        for(TId e : this._listId_)
+        {
+            e.parent(null);
+        }
         this._listId_.clear();
-        this._listId_.addAll(list);
+
         for(TId e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class AStates extends PStates
             }
 
             e.parent(this);
+            this._listId_.add(e);
         }
     }
 
diff --git a/src/main/java/org/sablecc/sablecc/node/ATokens.java b/src/main/java/org/sablecc/sablecc/node/ATokens.java
index 107b774..1755173 100644
--- a/src/main/java/org/sablecc/sablecc/node/ATokens.java
+++ b/src/main/java/org/sablecc/sablecc/node/ATokens.java
@@ -42,8 +42,12 @@ public final class ATokens extends PTokens
 
     public void setTokenDefs(List<PTokenDef> list)
     {
+        for(PTokenDef e : this._tokenDefs_)
+        {
+            e.parent(null);
+        }
         this._tokenDefs_.clear();
-        this._tokenDefs_.addAll(list);
+
         for(PTokenDef e : list)
         {
             if(e.parent() != null)
@@ -52,6 +56,7 @@ public final class ATokens extends PTokens
             }
 
             e.parent(this);
+            this._tokenDefs_.add(e);
         }
     }
 
diff --git a/src/main/resources/org/sablecc/sablecc/alternatives.txt b/src/main/resources/org/sablecc/sablecc/alternatives.txt
index 123ba61..faee29b 100644
--- a/src/main/resources/org/sablecc/sablecc/alternatives.txt
+++ b/src/main/resources/org/sablecc/sablecc/alternatives.txt
@@ -147,8 +147,12 @@ Macro:GetSetList
 
     public void set$0$(List<$2$> list)
     {
+        for($2$ e : this._$1$_)
+        {
+            e.parent(null);
+        }
         this._$1$_.clear();
-        this._$1$_.addAll(list);
+
         for($2$ e : list)
         {
             if(e.parent() != null)
@@ -157,6 +161,7 @@ Macro:GetSetList
             }
 
             e.parent(this);
+            this._$1$_.add(e);
         }
     }
 
-- 
GitLab