Use local variable for frequently used fields in Lexer

This commit is contained in:
aNNiMON 2023-09-16 21:31:22 +03:00 committed by Victor Melnik
parent a87d5f7685
commit 95d32a6c91

View File

@ -116,7 +116,7 @@ public final class Lexer {
private final List<Token> tokens; private final List<Token> tokens;
private final StringBuilder buffer; private final StringBuilder buffer;
private int pos; private int pos;
private int row, col; private int row, col;
@ -125,7 +125,7 @@ public final class Lexer {
length = input.length(); length = input.length();
tokens = new ArrayList<>(); tokens = new ArrayList<>();
buffer = new StringBuilder(); buffer = new StringBuilder(40);
row = col = 1; row = col = 1;
} }
@ -152,7 +152,7 @@ public final class Lexer {
} }
private void tokenizeNumber() { private void tokenizeNumber() {
clearBuffer(); final var buffer = createBuffer();
final Pos startPos = markPos(); final Pos startPos = markPos();
char current = peek(0); char current = peek(0);
if (current == '0' && (peek(1) == 'x' || (peek(1) == 'X'))) { if (current == '0' && (peek(1) == 'x' || (peek(1) == 'X'))) {
@ -206,7 +206,7 @@ public final class Lexer {
} }
private void tokenizeHexNumber(int skipChars) { private void tokenizeHexNumber(int skipChars) {
clearBuffer(); final var buffer = createBuffer();
final Pos startPos = markPos(); final Pos startPos = markPos();
// Skip HEX prefix 0x or # // Skip HEX prefix 0x or #
for (int i = 0; i < skipChars; i++) skip(); for (int i = 0; i < skipChars; i++) skip();
@ -248,7 +248,7 @@ public final class Lexer {
} }
final Pos startPos = markPos(); final Pos startPos = markPos();
clearBuffer(); final var buffer = createBuffer();
while (true) { while (true) {
if (!buffer.isEmpty() && !OPERATORS.containsKey(buffer.toString() + current)) { if (!buffer.isEmpty() && !OPERATORS.containsKey(buffer.toString() + current)) {
addToken(OPERATORS.get(buffer.toString()), startPos); addToken(OPERATORS.get(buffer.toString()), startPos);
@ -260,7 +260,7 @@ public final class Lexer {
} }
private void tokenizeWord() { private void tokenizeWord() {
clearBuffer(); final var buffer = createBuffer();
final Pos startPos = markPos(); final Pos startPos = markPos();
buffer.append(peek(0)); buffer.append(peek(0));
char current = next(); char current = next();
@ -280,7 +280,7 @@ public final class Lexer {
private void tokenizeExtendedWord() { private void tokenizeExtendedWord() {
final Pos startPos = markPos(); final Pos startPos = markPos();
skip();// skip ` skip();// skip `
clearBuffer(); final var buffer = createBuffer();
char current = peek(0); char current = peek(0);
while (current != '`') { while (current != '`') {
if (current == '\0') throw error("Reached end of file while parsing extended word."); if (current == '\0') throw error("Reached end of file while parsing extended word.");
@ -295,7 +295,7 @@ public final class Lexer {
private void tokenizeText() { private void tokenizeText() {
final Pos startPos = markPos(); final Pos startPos = markPos();
skip();// skip " skip();// skip "
clearBuffer(); final var buffer = createBuffer();
char current = peek(0); char current = peek(0);
while (true) { while (true) {
if (current == '\\') { if (current == '\\') {
@ -372,8 +372,9 @@ public final class Lexer {
return isOwnLangIdentifierStart(current) || isNumber(current); return isOwnLangIdentifierStart(current) || isNumber(current);
} }
private void clearBuffer() { private StringBuilder createBuffer() {
buffer.setLength(0); buffer.setLength(0);
return buffer;
} }
private Pos markPos() { private Pos markPos() {