mirror of
https://github.com/RGBCube/serenity
synced 2025-07-10 00:17:36 +00:00
LibJS: Use some macro magic to avoid duplicating all the token types
This commit is contained in:
parent
f221771717
commit
a1c718e387
2 changed files with 99 additions and 265 deletions
|
@ -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 "<Unknown>";
|
||||
|
|
|
@ -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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue