From a3c6d4129781ff3a83b6438dd7565da57d1bc788 Mon Sep 17 00:00:00 2001
From: dgelessus <dgelessus@users.noreply.github.com>
Date: Thu, 20 Jul 2023 18:36:42 +0200
Subject: [PATCH] Cache state in a local variable in Parser.parse

---
 .../java/org/sablecc/sablecc/parser/Parser.java   | 15 ++++++++-------
 src/main/resources/org/sablecc/sablecc/parser.txt | 15 ++++++++-------
 2 files changed, 16 insertions(+), 14 deletions(-)

diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index eb9f70d..25f7533 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -187,28 +187,29 @@ public class Parser implements IParser
             this.last_token = this.lexer.peek();
 
             int index = index(this.lexer.peek());
-            int action = Parser.actionTable[state()][0][1];
-            int destination = Parser.actionTable[state()][0][2];
+            int state = state();
+            int action = Parser.actionTable[state][0][1];
+            int destination = Parser.actionTable[state][0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state()].length - 1;
+            int high = Parser.actionTable[state].length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state()][middle][0])
+                if(index < Parser.actionTable[state][middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state()][middle][0])
+                else if(index > Parser.actionTable[state][middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    action = Parser.actionTable[state()][middle][1];
-                    destination = Parser.actionTable[state()][middle][2];
+                    action = Parser.actionTable[state][middle][1];
+                    destination = Parser.actionTable[state][middle][2];
                     break;
                 }
             }
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 013a568..b90e4a6 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -221,28 +221,29 @@ Macro:ParserCommon
             this.last_token = this.lexer.peek();
 
             int index = index(this.lexer.peek());
-            int action = Parser.actionTable[state()][0][1];
-            int destination = Parser.actionTable[state()][0][2];
+            int state = state();
+            int action = Parser.actionTable[state][0][1];
+            int destination = Parser.actionTable[state][0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state()].length - 1;
+            int high = Parser.actionTable[state].length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state()][middle][0])
+                if(index < Parser.actionTable[state][middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state()][middle][0])
+                else if(index > Parser.actionTable[state][middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    action = Parser.actionTable[state()][middle][1];
-                    destination = Parser.actionTable[state()][middle][2];
+                    action = Parser.actionTable[state][middle][1];
+                    destination = Parser.actionTable[state][middle][2];
                     break;
                 }
             }
-- 
GitLab