aboutsummaryrefslogtreecommitdiff
path: root/node_modules/meriyah/src/token.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/meriyah/src/token.ts')
-rw-r--r--node_modules/meriyah/src/token.ts307
1 files changed, 307 insertions, 0 deletions
diff --git a/node_modules/meriyah/src/token.ts b/node_modules/meriyah/src/token.ts
new file mode 100644
index 0000000..0527d81
--- /dev/null
+++ b/node_modules/meriyah/src/token.ts
@@ -0,0 +1,307 @@
+export const enum Token {
+ Type = 0xFF,
+
+ /* Precedence for binary operators (always positive) */
+ PrecStart = 8,
+ Precedence = 15 << PrecStart, // 8-11
+
+ /* Attribute names */
+ Keyword = 1 << 12,
+ Contextual = 1 << 13 | Keyword,
+ Reserved = 1 << 14 | Keyword,
+ FutureReserved = 1 << 15 | Keyword,
+
+ IsExpressionStart = 1 << 16,
+ IsIdentifier = 1 << 17 | Contextual,
+ IsInOrOf = 1 << 18, // 'in' or 'of'
+ IsLogical = 1 << 19,
+ IsAutoSemicolon = 1 << 20,
+ IsPatternStart = 1 << 21, // Start of pattern, '[' or '{'
+ IsAssignOp = 1 << 22,
+ IsBinaryOp = 1 << 23 | IsExpressionStart,
+ IsUnaryOp = 1 << 24 | IsExpressionStart,
+ IsUpdateOp = 1 << 25 | IsExpressionStart,
+ IsMemberOrCallExpression = 1 << 26,
+ IsStringOrNumber = 1 << 27,
+ IsCoalesc = 1 << 28,
+ IsEvalOrArguments = 1 << 29 | IsExpressionStart | IsIdentifier,
+ IsClassField = 1 << 30,
+
+ // Note: 1 << 31... turns to negative
+
+ /* Node types */
+ EOF = 0 | IsAutoSemicolon,
+
+ /* Constants/Bindings */
+ Identifier = 1 | IsExpressionStart | IsIdentifier,
+ NumericLiteral = 2 | IsExpressionStart | IsStringOrNumber,
+ StringLiteral = 3 | IsExpressionStart | IsStringOrNumber,
+ RegularExpression = 4 | IsExpressionStart,
+ FalseKeyword = 5 | Reserved | IsExpressionStart,
+ TrueKeyword = 6 | Reserved | IsExpressionStart,
+ NullKeyword = 7 | Reserved | IsExpressionStart,
+
+ /* Template nodes */
+ TemplateContinuation = 8 | IsExpressionStart | IsMemberOrCallExpression,
+ TemplateSpan = 9 | IsExpressionStart | IsMemberOrCallExpression,
+
+ /* Punctuators */
+ Arrow = 10, // =>
+ LeftParen = 11 | IsExpressionStart | IsMemberOrCallExpression, // (
+ LeftBrace = 12 | IsExpressionStart | IsPatternStart, // {
+ Period = 13 | IsMemberOrCallExpression, // .
+ Ellipsis = 14, // ...
+ RightBrace = 15 | IsAutoSemicolon | IsClassField, // }
+ RightParen = 16, // )
+ Semicolon = 17 | IsAutoSemicolon | IsClassField, // ;
+ Comma = 18, // ,
+ LeftBracket = 19 | IsExpressionStart | IsPatternStart | IsMemberOrCallExpression, // [
+ RightBracket = 20, // ]
+ Colon = 21, // :
+ QuestionMark = 22, // ?
+ SingleQuote = 23, // '
+ DoubleQuote = 24, // "
+ JSXClose = 25, // </
+ JSXAutoClose = 26, // />
+
+ /* Update operators */
+ Increment = 27 | IsUpdateOp, // ++
+ Decrement = 28 | IsUpdateOp, // --
+
+ /* Assign operators */
+ Assign = 29 | IsAssignOp | IsClassField, // =
+ ShiftLeftAssign = 30 | IsAssignOp, // <<=
+ ShiftRightAssign = 31 | IsAssignOp, // >>=
+ LogicalShiftRightAssign = 32 | IsAssignOp, // >>>=
+ ExponentiateAssign = 33 | IsAssignOp, // **=
+ AddAssign = 34 | IsAssignOp, // +=
+ SubtractAssign = 35 | IsAssignOp, // -=
+ MultiplyAssign = 36 | IsAssignOp, // *=
+ DivideAssign = 37 | IsAssignOp | IsExpressionStart, // /=
+ ModuloAssign = 38 | IsAssignOp, // %=
+ BitwiseXorAssign = 39 | IsAssignOp, // ^=
+ BitwiseOrAssign = 40 | IsAssignOp, // |=
+ BitwiseAndAssign = 41 | IsAssignOp, // &=
+ LogicalOrAssign = 42 | IsAssignOp, // ||=
+ LogicalAndAssign = 43 | IsAssignOp, // &&=
+ CoalesceAssign = 44 | IsAssignOp, // ??=
+
+ /* Unary/binary operators */
+ TypeofKeyword = 45 | IsUnaryOp | Reserved,
+ DeleteKeyword = 46 | IsUnaryOp | Reserved,
+ VoidKeyword = 47 | IsUnaryOp | Reserved,
+ Negate = 48 | IsUnaryOp, // !
+ Complement = 49 | IsUnaryOp, // ~
+ Add = 50 | IsUnaryOp | IsBinaryOp | 10 << PrecStart, // +
+ Subtract = 51 | IsUnaryOp | IsBinaryOp | 10 << PrecStart, // -
+ InKeyword = 52 | IsBinaryOp | 8 << PrecStart | Reserved | IsInOrOf,
+ InstanceofKeyword = 53 | IsBinaryOp | 8 << PrecStart | Reserved,
+ Multiply = 54 | IsBinaryOp | 11 << PrecStart, // *
+ Modulo = 55 | IsBinaryOp | 11 << PrecStart, // %
+ Divide = 56 | IsBinaryOp | IsExpressionStart | 11 << PrecStart, // /
+ Exponentiate = 57 | IsBinaryOp | 12 << PrecStart, // **
+ LogicalAnd = 58 | IsBinaryOp | IsLogical | 3 << PrecStart, // &&
+ LogicalOr = 59 | IsBinaryOp | IsLogical | 2 << PrecStart, // ||
+ StrictEqual = 60 | IsBinaryOp | 7 << PrecStart, // ===
+ StrictNotEqual = 61 | IsBinaryOp | 7 << PrecStart, // !==
+ LooseEqual = 62 | IsBinaryOp | 7 << PrecStart, // ==
+ LooseNotEqual = 63 | IsBinaryOp | 7 << PrecStart, // !=
+ LessThanOrEqual = 64 | IsBinaryOp | 7 << PrecStart, // <=
+ GreaterThanOrEqual = 65 | IsBinaryOp | 7 << PrecStart, // >=
+ LessThan = 66 | IsBinaryOp | IsExpressionStart | 8 << PrecStart, // <
+ GreaterThan = 67 | IsBinaryOp | 8 << PrecStart, // >
+ ShiftLeft = 68 | IsBinaryOp | 9 << PrecStart, // <<
+ ShiftRight = 69 | IsBinaryOp | 9 << PrecStart, // >>
+ LogicalShiftRight = 70 | IsBinaryOp | 9 << PrecStart, // >>>
+ BitwiseAnd = 71 | IsBinaryOp | 6 << PrecStart, // &
+ BitwiseOr = 72 | IsBinaryOp | 4 << PrecStart, // |
+ BitwiseXor = 73 | IsBinaryOp | 5 << PrecStart, // ^
+
+ /* Variable declaration kinds */
+ VarKeyword = 74 | IsExpressionStart | Reserved,
+ LetKeyword = 75 | IsExpressionStart | FutureReserved | IsIdentifier,
+ ConstKeyword = 76 | IsExpressionStart | Reserved,
+
+ /* Other reserved words */
+ BreakKeyword = 77 | Reserved,
+ CaseKeyword = 78 | Reserved,
+ CatchKeyword = 79 | Reserved,
+ ClassKeyword = 80 | IsExpressionStart | Reserved,
+ ContinueKeyword = 81 | Reserved,
+ DebuggerKeyword = 82 | Reserved,
+ DefaultKeyword = 83 | Reserved,
+ DoKeyword = 84 | Reserved,
+ ElseKeyword = 85 | Reserved,
+ ExportKeyword = 86 | Reserved,
+ ExtendsKeyword = 87 | Reserved,
+ FinallyKeyword = 88 | Reserved,
+ ForKeyword = 89 | Reserved,
+ FunctionKeyword = 90 | IsExpressionStart | Reserved,
+ IfKeyword = 91 | Reserved,
+ ImportKeyword = 92 | IsExpressionStart | Reserved,
+ NewKeyword = 93 | IsExpressionStart | Reserved,
+ ReturnKeyword = 94 | Reserved,
+ SuperKeyword = 95 | IsExpressionStart | Reserved,
+ SwitchKeyword = 96 | IsExpressionStart | Reserved,
+ ThisKeyword = 97 | IsExpressionStart | Reserved,
+ ThrowKeyword = 98 | IsExpressionStart | Reserved,
+ TryKeyword = 99 | Reserved,
+ WhileKeyword = 100 | Reserved,
+ WithKeyword = 101 | Reserved,
+
+ /* Strict mode reserved words */
+ ImplementsKeyword = 102 | FutureReserved,
+ InterfaceKeyword = 103 | FutureReserved,
+ PackageKeyword = 104 | FutureReserved,
+ PrivateKeyword = 105 | FutureReserved,
+ ProtectedKeyword = 106 | FutureReserved,
+ PublicKeyword = 107 | FutureReserved,
+ StaticKeyword = 108 | FutureReserved,
+ YieldKeyword = 109 | FutureReserved | IsExpressionStart | IsIdentifier,
+
+ /* Contextual keywords */
+ AsKeyword = 110 | Contextual | IsExpressionStart,
+ AsyncKeyword = 111 | Contextual | IsIdentifier | IsExpressionStart,
+ AwaitKeyword = 112 | Contextual | IsExpressionStart | IsIdentifier,
+ ConstructorKeyword = 113 | Contextual,
+ GetKeyword = 114 | Contextual,
+ SetKeyword = 115 | Contextual,
+ FromKeyword = 116 | Contextual,
+ OfKeyword = 117 | Contextual | IsInOrOf,
+ EnumKeyword = 118 | Reserved | IsExpressionStart,
+
+ Eval = 119 | IsEvalOrArguments,
+ Arguments = 120 | IsEvalOrArguments,
+
+ EscapedReserved = 121,
+ EscapedFutureReserved = 122,
+ AnyIdentifier = 123 | IsIdentifier,
+
+ // Stage #3 proposals
+ PrivateIdentifier = 124,
+ BigIntLiteral = 125 | IsExpressionStart | IsStringOrNumber,
+ Coalesce = 126 | IsBinaryOp | IsCoalesc | 1 << PrecStart, // ??
+ QuestionMarkPeriod = 127 | IsMemberOrCallExpression, // ?.
+
+ // Others
+ WhiteSpace = 128,
+ Illegal = 129,
+ CarriageReturn = 130,
+ PrivateField = 131,
+ Template = 132,
+ Decorator = 133,
+ Target = 134 | IsIdentifier,
+ Meta = 135 | IsIdentifier,
+ LineFeed = 136,
+ EscapedIdentifier = 137,
+
+ // JSX
+ JSXText = 138,
+}
+
+export const KeywordDescTable = [
+ 'end of source',
+
+ /* Constants/Bindings */
+ 'identifier', 'number', 'string', 'regular expression',
+ 'false', 'true', 'null',
+
+ /* Template nodes */
+ 'template continuation', 'template tail',
+
+ /* Punctuators */
+ '=>', '(', '{', '.', '...', '}', ')', ';', ',', '[', ']', ':', '?', '\'', '"', '</', '/>',
+
+ /* Update operators */
+ '++', '--',
+
+ /* Assign operators */
+ '=', '<<=', '>>=', '>>>=', '**=', '+=', '-=', '*=', '/=', '%=', '^=', '|=',
+ '&=', '||=', '&&=', '??=',
+
+ /* Unary/binary operators */
+ 'typeof', 'delete', 'void', '!', '~', '+', '-', 'in', 'instanceof', '*', '%', '/', '**', '&&',
+ '||', '===', '!==', '==', '!=', '<=', '>=', '<', '>', '<<', '>>', '>>>', '&', '|', '^',
+
+ /* Variable declaration kinds */
+ 'var', 'let', 'const',
+
+ /* Other reserved words */
+ 'break', 'case', 'catch', 'class', 'continue', 'debugger', 'default', 'do', 'else', 'export',
+ 'extends', 'finally', 'for', 'function', 'if', 'import', 'new', 'return', 'super', 'switch',
+ 'this', 'throw', 'try', 'while', 'with',
+
+ /* Strict mode reserved words */
+ 'implements', 'interface', 'package', 'private', 'protected', 'public', 'static', 'yield',
+
+ /* Contextual keywords */
+ 'as', 'async', 'await', 'constructor', 'get', 'set', 'from', 'of',
+
+ /* Others */
+ 'enum', 'eval', 'arguments', 'escaped keyword', 'escaped future reserved keyword', 'reserved if strict', '#',
+
+ 'BigIntLiteral', '??', '?.', 'WhiteSpace', 'Illegal', 'LineTerminator', 'PrivateField',
+
+ 'Template', '@', 'target', 'meta', 'LineFeed', 'Escaped', 'JSXText'
+];
+
+// Normal object is much faster than Object.create(null), even with typeof check to avoid Object.prototype interference
+export const descKeywordTable: { [key: string]: Token } = Object.create(null, {
+ this: { value: Token.ThisKeyword },
+ function: { value: Token.FunctionKeyword },
+ if: { value: Token.IfKeyword },
+ return: { value: Token.ReturnKeyword },
+ var: { value: Token.VarKeyword },
+ else: { value: Token.ElseKeyword },
+ for: { value: Token.ForKeyword },
+ new: { value: Token.NewKeyword },
+ in: { value: Token.InKeyword },
+ typeof: { value: Token.TypeofKeyword },
+ while: { value: Token.WhileKeyword },
+ case: { value: Token.CaseKeyword },
+ break: { value: Token.BreakKeyword },
+ try: { value: Token.TryKeyword },
+ catch: { value: Token.CatchKeyword },
+ delete: { value: Token.DeleteKeyword },
+ throw: { value: Token.ThrowKeyword },
+ switch: { value: Token.SwitchKeyword },
+ continue: { value: Token.ContinueKeyword },
+ default: { value: Token.DefaultKeyword },
+ instanceof: { value: Token.InstanceofKeyword },
+ do: { value: Token.DoKeyword },
+ void: { value: Token.VoidKeyword },
+ finally: { value: Token.FinallyKeyword },
+ async: { value: Token.AsyncKeyword },
+ await: { value: Token.AwaitKeyword },
+ class: { value: Token.ClassKeyword },
+ const: { value: Token.ConstKeyword },
+ constructor: { value: Token.ConstructorKeyword },
+ debugger: { value: Token.DebuggerKeyword },
+ export: { value: Token.ExportKeyword },
+ extends: { value: Token.ExtendsKeyword },
+ false: { value: Token.FalseKeyword },
+ from: { value: Token.FromKeyword },
+ get: { value: Token.GetKeyword },
+ implements: { value: Token.ImplementsKeyword },
+ import: { value: Token.ImportKeyword },
+ interface: { value: Token.InterfaceKeyword },
+ let: { value: Token.LetKeyword },
+ null: { value: Token.NullKeyword },
+ of: { value: Token.OfKeyword },
+ package: { value: Token.PackageKeyword },
+ private: { value: Token.PrivateKeyword },
+ protected: { value: Token.ProtectedKeyword },
+ public: { value: Token.PublicKeyword },
+ set: { value: Token.SetKeyword },
+ static: { value: Token.StaticKeyword },
+ super: { value: Token.SuperKeyword },
+ true: { value: Token.TrueKeyword },
+ with: { value: Token.WithKeyword },
+ yield: { value: Token.YieldKeyword },
+ enum: { value: Token.EnumKeyword },
+ eval: { value: Token.Eval },
+ as: { value: Token.AsKeyword },
+ arguments: { value: Token.Arguments },
+ target: { value: Token.Target },
+ meta: { value: Token.Meta },
+});