1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-11 10:18:15 +09:00

LibJS: Use some macro magic to avoid duplicating all the token types

This commit is contained in:
Andreas Kling 2020-03-30 13:11:07 +02:00
parent f221771717
commit a1c718e387
Notes: sideshowbarker 2024-07-19 08:03:16 +09:00
2 changed files with 99 additions and 265 deletions

View file

@ -33,182 +33,11 @@ namespace JS {
const char* Token::name(TokenType type) const char* Token::name(TokenType type)
{ {
switch (type) { switch (type) {
case TokenType::Ampersand: #define __ENUMERATE_JS_TOKEN(x) \
return "Ampersand"; case TokenType::x: \
case TokenType::AmpersandEquals: return #x;
return "AmpersandEquals"; ENUMERATE_JS_TOKENS
case TokenType::Asterisk: #undef __ENUMERATE_JS_TOKEN
return "Asterisk";
case TokenType::AsteriskAsteriskEquals:
return "AsteriskAsteriskEquals";
case TokenType::AsteriskEquals:
return "AsteriskEquals";
case TokenType::Await:
return "Await";
case TokenType::BoolLiteral:
return "BoolLiteral";
case TokenType::BracketOpen:
return "BracketOpen";
case TokenType::BracketClose:
return "BracketClose";
case TokenType::Break:
return "Break";
case TokenType::Caret:
return "Caret";
case TokenType::Case:
return "Case";
case TokenType::Catch:
return "Catch";
case TokenType::Class:
return "Class";
case TokenType::Colon:
return "Colon";
case TokenType::Comma:
return "Comma";
case TokenType::Const:
return "Const";
case TokenType::CurlyClose:
return "CurlyClose";
case TokenType::CurlyOpen:
return "CurlyOpen";
case TokenType::Default:
return "Default";
case TokenType::Delete:
return "Delete";
case TokenType::Do:
return "Do";
case TokenType::DoubleAmpersand:
return "DoubleAmpersand";
case TokenType::DoubleAsterisk:
return "DoubleAsterisk";
case TokenType::DoublePipe:
return "DoublePipe";
case TokenType::DoubleQuestionMark:
return "DoubleQuestionMark";
case TokenType::Else:
return "Else";
case TokenType::Eof:
return "Eof";
case TokenType::Equals:
return "Equals";
case TokenType::EqualsEquals:
return "EqualsEquals";
case TokenType::EqualsEqualsEquals:
return "EqualsEqualsEquals";
case TokenType::ExclamationMark:
return "ExclamationMark";
case TokenType::ExclamationMarkEquals:
return "ExclamationMarkEquals";
case TokenType::ExclamationMarkEqualsEquals:
return "ExclamationMarkEqualsEquals";
case TokenType::Finally:
return "Finally";
case TokenType::For:
return "For";
case TokenType::Function:
return "Function";
case TokenType::GreaterThan:
return "GreaterThan";
case TokenType::GreaterThanEquals:
return "GreaterThanEquals";
case TokenType::Identifier:
return "Identifier";
case TokenType::If:
return "If";
case TokenType::In:
return "In";
case TokenType::Instanceof:
return "Instanceof";
case TokenType::Interface:
return "Interface";
case TokenType::Invalid:
return "Invalid";
case TokenType::LessThan:
return "LessThan";
case TokenType::LessThanEquals:
return "LessThanEquals";
case TokenType::Let:
return "Let";
case TokenType::Minus:
return "Minus";
case TokenType::MinusEquals:
return "MinusEquals";
case TokenType::MinusMinus:
return "MinusMinus";
case TokenType::New:
return "New";
case TokenType::NullLiteral:
return "NullLiteral";
case TokenType::NumericLiteral:
return "NumericLiteral";
case TokenType::ParenClose:
return "ParenClose";
case TokenType::ParenOpen:
return "ParenOpen";
case TokenType::Percent:
return "Percent";
case TokenType::PercentEquals:
return "PercentEquals";
case TokenType::Period:
return "Period";
case TokenType::Pipe:
return "Pipe";
case TokenType::PipeEquals:
return "PipeEquals";
case TokenType::Plus:
return "Plus";
case TokenType::PlusEquals:
return "PlusEquals";
case TokenType::PlusPlus:
return "PlusPlus";
case TokenType::QuestionMark:
return "QuestionMark";
case TokenType::QuestionMarkPeriod:
return "QuestionMarkPeriod";
case TokenType::RegexLiteral:
return "RegexLiteral";
case TokenType::Return:
return "Return";
case TokenType::Semicolon:
return "Semicolon";
case TokenType::ShiftLeft:
return "ShiftLeft";
case TokenType::ShiftLeftEquals:
return "ShiftLeftEquals";
case TokenType::ShiftRight:
return "ShiftRight";
case TokenType::ShiftRightEquals:
return "ShiftRightEquals";
case TokenType::Slash:
return "Slash";
case TokenType::SlashEquals:
return "SlashEquals";
case TokenType::StringLiteral:
return "StringLiteral";
case TokenType::Switch:
return "Switch";
case TokenType::Tilde:
return "Tilde";
case TokenType::Try:
return "Try";
case TokenType::Typeof:
return "Typeof";
case TokenType::UndefinedLiteral:
return "UndefinedLiteral";
case TokenType::UnsignedShiftRight:
return "UnsignedShiftRight";
case TokenType::UnsignedShiftRightEquals:
return "UnsignedShiftRightEquals";
case TokenType::UnterminatedStringLiteral:
return "UnterminatedStringLiteral";
case TokenType::Var:
return "Var";
case TokenType::Void:
return "Void";
case TokenType::While:
return "While";
case TokenType::Yield:
return "Yield";
default: default:
ASSERT_NOT_REACHED(); ASSERT_NOT_REACHED();
return "<Unknown>"; return "<Unknown>";

View file

@ -31,96 +31,101 @@
namespace JS { namespace JS {
#define ENUMERATE_JS_TOKENS \
__ENUMERATE_JS_TOKEN(Ampersand) \
__ENUMERATE_JS_TOKEN(AmpersandEquals) \
__ENUMERATE_JS_TOKEN(Asterisk) \
__ENUMERATE_JS_TOKEN(AsteriskAsteriskEquals) \
__ENUMERATE_JS_TOKEN(AsteriskEquals) \
__ENUMERATE_JS_TOKEN(Await) \
__ENUMERATE_JS_TOKEN(BoolLiteral) \
__ENUMERATE_JS_TOKEN(BracketClose) \
__ENUMERATE_JS_TOKEN(BracketOpen) \
__ENUMERATE_JS_TOKEN(Break) \
__ENUMERATE_JS_TOKEN(Caret) \
__ENUMERATE_JS_TOKEN(Case) \
__ENUMERATE_JS_TOKEN(Catch) \
__ENUMERATE_JS_TOKEN(Class) \
__ENUMERATE_JS_TOKEN(Colon) \
__ENUMERATE_JS_TOKEN(Comma) \
__ENUMERATE_JS_TOKEN(Const) \
__ENUMERATE_JS_TOKEN(CurlyClose) \
__ENUMERATE_JS_TOKEN(CurlyOpen) \
__ENUMERATE_JS_TOKEN(Default) \
__ENUMERATE_JS_TOKEN(Delete) \
__ENUMERATE_JS_TOKEN(Do) \
__ENUMERATE_JS_TOKEN(DoubleAmpersand) \
__ENUMERATE_JS_TOKEN(DoubleAsterisk) \
__ENUMERATE_JS_TOKEN(DoublePipe) \
__ENUMERATE_JS_TOKEN(DoubleQuestionMark) \
__ENUMERATE_JS_TOKEN(Else) \
__ENUMERATE_JS_TOKEN(Eof) \
__ENUMERATE_JS_TOKEN(Equals) \
__ENUMERATE_JS_TOKEN(EqualsEquals) \
__ENUMERATE_JS_TOKEN(EqualsEqualsEquals) \
__ENUMERATE_JS_TOKEN(ExclamationMark) \
__ENUMERATE_JS_TOKEN(ExclamationMarkEquals) \
__ENUMERATE_JS_TOKEN(ExclamationMarkEqualsEquals) \
__ENUMERATE_JS_TOKEN(Finally) \
__ENUMERATE_JS_TOKEN(For) \
__ENUMERATE_JS_TOKEN(Function) \
__ENUMERATE_JS_TOKEN(GreaterThan) \
__ENUMERATE_JS_TOKEN(GreaterThanEquals) \
__ENUMERATE_JS_TOKEN(Identifier) \
__ENUMERATE_JS_TOKEN(If) \
__ENUMERATE_JS_TOKEN(In) \
__ENUMERATE_JS_TOKEN(Instanceof) \
__ENUMERATE_JS_TOKEN(Interface) \
__ENUMERATE_JS_TOKEN(Invalid) \
__ENUMERATE_JS_TOKEN(LessThan) \
__ENUMERATE_JS_TOKEN(LessThanEquals) \
__ENUMERATE_JS_TOKEN(Let) \
__ENUMERATE_JS_TOKEN(Minus) \
__ENUMERATE_JS_TOKEN(MinusEquals) \
__ENUMERATE_JS_TOKEN(MinusMinus) \
__ENUMERATE_JS_TOKEN(New) \
__ENUMERATE_JS_TOKEN(NullLiteral) \
__ENUMERATE_JS_TOKEN(NumericLiteral) \
__ENUMERATE_JS_TOKEN(ParenClose) \
__ENUMERATE_JS_TOKEN(ParenOpen) \
__ENUMERATE_JS_TOKEN(Percent) \
__ENUMERATE_JS_TOKEN(PercentEquals) \
__ENUMERATE_JS_TOKEN(Period) \
__ENUMERATE_JS_TOKEN(Pipe) \
__ENUMERATE_JS_TOKEN(PipeEquals) \
__ENUMERATE_JS_TOKEN(Plus) \
__ENUMERATE_JS_TOKEN(PlusEquals) \
__ENUMERATE_JS_TOKEN(PlusPlus) \
__ENUMERATE_JS_TOKEN(QuestionMark) \
__ENUMERATE_JS_TOKEN(QuestionMarkPeriod) \
__ENUMERATE_JS_TOKEN(RegexLiteral) \
__ENUMERATE_JS_TOKEN(Return) \
__ENUMERATE_JS_TOKEN(Semicolon) \
__ENUMERATE_JS_TOKEN(ShiftLeft) \
__ENUMERATE_JS_TOKEN(ShiftLeftEquals) \
__ENUMERATE_JS_TOKEN(ShiftRight) \
__ENUMERATE_JS_TOKEN(ShiftRightEquals) \
__ENUMERATE_JS_TOKEN(Slash) \
__ENUMERATE_JS_TOKEN(SlashEquals) \
__ENUMERATE_JS_TOKEN(StringLiteral) \
__ENUMERATE_JS_TOKEN(Switch) \
__ENUMERATE_JS_TOKEN(Throw) \
__ENUMERATE_JS_TOKEN(Tilde) \
__ENUMERATE_JS_TOKEN(Try) \
__ENUMERATE_JS_TOKEN(Typeof) \
__ENUMERATE_JS_TOKEN(UndefinedLiteral) \
__ENUMERATE_JS_TOKEN(UnsignedShiftRight) \
__ENUMERATE_JS_TOKEN(UnsignedShiftRightEquals) \
__ENUMERATE_JS_TOKEN(UnterminatedStringLiteral) \
__ENUMERATE_JS_TOKEN(Var) \
__ENUMERATE_JS_TOKEN(Void) \
__ENUMERATE_JS_TOKEN(While) \
__ENUMERATE_JS_TOKEN(Yield)
enum class TokenType { enum class TokenType {
Ampersand, #define __ENUMERATE_JS_TOKEN(x) x,
AmpersandEquals, ENUMERATE_JS_TOKENS
Asterisk, #undef __ENUMERATE_JS_TOKEN
AsteriskAsteriskEquals,
AsteriskEquals,
Await,
BoolLiteral,
BracketClose,
BracketOpen,
Break,
Caret,
Case,
Catch,
Class,
Colon,
Comma,
Const,
CurlyClose,
CurlyOpen,
Default,
Delete,
Do,
DoubleAmpersand,
DoubleAsterisk,
DoublePipe,
DoubleQuestionMark,
Else,
Eof,
Equals,
EqualsEquals,
EqualsEqualsEquals,
ExclamationMark,
ExclamationMarkEquals,
ExclamationMarkEqualsEquals,
Finally,
For,
Function,
GreaterThan,
GreaterThanEquals,
Identifier,
If,
In,
Instanceof,
Interface,
Invalid,
LessThan,
LessThanEquals,
Let,
Minus,
MinusEquals,
MinusMinus,
New,
NullLiteral,
NumericLiteral,
ParenClose,
ParenOpen,
Percent,
PercentEquals,
Period,
Pipe,
PipeEquals,
Plus,
PlusEquals,
PlusPlus,
QuestionMark,
QuestionMarkPeriod,
RegexLiteral,
Return,
Semicolon,
ShiftLeft,
ShiftLeftEquals,
ShiftRight,
ShiftRightEquals,
Slash,
SlashEquals,
StringLiteral,
Switch,
Throw,
Tilde,
Try,
Typeof,
UndefinedLiteral,
UnsignedShiftRight,
UnsignedShiftRightEquals,
UnterminatedStringLiteral,
Var,
Void,
While,
Yield,
}; };
class Token { class Token {