meriyah 4.5.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/CHANGELOG.md +415 -445
  2. package/README.md +52 -34
  3. package/dist/meriyah.cjs +9203 -8807
  4. package/dist/meriyah.min.mjs +1 -0
  5. package/dist/{meriyah.esm.js → meriyah.mjs} +9203 -8807
  6. package/dist/meriyah.umd.js +9203 -8807
  7. package/dist/meriyah.umd.min.js +1 -1
  8. package/dist/src/chars.d.ts +135 -135
  9. package/dist/src/common.d.ts +225 -200
  10. package/dist/src/common.d.ts.map +1 -1
  11. package/dist/src/errors.d.ts +197 -187
  12. package/dist/src/errors.d.ts.map +1 -1
  13. package/dist/src/estree.d.ts +524 -507
  14. package/dist/src/estree.d.ts.map +1 -1
  15. package/dist/src/lexer/charClassifier.d.ts +24 -24
  16. package/dist/src/lexer/charClassifier.d.ts.map +1 -1
  17. package/dist/src/lexer/comments.d.ts +14 -14
  18. package/dist/src/lexer/common.d.ts +25 -26
  19. package/dist/src/lexer/common.d.ts.map +1 -1
  20. package/dist/src/lexer/decodeHTML.d.ts +1 -1
  21. package/dist/src/lexer/decodeHTML.d.ts.map +1 -1
  22. package/dist/src/lexer/identifier.d.ts +8 -8
  23. package/dist/src/lexer/identifier.d.ts.map +1 -1
  24. package/dist/src/lexer/index.d.ts +9 -9
  25. package/dist/src/lexer/index.d.ts.map +1 -1
  26. package/dist/src/lexer/jsx.d.ts +6 -6
  27. package/dist/src/lexer/jsx.d.ts.map +1 -1
  28. package/dist/src/lexer/numeric.d.ts +5 -5
  29. package/dist/src/lexer/numeric.d.ts.map +1 -1
  30. package/dist/src/lexer/regexp.d.ts +3 -3
  31. package/dist/src/lexer/regexp.d.ts.map +1 -1
  32. package/dist/src/lexer/scan.d.ts +6 -6
  33. package/dist/src/lexer/scan.d.ts.map +1 -1
  34. package/dist/src/lexer/string.d.ts +12 -12
  35. package/dist/src/lexer/string.d.ts.map +1 -1
  36. package/dist/src/lexer/template.d.ts +4 -4
  37. package/dist/src/lexer/template.d.ts.map +1 -1
  38. package/dist/src/meriyah.d.ts +7 -7
  39. package/dist/src/meriyah.d.ts.map +1 -1
  40. package/dist/src/parser.d.ts +119 -118
  41. package/dist/src/parser.d.ts.map +1 -1
  42. package/dist/src/token.d.ts +167 -167
  43. package/dist/src/token.d.ts.map +1 -1
  44. package/dist/src/unicode.d.ts +5 -5
  45. package/package.json +44 -48
  46. package/dist/meriyah.amd.js +0 -8854
  47. package/dist/meriyah.amd.min.js +0 -1
  48. package/dist/meriyah.cjs.js +0 -8852
  49. package/dist/meriyah.cjs.min.js +0 -1
  50. package/dist/meriyah.esm.min.js +0 -1
  51. package/dist/meriyah.esm.min.mjs +0 -1
  52. package/dist/meriyah.esm.mjs +0 -8846
  53. package/dist/meriyah.iife.js +0 -8857
  54. package/dist/meriyah.iife.min.js +0 -1
  55. package/dist/meriyah.min.cjs +0 -1
  56. package/dist/meriyah.system.js +0 -8860
  57. package/dist/meriyah.system.min.js +0 -1
  58. package/dist/meriyah.umd.cjs +0 -8858
  59. package/dist/meriyah.umd.es5.js +0 -8927
  60. package/dist/meriyah.umd.es5.min.js +0 -1
  61. package/dist/meriyah.umd.min.cjs +0 -1
  62. package/src/chars.ts +0 -155
  63. package/src/common.ts +0 -841
  64. package/src/errors.ts +0 -419
  65. package/src/estree.ts +0 -817
  66. package/src/lexer/charClassifier.ts +0 -449
  67. package/src/lexer/comments.ts +0 -178
  68. package/src/lexer/common.ts +0 -140
  69. package/src/lexer/decodeHTML.ts +0 -2186
  70. package/src/lexer/identifier.ts +0 -196
  71. package/src/lexer/index.ts +0 -32
  72. package/src/lexer/jsx.ts +0 -126
  73. package/src/lexer/numeric.ts +0 -259
  74. package/src/lexer/regexp.ts +0 -156
  75. package/src/lexer/scan.ts +0 -655
  76. package/src/lexer/string.ts +0 -242
  77. package/src/lexer/template.ts +0 -108
  78. package/src/meriyah.ts +0 -29
  79. package/src/parser.ts +0 -9210
  80. package/src/token.ts +0 -307
  81. package/src/unicode.ts +0 -36
