diff --git a/Libraries/LibJS/Token.cpp b/Libraries/LibJS/Token.cpp index 3793839668..4e6ee1bb8b 100644 --- a/Libraries/LibJS/Token.cpp +++ b/Libraries/LibJS/Token.cpp @@ -33,182 +33,11 @@ namespace JS { const char* Token::name(TokenType type) { switch (type) { - case TokenType::Ampersand: - return "Ampersand"; - case TokenType::AmpersandEquals: - return "AmpersandEquals"; - case TokenType::Asterisk: - 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"; +#define __ENUMERATE_JS_TOKEN(x) \ + case TokenType::x: \ + return #x; + ENUMERATE_JS_TOKENS +#undef __ENUMERATE_JS_TOKEN default: ASSERT_NOT_REACHED(); return ""; diff --git a/Libraries/LibJS/Token.h b/Libraries/LibJS/Token.h index 472d835974..5ff035c41d 100644 --- a/Libraries/LibJS/Token.h +++ b/Libraries/LibJS/Token.h @@ -31,96 +31,101 @@ 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 { - Ampersand, - AmpersandEquals, - Asterisk, - 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, +#define __ENUMERATE_JS_TOKEN(x) x, + ENUMERATE_JS_TOKENS +#undef __ENUMERATE_JS_TOKEN }; class Token {