diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java index ef14faa8e459f24d4aab4554bb5cea23ffd6e0fa..941b84c3139e9b7ab236ea8e8860ae754a997b85 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 c7ea71cf9d2a1e8020c887a9e09d66110752f94f..d3f4b0c27200b2923077df0123dfa31aa952c499 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();