mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 04:13:03 +00:00
d: change YYLocation's type from class to struct
This avoids heap allocation and gives minimal costs for the creation and destruction of the YYParser.Symbol struct if the location tracking is active. Suggested by H. S. Teoh. * data/skeletons/lalr1.d: Here. * doc/bison.texi: Document it. * examples/d/calc/calc.y: Adjust. * tests/calc.at: Test it.
This commit is contained in:
committed by
Akim Demaille
parent
10305f3e94
commit
e5854bbddd
@@ -127,7 +127,7 @@ if (isInputRange!R && is(ElementType!R : dchar))
|
||||
}
|
||||
|
||||
if (input.empty)
|
||||
return Calc.Symbol(TokenKind.YYEOF, new YYLocation(startPos, endPos));
|
||||
return Calc.Symbol(TokenKind.YYEOF, YYLocation(startPos, endPos));
|
||||
|
||||
// Numbers.
|
||||
if (input.front.isNumber)
|
||||
@@ -143,7 +143,7 @@ if (isInputRange!R && is(ElementType!R : dchar))
|
||||
}
|
||||
start = end;
|
||||
end.column += lenChars;
|
||||
return Calc.Symbol(TokenKind.NUM, semanticVal_.ival, new YYLocation(startPos, endPos));
|
||||
return Calc.Symbol(TokenKind.NUM, semanticVal_.ival, YYLocation(startPos, endPos));
|
||||
}
|
||||
|
||||
// Individual characters
|
||||
@@ -153,17 +153,17 @@ if (isInputRange!R && is(ElementType!R : dchar))
|
||||
end.column++;
|
||||
switch (ch)
|
||||
{
|
||||
case '+': return Calc.Symbol(TokenKind.PLUS, new YYLocation(startPos, endPos));
|
||||
case '-': return Calc.Symbol(TokenKind.MINUS, new YYLocation(startPos, endPos));
|
||||
case '*': return Calc.Symbol(TokenKind.STAR, new YYLocation(startPos, endPos));
|
||||
case '/': return Calc.Symbol(TokenKind.SLASH, new YYLocation(startPos, endPos));
|
||||
case '(': return Calc.Symbol(TokenKind.LPAR, new YYLocation(startPos, endPos));
|
||||
case ')': return Calc.Symbol(TokenKind.RPAR, new YYLocation(startPos, endPos));
|
||||
case '+': return Calc.Symbol(TokenKind.PLUS, YYLocation(startPos, endPos));
|
||||
case '-': return Calc.Symbol(TokenKind.MINUS, YYLocation(startPos, endPos));
|
||||
case '*': return Calc.Symbol(TokenKind.STAR, YYLocation(startPos, endPos));
|
||||
case '/': return Calc.Symbol(TokenKind.SLASH, YYLocation(startPos, endPos));
|
||||
case '(': return Calc.Symbol(TokenKind.LPAR, YYLocation(startPos, endPos));
|
||||
case ')': return Calc.Symbol(TokenKind.RPAR, YYLocation(startPos, endPos));
|
||||
case '\n':
|
||||
{
|
||||
end.line++;
|
||||
end.column = 1;
|
||||
return Calc.Symbol(TokenKind.EOL, new YYLocation(startPos, endPos));
|
||||
return Calc.Symbol(TokenKind.EOL, YYLocation(startPos, endPos));
|
||||
}
|
||||
default: assert(0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user