package/src/lexer/scan.ts DELETED
@@ -1,655 +0,0 @@
1
- import { Chars } from '../chars';
2
- import { Token } from '../token';
3
- import { ParserState, Context, Flags } from '../common';
4
- import { report, Errors } from '../errors';
5
- import { unicodeLookup } from '../unicode';
6
- import {
7
- advanceChar,
8
- LexerState,
9
- isExoticECMAScriptWhitespace,
10
- NumberKind,
11
- fromCodePoint,
12
- consumeLineFeed,
13
- scanNewLine,
14
- convertTokenType
15
- } from './common';
16
- import { skipSingleLineComment, skipMultiLineComment, skipSingleHTMLComment, CommentType } from './comments';
17
- import { scanRegularExpression } from './regexp';
18
- import { scanTemplate } from './template';
19
- import { scanNumber } from './numeric';
20
- import { scanString } from './string';
21
- import { scanIdentifier, scanUnicodeIdentifier, scanIdentifierSlowCase, scanPrivateIdentifier } from './identifier';
22
-
23
- /*
24
- * OneChar: 40, 41, 44, 58, 59, 63, 91, 93, 123, 125, 126:
25
- * '(', ')', ',', ':', ';', '?', '[', ']', '{', '}', '~'
26
- * PrivateField: 35: '#',
27
- * Identifier: 36, 65..90, 92, 95, 97..122: '$', 'A'..'Z', '_', '\'', 'a'..'z'
28
- * Period: 46: '.'
29
- * StringLiteral: 34, 39: '"', `'`
30
- * NumericLiteral: 48, 49..57: '0'..'9'
31
- * WhiteSpace: 9, 11, 12, 32: '\t', '\v', '\f', ' '
32
- * LineFeed: 10: '\n'
33
- * CarriageReturn: 13: '\r'
34
- * Template: 96: '`'
35
- */
36
-
37
- export const TokenLookup = [
38
- /* 0 - Null */ Token.Illegal,
39
- /* 1 - Start of Heading */ Token.Illegal,
40
- /* 2 - Start of Text */ Token.Illegal,
41
- /* 3 - End of Text */ Token.Illegal,
42
- /* 4 - End of Transm. */ Token.Illegal,
43
- /* 5 - Enquiry */ Token.Illegal,
44
- /* 6 - Acknowledgment */ Token.Illegal,
45
- /* 7 - Bell */ Token.Illegal,
46
- /* 8 - Backspace */ Token.Illegal,
47
- /* 9 - Horizontal Tab */ Token.WhiteSpace,
48
- /* 10 - Line Feed */ Token.LineFeed,
49
- /* 11 - Vertical Tab */ Token.WhiteSpace,
50
- /* 12 - Form Feed */ Token.WhiteSpace,
51
- /* 13 - Carriage Return */ Token.CarriageReturn,
52
- /* 14 - Shift Out */ Token.Illegal,
53
- /* 15 - Shift In */ Token.Illegal,
54
- /* 16 - Data Line Escape */ Token.Illegal,
55
- /* 17 - Device Control 1 */ Token.Illegal,
56
- /* 18 - Device Control 2 */ Token.Illegal,
57
- /* 19 - Device Control 3 */ Token.Illegal,
58
- /* 20 - Device Control 4 */ Token.Illegal,
59
- /* 21 - Negative Ack. */ Token.Illegal,
60
- /* 22 - Synchronous Idle */ Token.Illegal,
61
- /* 23 - End of Transmit */ Token.Illegal,
62
- /* 24 - Cancel */ Token.Illegal,
63
- /* 25 - End of Medium */ Token.Illegal,
64
- /* 26 - Substitute */ Token.Illegal,
65
- /* 27 - Escape */ Token.Illegal,
66
- /* 28 - File Separator */ Token.Illegal,
67
- /* 29 - Group Separator */ Token.Illegal,
68
- /* 30 - Record Separator */ Token.Illegal,
69
- /* 31 - Unit Separator */ Token.Illegal,
70
- /* 32 - Space */ Token.WhiteSpace,
71
- /* 33 - ! */ Token.Negate,
72
- /* 34 - " */ Token.StringLiteral,
73
- /* 35 - # */ Token.PrivateField,
74
- /* 36 - $ */ Token.Identifier,
75
- /* 37 - % */ Token.Modulo,
76
- /* 38 - & */ Token.BitwiseAnd,
77
- /* 39 - ' */ Token.StringLiteral,
78
- /* 40 - ( */ Token.LeftParen,
79
- /* 41 - ) */ Token.RightParen,
80
- /* 42 - * */ Token.Multiply,
81
- /* 43 - + */ Token.Add,
82
- /* 44 - , */ Token.Comma,
83
- /* 45 - - */ Token.Subtract,
84
- /* 46 - . */ Token.Period,
85
- /* 47 - / */ Token.Divide,
86
- /* 48 - 0 */ Token.NumericLiteral,
87
- /* 49 - 1 */ Token.NumericLiteral,
88
- /* 50 - 2 */ Token.NumericLiteral,
89
- /* 51 - 3 */ Token.NumericLiteral,
90
- /* 52 - 4 */ Token.NumericLiteral,
91
- /* 53 - 5 */ Token.NumericLiteral,
92
- /* 54 - 6 */ Token.NumericLiteral,
93
- /* 55 - 7 */ Token.NumericLiteral,
94
- /* 56 - 8 */ Token.NumericLiteral,
95
- /* 57 - 9 */ Token.NumericLiteral,
96
- /* 58 - : */ Token.Colon,
97
- /* 59 - ; */ Token.Semicolon,
98
- /* 60 - < */ Token.LessThan,
99
- /* 61 - = */ Token.Assign,
100
- /* 62 - > */ Token.GreaterThan,
101
- /* 63 - ? */ Token.QuestionMark,
102
- /* 64 - @ */ Token.Decorator,
103
- /* 65 - A */ Token.Identifier,
104
- /* 66 - B */ Token.Identifier,
105
- /* 67 - C */ Token.Identifier,
106
- /* 68 - D */ Token.Identifier,
107
- /* 69 - E */ Token.Identifier,
108
- /* 70 - F */ Token.Identifier,
109
- /* 71 - G */ Token.Identifier,
110
- /* 72 - H */ Token.Identifier,
111
- /* 73 - I */ Token.Identifier,
112
- /* 74 - J */ Token.Identifier,
113
- /* 75 - K */ Token.Identifier,
114
- /* 76 - L */ Token.Identifier,
115
- /* 77 - M */ Token.Identifier,
116
- /* 78 - N */ Token.Identifier,
117
- /* 79 - O */ Token.Identifier,
118
- /* 80 - P */ Token.Identifier,
119
- /* 81 - Q */ Token.Identifier,
120
- /* 82 - R */ Token.Identifier,
121
- /* 83 - S */ Token.Identifier,
122
- /* 84 - T */ Token.Identifier,
123
- /* 85 - U */ Token.Identifier,
124
- /* 86 - V */ Token.Identifier,
125
- /* 87 - W */ Token.Identifier,
126
- /* 88 - X */ Token.Identifier,
127
- /* 89 - Y */ Token.Identifier,
128
- /* 90 - Z */ Token.Identifier,
129
- /* 91 - [ */ Token.LeftBracket,
130
- /* 92 - \ */ Token.EscapedIdentifier,
131
- /* 93 - ] */ Token.RightBracket,
132
- /* 94 - ^ */ Token.BitwiseXor,
133
- /* 95 - _ */ Token.Identifier,
134
- /* 96 - ` */ Token.Template,
135
- /* 97 - a */ Token.Keyword,
136
- /* 98 - b */ Token.Keyword,
137
- /* 99 - c */ Token.Keyword,
138
- /* 100 - d */ Token.Keyword,
139
- /* 101 - e */ Token.Keyword,
140
- /* 102 - f */ Token.Keyword,
141
- /* 103 - g */ Token.Keyword,
142
- /* 104 - h */ Token.Identifier,
143
- /* 105 - i */ Token.Keyword,
144
- /* 106 - j */ Token.Identifier,
145
- /* 107 - k */ Token.Identifier,
146
- /* 108 - l */ Token.Keyword,
147
- /* 109 - m */ Token.Identifier,
148
- /* 110 - n */ Token.Keyword,
149
- /* 111 - o */ Token.Identifier,
150
- /* 112 - p */ Token.Keyword,
151
- /* 113 - q */ Token.Identifier,
152
- /* 114 - r */ Token.Keyword,
153
- /* 115 - s */ Token.Keyword,
154
- /* 116 - t */ Token.Keyword,
155
- /* 117 - u */ Token.Identifier,
156
- /* 118 - v */ Token.Keyword,
157
- /* 119 - w */ Token.Keyword,
158
- /* 120 - x */ Token.Identifier,
159
- /* 121 - y */ Token.Keyword,
160
- /* 122 - z */ Token.Keyword,
161
- /* 123 - { */ Token.LeftBrace,
162
- /* 124 - | */ Token.BitwiseOr,
163
- /* 125 - } */ Token.RightBrace,
164
- /* 126 - ~ */ Token.Complement,
165
- /* 127 - Delete */ Token.Illegal
166
- ];
167
-
168
- /**
169
- * Scans next token in the stream
170
- *
171
- * @param parser Parser object
172
- * @param context Context masks
173
- */
174
- export function nextToken(parser: ParserState, context: Context): void {
175
- parser.flags = (parser.flags | Flags.NewLine) ^ Flags.NewLine;
176
- parser.startPos = parser.index;
177
- parser.startColumn = parser.column;
178
- parser.startLine = parser.line;
179
- parser.token = scanSingleToken(parser, context, LexerState.None);
180
- if (parser.onToken && parser.token !== Token.EOF) {
181
- const loc = {
182
- start: {
183
- line: parser.linePos,
184
- column: parser.colPos
185
- },
186
- end: {
187
- line: parser.line,
188
- column: parser.column
189
- }
190
- };
191
- parser.onToken(convertTokenType(parser.token), parser.tokenPos, parser.index, loc);
192
- }
193
- }
194
-
195
- export function scanSingleToken(parser: ParserState, context: Context, state: LexerState): Token {
196
- const isStartOfLine = parser.index === 0;
197
-
198
- const source = parser.source;
199
-
200
- // These three are only for HTMLClose comment
201
- let startPos = parser.index;
202
- let startLine = parser.line;
203
- let startColumn = parser.column;
204
-
205
- while (parser.index < parser.end) {
206
- parser.tokenPos = parser.index;
207
- parser.colPos = parser.column;
208
- parser.linePos = parser.line;
209
-
210
- let char = parser.currentChar;
211
-
212
- if (char <= 0x7e) {
213
- const token = TokenLookup[char];
214
-
215
- switch (token) {
216
- case Token.LeftParen:
217
- case Token.RightParen:
218
- case Token.LeftBrace:
219
- case Token.RightBrace:
220
- case Token.LeftBracket:
221
- case Token.RightBracket:
222
- case Token.Colon:
223
- case Token.Semicolon:
224
- case Token.Comma:
225
- case Token.Complement:
226
- case Token.Decorator:
227
- case Token.Illegal:
228
- advanceChar(parser);
229
- return token;
230
-
231
- // Look for an identifier
232
- case Token.Identifier:
233
- return scanIdentifier(parser, context, /* isValidAsKeyword */ 0);
234
-
235
- // Look for identifier or keyword
236
- case Token.Keyword:
237
- return scanIdentifier(parser, context, /* isValidAsKeyword */ 1);
238
-
239
- // Look for a decimal number.
240
- case Token.NumericLiteral:
241
- return scanNumber(parser, context, NumberKind.Decimal | NumberKind.ValidBigIntKind);
242
-
243
- // Look for a string literal
244
- case Token.StringLiteral:
245
- return scanString(parser, context, char);
246
-
247
- // Look for a template string
248
- case Token.Template:
249
- return scanTemplate(parser, context);
250
-
251
- // Look for a escaped identifier
252
- case Token.EscapedIdentifier:
253
- return scanUnicodeIdentifier(parser, context);
254
-
255
- // `#` (private name)
256
- case Token.PrivateField:
257
- return scanPrivateIdentifier(parser);
258
-
259
- case Token.WhiteSpace:
260
- advanceChar(parser);
261
- break;
262
-
263
- case Token.CarriageReturn:
264
- state |= LexerState.NewLine | LexerState.LastIsCR;
265
- scanNewLine(parser);
266
- break;
267
-
268
- case Token.LineFeed:
269
- consumeLineFeed(parser, state);
270
- state = (state & ~LexerState.LastIsCR) | LexerState.NewLine;
271
- break;
272
-
273
- // `<`, `<=`, `<<`, `<<=`, `</`, `<!--`
274
- case Token.LessThan:
275
- let ch = advanceChar(parser);
276
- if (parser.index < parser.end) {
277
- if (ch === Chars.LessThan) {
278
- if (parser.index < parser.end && advanceChar(parser) === Chars.EqualSign) {
279
- advanceChar(parser);
280
- return Token.ShiftLeftAssign;
281
- }
282
- return Token.ShiftLeft;
283
- } else if (ch === Chars.EqualSign) {
284
- advanceChar(parser);
285
- return Token.LessThanOrEqual;
286
- }
287
- if (ch === Chars.Exclamation) {
288
- // Treat HTML begin-comment as comment-till-end-of-line.
289
- const index = parser.index + 1;
290
- if (
291
- index + 1 < parser.end &&
292
- source.charCodeAt(index) === Chars.Hyphen &&
293
- source.charCodeAt(index + 1) == Chars.Hyphen
294
- ) {
295
- parser.column += 3;
296
- parser.currentChar = source.charCodeAt((parser.index += 3));
297
- state = skipSingleHTMLComment(
298
- parser,
299
- source,
300
- state,
301
- context,
302
- CommentType.HTMLOpen,
303
- parser.tokenPos,
304
- parser.linePos,
305
- parser.colPos
306
- );
307
- startPos = parser.tokenPos;
308
- startLine = parser.linePos;
309
- startColumn = parser.colPos;
310
- continue;
311
- }
312
- return Token.LessThan;
313
- }
314
- if (ch === Chars.Slash) {
315
- if ((context & Context.OptionsJSX) === 0) return Token.LessThan;
316
- const index = parser.index + 1;
317
-
318
- // Check that it's not a comment start.
319
- if (index < parser.end) {
320
- ch = source.charCodeAt(index);
321
- if (ch === Chars.Asterisk || ch === Chars.Slash) break;
322
- }
323
- advanceChar(parser);
324
- return Token.JSXClose;
325
- }
326
- }
327
- return Token.LessThan;
328
-
329
- // `=`, `==`, `===`, `=>`
330
- case Token.Assign: {
331
- advanceChar(parser);
332
-
333
- const ch = parser.currentChar;
334
-
335
- if (ch === Chars.EqualSign) {
336
- if (advanceChar(parser) === Chars.EqualSign) {
337
- advanceChar(parser);
338
- return Token.StrictEqual;
339
- }
340
- return Token.LooseEqual;
341
- }
342
- if (ch === Chars.GreaterThan) {
343
- advanceChar(parser);
344
- return Token.Arrow;
345
- }
346
-
347
- return Token.Assign;
348
- }
349
-
350
- // `!`, `!=`, `!==`
351
- case Token.Negate:
352
- if (advanceChar(parser) !== Chars.EqualSign) {
353
- return Token.Negate;
354
- }
355
- if (advanceChar(parser) !== Chars.EqualSign) {
356
- return Token.LooseNotEqual;
357
- }
358
- advanceChar(parser);
359
- return Token.StrictNotEqual;
360
-
361
- // `%`, `%=`
362
- case Token.Modulo:
363
- if (advanceChar(parser) !== Chars.EqualSign) return Token.Modulo;
364
- advanceChar(parser);
365
- return Token.ModuloAssign;
366
-
367
- // `*`, `**`, `*=`, `**=`
368
- case Token.Multiply: {
369
- advanceChar(parser);
370
-
371
- if (parser.index >= parser.end) return Token.Multiply;
372
-
373
- const ch = parser.currentChar;
374
-
375
- if (ch === Chars.EqualSign) {
376
- advanceChar(parser);
377
- return Token.MultiplyAssign;
378
- }
379
-
380
- if (ch !== Chars.Asterisk) return Token.Multiply;
381
-
382
- if (advanceChar(parser) !== Chars.EqualSign) return Token.Exponentiate;
383
-
384
- advanceChar(parser);
385
-
386
- return Token.ExponentiateAssign;
387
- }
388
-
389
- // `^`, `^=`
390
- case Token.BitwiseXor:
391
- if (advanceChar(parser) !== Chars.EqualSign) return Token.BitwiseXor;
392
- advanceChar(parser);
393
- return Token.BitwiseXorAssign;
394
-
395
- // `+`, `++`, `+=`
396
- case Token.Add: {
397
- advanceChar(parser);
398
-
399
- const ch = parser.currentChar;
400
-
401
- if (ch === Chars.Plus) {
402
- advanceChar(parser);
403
- return Token.Increment;
404
- }
405
-
406
- if (ch === Chars.EqualSign) {
407
- advanceChar(parser);
408
- return Token.AddAssign;
409
- }
410
-
411
- return Token.Add;
412
- }
413
-
414
- // `-`, `--`, `-=`, `-->`
415
- case Token.Subtract: {
416
- advanceChar(parser);
417
-
418
- const ch = parser.currentChar;
419
-
420
- if (ch === Chars.Hyphen) {
421
- advanceChar(parser);
422
- if ((state & LexerState.NewLine || isStartOfLine) && parser.currentChar === Chars.GreaterThan) {
423
- if ((context & Context.OptionsWebCompat) === 0) report(parser, Errors.HtmlCommentInWebCompat);
424
- advanceChar(parser);
425
- state = skipSingleHTMLComment(
426
- parser,
427
- source,
428
- state,
429
- context,
430
- CommentType.HTMLClose,
431
- startPos,
432
- startLine,
433
- startColumn
434
- );
435
- startPos = parser.tokenPos;
436
- startLine = parser.linePos;
437
- startColumn = parser.colPos;
438
- continue;
439
- }
440
-
441
- return Token.Decrement;
442
- }
443
-
444
- if (ch === Chars.EqualSign) {
445
- advanceChar(parser);
446
- return Token.SubtractAssign;
447
- }
448
-
449
- return Token.Subtract;
450
- }
451
-
452
- // `/`, `/=`, `/>`, '/*..*/'
453
- case Token.Divide: {
454
- advanceChar(parser);
455
- if (parser.index < parser.end) {
456
- const ch = parser.currentChar;
457
- if (ch === Chars.Slash) {
458
- advanceChar(parser);
459
- state = skipSingleLineComment(
460
- parser,
461
- source,
462
- state,
463
- CommentType.Single,
464
- parser.tokenPos,
465
- parser.linePos,
466
- parser.colPos
467
- );
468
- startPos = parser.tokenPos;
469
- startLine = parser.linePos;
470
- startColumn = parser.colPos;
471
- continue;
472
- }
473
- if (ch === Chars.Asterisk) {
474
- advanceChar(parser);
475
- state = skipMultiLineComment(parser, source, state) as LexerState;
476
- startPos = parser.tokenPos;
477
- startLine = parser.linePos;
478
- startColumn = parser.colPos;
479
- continue;
480
- }
481
- if (context & Context.AllowRegExp) {
482
- return scanRegularExpression(parser, context);
483
- }
484
- if (ch === Chars.EqualSign) {
485
- advanceChar(parser);
486
- return Token.DivideAssign;
487
- }
488
- }
489
-
490
- return Token.Divide;
491
- }
492
-
493
- // `.`, `...`, `.123` (numeric literal)
494
- case Token.Period:
495
- const next = advanceChar(parser);
496
- if (next >= Chars.Zero && next <= Chars.Nine)
497
- return scanNumber(parser, context, NumberKind.Float | NumberKind.Decimal);
498
- if (next === Chars.Period) {
499
- const index = parser.index + 1;
500
- if (index < parser.end && source.charCodeAt(index) === Chars.Period) {
501
- parser.column += 2;
502
- parser.currentChar = source.charCodeAt((parser.index += 2));
503
- return Token.Ellipsis;
504
- }
505
- }
506
- return Token.Period;
507
-
508
- // `|`, `||`, `|=`, `||=`
509
- case Token.BitwiseOr: {
510
- advanceChar(parser);
511
-
512
- const ch = parser.currentChar;
513
-
514
- if (ch === Chars.VerticalBar) {
515
- advanceChar(parser);
516
-
517
- if (parser.currentChar === Chars.EqualSign) {
518
- advanceChar(parser);
519
- return Token.LogicalOrAssign;
520
- }
521
-
522
- return Token.LogicalOr;
523
- }
524
- if (ch === Chars.EqualSign) {
525
- advanceChar(parser);
526
- return Token.BitwiseOrAssign;
527
- }
528
-
529
- return Token.BitwiseOr;
530
- }
531
-
532
- // `>`, `>=`, `>>`, `>>>`, `>>=`, `>>>=`
533
- case Token.GreaterThan: {
534
- advanceChar(parser);
535
-
536
- const ch = parser.currentChar;
537
-
538
- if (ch === Chars.EqualSign) {
539
- advanceChar(parser);
540
- return Token.GreaterThanOrEqual;
541
- }
542
-
543
- if (ch !== Chars.GreaterThan) return Token.GreaterThan;
544
-
545
- advanceChar(parser);
546
-
547
- if (parser.index < parser.end) {
548
- const ch = parser.currentChar;
549
-
550
- if (ch === Chars.GreaterThan) {
551
- if (advanceChar(parser) === Chars.EqualSign) {
552
- advanceChar(parser);
553
- return Token.LogicalShiftRightAssign;
554
- }
555
- return Token.LogicalShiftRight;
556
- }
557
- if (ch === Chars.EqualSign) {
558
- advanceChar(parser);
559
- return Token.ShiftRightAssign;
560
- }
561
- }
562
-
563
- return Token.ShiftRight;
564
- }
565
-
566
- // `&`, `&&`, `&=`, `&&=`
567
- case Token.BitwiseAnd: {
568
- advanceChar(parser);
569
-
570
- const ch = parser.currentChar;
571
-
572
- if (ch === Chars.Ampersand) {
573
- advanceChar(parser);
574
-
575
- if (parser.currentChar === Chars.EqualSign) {
576
- advanceChar(parser);
577
- return Token.LogicalAndAssign;
578
- }
579
-
580
- return Token.LogicalAnd;
581
- }
582
-
583
- if (ch === Chars.EqualSign) {
584
- advanceChar(parser);
585
- return Token.BitwiseAndAssign;
586
- }
587
-
588
- return Token.BitwiseAnd;
589
- }
590
-
591
- // `?`, `??`, `?.`, `??=`
592
- case Token.QuestionMark: {
593
- let ch = advanceChar(parser);
594
- if (ch === Chars.QuestionMark) {
595
- advanceChar(parser);
596
-
597
- if (parser.currentChar === Chars.EqualSign) {
598
- advanceChar(parser);
599
- return Token.CoalesceAssign;
600
- }
601
-
602
- return Token.Coalesce;
603
- }
604
-
605
- if (ch === Chars.Period) {
606
- const index = parser.index + 1;
607
- // Check that it's not followed by any numbers
608
- if (index < parser.end) {
609
- ch = source.charCodeAt(index);
610
- if (!(ch >= Chars.Zero && ch <= Chars.Nine)) {
611
- advanceChar(parser);
612
- return Token.QuestionMarkPeriod;
613
- }
614
- }
615
- }
616
-
617
- return Token.QuestionMark;
618
- }
619
-
620
- default:
621
- // unreachable
622
- }
623
- } else {
624
- if ((char ^ Chars.LineSeparator) <= 1) {
625
- state = (state & ~LexerState.LastIsCR) | LexerState.NewLine;
626
- scanNewLine(parser);
627
- continue;
628
- }
629
-
630
- if ((char & 0xfc00) === 0xd800 || ((unicodeLookup[(char >>> 5) + 34816] >>> char) & 31 & 1) !== 0) {
631
- if ((char & 0xfc00) === 0xdc00) {
632
- char = ((char & 0x3ff) << 10) | (char & 0x3ff) | 0x10000;
633
- if (((unicodeLookup[(char >>> 5) + 0] >>> char) & 31 & 1) === 0) {
634
- report(parser, Errors.IllegalCharacter, fromCodePoint(char));
635
- }
636
- parser.index++;
637
- parser.currentChar = char;
638
- }
639
-
640
- parser.column++;
641
- parser.tokenValue = '';
642
- return scanIdentifierSlowCase(parser, context, /* hasEscape */ 0, /* canBeKeyword */ 0);
643
- }
644
-
645
- if (isExoticECMAScriptWhitespace(char)) {
646
- advanceChar(parser);
647
- continue;
648
- }
649
-
650
- // Invalid ASCII code point/unit
651
- report(parser, Errors.IllegalCharacter, fromCodePoint(char));
652
- }
653
- }
654
- return Token.EOF;
655
- }