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