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:
parent
f221771717
commit
a1c718e387
Notes:
sideshowbarker
2024-07-19 08:03:16 +09:00
Author: https://github.com/awesomekling
Commit: a1c718e387
2 changed files with 99 additions and 265 deletions
|
@ -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>";
|
||||||
|
|
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue