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