From 63a17dfc740e84a80dd79d3cc0408098927a1d6a Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Fri, 21 Jul 2023 16:45:15 +0200
Subject: [PATCH] Don't update Parser.nodeList field in inlining parsers

Inlining parsers don't have a filter method that could be overridden, so
there's nothing that can modify this field.
---
 .../org/sablecc/sablecc/parser/Parser.java    |  6 ++----
 .../resources/org/sablecc/sablecc/parser.txt  | 19 ++++++++++++++-----
 2 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index ef14faa..941b84c 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -107,17 +107,15 @@ public class Parser implements IParser
 
     private void push(int numstate, List<Object> listNode) throws ParserException, LexerException, IOException
     {
-        this.nodeList = listNode;
-
         if(!this.stack.hasNext())
         {
-            this.stack.add(new State(numstate, this.nodeList));
+            this.stack.add(new State(numstate, listNode));
             return;
         }
 
         State s = this.stack.next();
         s.state = numstate;
-        s.nodes = this.nodeList;
+        s.nodes = listNode;
     }
 
     private int goTo(int index)
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index c7ea71c..d3f4b0c 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -119,7 +119,16 @@ Macro:ParserInliningPushHeader
 
     private void push(int numstate, List<Object> listNode) throws ParserException, LexerException, IOException
     {
-        this.nodeList = listNode;
+        if(!this.stack.hasNext())
+        {
+            this.stack.add(new State(numstate, listNode));
+            return;
+        }
+
+        State s = this.stack.next();
+        s.state = numstate;
+        s.nodes = listNode;
+    }
 
 
 $
@@ -137,10 +146,6 @@ Macro:ParserNoInliningPushHeader
             filter();
         }
 
-
-$
-
-Macro:ParserCommon
         if(!this.stack.hasNext())
         {
             this.stack.add(new State(numstate, this.nodeList));
@@ -152,6 +157,10 @@ Macro:ParserCommon
         s.nodes = this.nodeList;
     }
 
+
+$
+
+Macro:ParserCommon
     private int goTo(int index)
     {
         int state = state();
-- 
GitLab