@ibyar/expressions 0.5.4 → 0.5.6
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.
- package/LICENSE +1 -1
- package/README.md +1 -0
- package/api/abstract.d.ts +3 -3
- package/api/abstract.js +2 -2
- package/api/abstract.js.map +1 -1
- package/api/class/class.d.ts +18 -12
- package/api/class/class.js +122 -81
- package/api/class/class.js.map +1 -1
- package/api/computing/debugger.d.ts +15 -0
- package/api/computing/debugger.js +35 -0
- package/api/computing/debugger.js.map +1 -0
- package/api/computing/rest.d.ts +4 -4
- package/api/computing/rest.js.map +1 -1
- package/api/definition/array.d.ts +7 -6
- package/api/definition/array.js +20 -14
- package/api/definition/array.js.map +1 -1
- package/api/definition/function.d.ts +35 -46
- package/api/definition/function.js +281 -299
- package/api/definition/function.js.map +1 -1
- package/api/definition/object.d.ts +9 -6
- package/api/definition/object.js +34 -4
- package/api/definition/object.js.map +1 -1
- package/api/definition/statement.js +5 -1
- package/api/definition/statement.js.map +1 -1
- package/api/definition/values.d.ts +31 -47
- package/api/definition/values.js +59 -145
- package/api/definition/values.js.map +1 -1
- package/api/deserialize/deserialize.d.ts +2 -1
- package/api/deserialize/deserialize.js +4 -1
- package/api/deserialize/deserialize.js.map +1 -1
- package/api/deserialize/type-store.d.ts +2 -2
- package/api/deserialize/type-store.js.map +1 -1
- package/api/expression.d.ts +5 -7
- package/api/expression.js.map +1 -1
- package/api/index.d.ts +2 -0
- package/api/index.js +2 -0
- package/api/index.js.map +1 -1
- package/api/module/common.d.ts +29 -0
- package/api/module/common.js +71 -0
- package/api/module/common.js.map +1 -0
- package/api/module/export.d.ts +15 -9
- package/api/module/export.js +57 -15
- package/api/module/export.js.map +1 -1
- package/api/module/import.d.ts +3 -8
- package/api/module/import.js +9 -19
- package/api/module/import.js.map +1 -1
- package/api/{module/app/program.d.ts → program.d.ts} +4 -4
- package/api/{module/app/program.js → program.js} +3 -3
- package/api/program.js.map +1 -0
- package/api/statement/control/block.d.ts +1 -2
- package/api/statement/control/block.js +20 -21
- package/api/statement/control/block.js.map +1 -1
- package/api/statement/control/switch.js +8 -3
- package/api/statement/control/switch.js.map +1 -1
- package/api/statement/control/terminate.d.ts +36 -11
- package/api/statement/control/terminate.js +79 -18
- package/api/statement/control/terminate.js.map +1 -1
- package/api/statement/declarations/declares.d.ts +7 -7
- package/api/statement/declarations/declares.js +1 -1
- package/api/statement/declarations/declares.js.map +1 -1
- package/api/statement/iterations/for.js +22 -16
- package/api/statement/iterations/for.js.map +1 -1
- package/api/statement/iterations/while.js +15 -11
- package/api/statement/iterations/while.js.map +1 -1
- package/api/utils.d.ts +2 -0
- package/api/utils.js +3 -1
- package/api/utils.js.map +1 -1
- package/package.json +4 -4
- package/scope/proxy.d.ts +0 -2
- package/scope/proxy.js +4 -24
- package/scope/proxy.js.map +1 -1
- package/scope/stack.d.ts +2 -2
- package/scope/stack.js.map +1 -1
- package/v8/enums.d.ts +204 -0
- package/v8/enums.js +375 -0
- package/v8/enums.js.map +1 -0
- package/v8/index.d.ts +2 -1
- package/v8/index.js +2 -1
- package/v8/index.js.map +1 -1
- package/v8/inline.d.ts +177 -0
- package/v8/inline.js +1973 -0
- package/v8/inline.js.map +1 -0
- package/v8/nodes.d.ts +8 -7
- package/v8/nodes.js +37 -63
- package/v8/nodes.js.map +1 -1
- package/v8/parser.d.ts +41 -151
- package/v8/parser.js +507 -1579
- package/v8/parser.js.map +1 -1
- package/v8/stream.d.ts +35 -3
- package/v8/stream.js +616 -164
- package/v8/stream.js.map +1 -1
- package/v8/token.d.ts +15 -9
- package/v8/token.js +79 -46
- package/v8/token.js.map +1 -1
- package/visit/visitor.js.map +1 -1
- package/api/module/app/program.js.map +0 -1
- package/v8/app.d.ts +0 -0
- package/v8/app.js +0 -2
- package/v8/app.js.map +0 -1
package/v8/token.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isSloppy } from './enums.js';
|
|
1
2
|
export class Token {
|
|
2
3
|
constructor(name, precedence) {
|
|
3
4
|
this.name = name;
|
|
@@ -5,12 +6,12 @@ export class Token {
|
|
|
5
6
|
}
|
|
6
7
|
static isPair(token) {
|
|
7
8
|
switch (token) {
|
|
8
|
-
case Token.
|
|
9
|
-
case Token.
|
|
10
|
-
case Token.
|
|
11
|
-
case Token.
|
|
12
|
-
case Token.
|
|
13
|
-
case Token.
|
|
9
|
+
case Token.LPAREN:
|
|
10
|
+
case Token.LBRACK:
|
|
11
|
+
case Token.LBRACE:
|
|
12
|
+
case Token.RBRACE:
|
|
13
|
+
case Token.RBRACK:
|
|
14
|
+
case Token.RPAREN:
|
|
14
15
|
return true;
|
|
15
16
|
default:
|
|
16
17
|
return false;
|
|
@@ -18,9 +19,9 @@ export class Token {
|
|
|
18
19
|
}
|
|
19
20
|
static isOpenPair(token) {
|
|
20
21
|
switch (token) {
|
|
21
|
-
case Token.
|
|
22
|
-
case Token.
|
|
23
|
-
case Token.
|
|
22
|
+
case Token.LPAREN:
|
|
23
|
+
case Token.LBRACK:
|
|
24
|
+
case Token.LBRACE:
|
|
24
25
|
return true;
|
|
25
26
|
default:
|
|
26
27
|
return false;
|
|
@@ -28,9 +29,9 @@ export class Token {
|
|
|
28
29
|
}
|
|
29
30
|
static isClosePair(token) {
|
|
30
31
|
switch (token) {
|
|
31
|
-
case Token.
|
|
32
|
-
case Token.
|
|
33
|
-
case Token.
|
|
32
|
+
case Token.RBRACE:
|
|
33
|
+
case Token.RBRACK:
|
|
34
|
+
case Token.RPAREN:
|
|
34
35
|
return true;
|
|
35
36
|
default:
|
|
36
37
|
return false;
|
|
@@ -38,23 +39,23 @@ export class Token {
|
|
|
38
39
|
}
|
|
39
40
|
static openOf(token) {
|
|
40
41
|
switch (token) {
|
|
41
|
-
case Token.
|
|
42
|
-
return Token.
|
|
43
|
-
case Token.
|
|
44
|
-
return Token.
|
|
45
|
-
case Token.
|
|
46
|
-
return Token.
|
|
42
|
+
case Token.RBRACE:
|
|
43
|
+
return Token.LBRACE;
|
|
44
|
+
case Token.RBRACK:
|
|
45
|
+
return Token.LBRACK;
|
|
46
|
+
case Token.RPAREN:
|
|
47
|
+
return Token.LPAREN;
|
|
47
48
|
}
|
|
48
49
|
return token;
|
|
49
50
|
}
|
|
50
51
|
static closeOf(token) {
|
|
51
52
|
switch (token) {
|
|
52
|
-
case Token.
|
|
53
|
-
return Token.
|
|
54
|
-
case Token.
|
|
55
|
-
return Token.
|
|
56
|
-
case Token.
|
|
57
|
-
return Token.
|
|
53
|
+
case Token.LBRACE:
|
|
54
|
+
return Token.RBRACE;
|
|
55
|
+
case Token.LBRACK:
|
|
56
|
+
return Token.RBRACK;
|
|
57
|
+
case Token.LPAREN:
|
|
58
|
+
return Token.RPAREN;
|
|
58
59
|
}
|
|
59
60
|
return token;
|
|
60
61
|
}
|
|
@@ -134,7 +135,7 @@ export class Token {
|
|
|
134
135
|
static isAutoSemicolon(token) {
|
|
135
136
|
switch (token) {
|
|
136
137
|
case Token.SEMICOLON:
|
|
137
|
-
case Token.
|
|
138
|
+
case Token.RBRACE:
|
|
138
139
|
case Token.EOS:
|
|
139
140
|
return true;
|
|
140
141
|
}
|
|
@@ -142,24 +143,26 @@ export class Token {
|
|
|
142
143
|
}
|
|
143
144
|
static isMember(token) {
|
|
144
145
|
switch (token) {
|
|
145
|
-
case Token.
|
|
146
|
+
case Token.TEMPLATE_SPAN:
|
|
147
|
+
case Token.TEMPLATE_TAIL:
|
|
146
148
|
case Token.PERIOD:
|
|
147
|
-
case Token.
|
|
149
|
+
case Token.LBRACK:
|
|
148
150
|
return true;
|
|
149
151
|
}
|
|
150
152
|
return false;
|
|
151
153
|
}
|
|
152
154
|
static isTemplate(token) {
|
|
153
155
|
switch (token) {
|
|
154
|
-
case Token.
|
|
156
|
+
case Token.TEMPLATE_SPAN:
|
|
157
|
+
case Token.TEMPLATE_TAIL:
|
|
155
158
|
return true;
|
|
156
159
|
}
|
|
157
160
|
return false;
|
|
158
161
|
}
|
|
159
162
|
static isNextLetKeyword(token) {
|
|
160
163
|
switch (token) {
|
|
161
|
-
case Token.
|
|
162
|
-
case Token.
|
|
164
|
+
case Token.LBRACE:
|
|
165
|
+
case Token.LBRACK:
|
|
163
166
|
case Token.IDENTIFIER:
|
|
164
167
|
case Token.STATIC:
|
|
165
168
|
case Token.LET:
|
|
@@ -173,13 +176,25 @@ export class Token {
|
|
|
173
176
|
return false;
|
|
174
177
|
}
|
|
175
178
|
}
|
|
179
|
+
static isInRangeIdentifierAndAsync(token) {
|
|
180
|
+
switch (token) {
|
|
181
|
+
case Token.IDENTIFIER:
|
|
182
|
+
case Token.GET:
|
|
183
|
+
case Token.SET:
|
|
184
|
+
case Token.ASYNC:
|
|
185
|
+
return true;
|
|
186
|
+
default:
|
|
187
|
+
return false;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
176
190
|
static isPropertyOrCall(token) {
|
|
177
191
|
switch (token) {
|
|
178
|
-
case Token.
|
|
192
|
+
case Token.TEMPLATE_SPAN:
|
|
193
|
+
case Token.TEMPLATE_TAIL:
|
|
179
194
|
case Token.PERIOD:
|
|
180
|
-
case Token.
|
|
195
|
+
case Token.LBRACK:
|
|
181
196
|
case Token.QUESTION_PERIOD:
|
|
182
|
-
case Token.
|
|
197
|
+
case Token.LPAREN:
|
|
183
198
|
return true;
|
|
184
199
|
}
|
|
185
200
|
return false;
|
|
@@ -190,6 +205,12 @@ export class Token {
|
|
|
190
205
|
static isInRange(op, start, end) {
|
|
191
206
|
return op >= start.precedence && op <= end.precedence;
|
|
192
207
|
}
|
|
208
|
+
static isProperty(token) {
|
|
209
|
+
if (token instanceof Token) {
|
|
210
|
+
token = token.precedence;
|
|
211
|
+
}
|
|
212
|
+
return Token.isInRange(token, Token.PERIOD, Token.LBRACK);
|
|
213
|
+
}
|
|
193
214
|
static isBinary(token) {
|
|
194
215
|
if (token instanceof Token) {
|
|
195
216
|
token = token.precedence;
|
|
@@ -320,12 +341,20 @@ export class Token {
|
|
|
320
341
|
}
|
|
321
342
|
return false;
|
|
322
343
|
}
|
|
323
|
-
static isValidIdentifier(token) {
|
|
324
|
-
if (Token.
|
|
344
|
+
static isValidIdentifier(token, mode, isGenerator, disallowAwait) {
|
|
345
|
+
if (Token.isInRangeIdentifierAndAsync(token))
|
|
325
346
|
return true;
|
|
326
|
-
if (token == Token.AWAIT
|
|
327
|
-
return
|
|
328
|
-
|
|
347
|
+
if (token == Token.AWAIT)
|
|
348
|
+
return !disallowAwait;
|
|
349
|
+
if (token == Token.YIELD)
|
|
350
|
+
return !isGenerator;
|
|
351
|
+
return Token.isStrictReservedWord(token) && isSloppy(mode);
|
|
352
|
+
}
|
|
353
|
+
static precedence(token, acceptIN) {
|
|
354
|
+
if (!acceptIN && Token.IN === token) {
|
|
355
|
+
return 0;
|
|
356
|
+
}
|
|
357
|
+
return token.getPrecedence();
|
|
329
358
|
}
|
|
330
359
|
getName() {
|
|
331
360
|
return this.name;
|
|
@@ -333,6 +362,9 @@ export class Token {
|
|
|
333
362
|
getPrecedence() {
|
|
334
363
|
return this.precedence;
|
|
335
364
|
}
|
|
365
|
+
equal(token) {
|
|
366
|
+
return this === token || this.name === token.name;
|
|
367
|
+
}
|
|
336
368
|
}
|
|
337
369
|
Token.CONDITIONAL = new Token('?', 3);
|
|
338
370
|
Token.NULLISH = new Token('??', 3);
|
|
@@ -390,12 +422,12 @@ Token.PERIOD = new Token('.', 0);
|
|
|
390
422
|
Token.QUESTION_PERIOD = new Token('?.', 0);
|
|
391
423
|
Token.BIND = new Token('::', 0);
|
|
392
424
|
Token.QUESTION_BIND = new Token('?::', 0);
|
|
393
|
-
Token.
|
|
394
|
-
Token.
|
|
395
|
-
Token.
|
|
396
|
-
Token.
|
|
397
|
-
Token.
|
|
398
|
-
Token.
|
|
425
|
+
Token.LPAREN = new Token('(', 0);
|
|
426
|
+
Token.RPAREN = new Token(')', 0);
|
|
427
|
+
Token.LBRACK = new Token('[', 0);
|
|
428
|
+
Token.RBRACK = new Token(']', 0);
|
|
429
|
+
Token.LBRACE = new Token('{', 0);
|
|
430
|
+
Token.RBRACE = new Token('}', 0);
|
|
399
431
|
Token.COLON = new Token(':', 0);
|
|
400
432
|
Token.ELLIPSIS = new Token('...', 0);
|
|
401
433
|
Token.SEMICOLON = new Token(';', 0);
|
|
@@ -456,7 +488,8 @@ Token.NUMBER = new Token('NUMBER', 0);
|
|
|
456
488
|
Token.BIGINT = new Token('BIGINT', 0);
|
|
457
489
|
Token.STRING = new Token('STRING', 0);
|
|
458
490
|
Token.IDENTIFIER = new Token('IDENTIFIER', 0);
|
|
459
|
-
Token.
|
|
491
|
+
Token.TEMPLATE_SPAN = new Token('TEMPLATE_SPAN', 0);
|
|
492
|
+
Token.TEMPLATE_TAIL = new Token('TEMPLATE_TAIL', 0);
|
|
460
493
|
Token.ILLEGAL = new Token('ILLEGAL', 0);
|
|
461
494
|
Token.ESCAPED_KEYWORD = new Token('ESCAPED_KEYWORD', 0);
|
|
462
495
|
Token.WHITESPACE = new Token('WHITESPACE', 0);
|
|
@@ -476,7 +509,7 @@ export class TokenExpression {
|
|
|
476
509
|
return this.token !== type;
|
|
477
510
|
}
|
|
478
511
|
test(func) {
|
|
479
|
-
return func(this.token);
|
|
512
|
+
return func(this.token, this.value);
|
|
480
513
|
}
|
|
481
514
|
toString() {
|
|
482
515
|
return JSON.stringify(this);
|
package/v8/token.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/expressions/v8/token.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\n\nexport class Token {\n\n\t/**\n\t * ___ ? ___ : ___\n\t */\n\tpublic static readonly CONDITIONAL = new Token('?', 3);\n\n\t/**\n\t * ___ ?? ___\n\t */\n\tpublic static readonly NULLISH = new Token('??', 3);\n\n\t/**\n\t * ___ |> ___ : ___ : ?\n\t * ___ |> ___ ( ___, ___ , ?)\n\t */\n\tpublic static readonly PIPELINE = new Token('|>', 3);\n\n\t/**\n\t * ___ || ___\n\t */\n\tpublic static readonly OR = new Token('||', 4);\n\n\t/**\n\t * ___ && ___\n\t */\n\tpublic static readonly AND = new Token('&&', 5);\n\n\t/**\n\t * ___ | ___\n\t */\n\tpublic static readonly BIT_OR = new Token('|', 6);\n\n\t/**\n\t * ___ ^ ___\n\t */\n\tpublic static readonly BIT_XOR = new Token('^', 7);\n\n\t/**\n\t * ___ | ___\n\t */\n\tpublic static readonly BIT_AND = new Token('&', 8);\n\n\t/**\n\t * ___ << ___\n\t */\n\tpublic static readonly SHL = new Token('<<', 11);\n\n\t/**\n\t * ___ >> ___\n\t */\n\tpublic static readonly SAR = new Token('>>', 11);\n\n\t/**\n\t * ___ >>> ___\n\t */\n\tpublic static readonly SHR = new Token('>>>', 11);\n\n\t/**\n\t * ___ * ___\n\t */\n\tpublic static readonly MUL = new Token('*', 13);\n\n\t/**\n\t * ___ / ___\n\t */\n\tpublic static readonly DIV = new Token('/', 13);\n\n\t/**\n\t * ___ % ___\n\t */\n\tpublic static readonly MOD = new Token('%', 13);\n\n\t/**\n\t * ___ %% ___\n\t */\n\tpublic static readonly MODULO = new Token('%%', 13);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly LARGER = new Token('>?', 13);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly SMALLER = new Token('<?', 13);\n\n\t/**\n\t * ___ ** ___\n\t */\n\tpublic static readonly EXP = new Token('**', 14);\n\n\t/**\n\t * ___ + ___\n\t */\n\tpublic static readonly ADD = new Token('+', 12);\n\n\t/**\n\t * ___ - ___\n\t */\n\tpublic static readonly SUB = new Token('-', 12);\n\n\t/**\n\t * ! ___\n\t */\n\tpublic static readonly NOT = new Token('!', 0);\n\n\t/**\n\t * ~ ___\n\t */\n\tpublic static readonly BIT_NOT = new Token('~', 0);\n\n\t/**\n\t * ___ < ___\n\t */\n\tpublic static readonly LT = new Token('<', 10);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly GT = new Token('>', 10);\n\n\t/**\n\t * ___++\n\t * \n\t * ++___\n\t */\n\tpublic static readonly INC = new Token('++', 0);\n\n\t/**\n\t * ___--\n\t * \n\t * --___\n\t */\n\tpublic static readonly DEC = new Token('--', 0);\n\n\t/**\n\t * ___ == ___\n\t */\n\tpublic static readonly EQ = new Token('==', 9);\n\n\t/**\n\t * ___ === ___\n\t */\n\tpublic static readonly EQ_STRICT = new Token('===', 9);\n\n\t/**\n\t * ___ != ___\n\t */\n\tpublic static readonly NE = new Token('!=', 9);\n\n\t/**\n\t * ___ !== ___\n\t */\n\tpublic static readonly NE_STRICT = new Token('!==', 9);\n\n\t/**\n\t * ___ <= ___\n\t */\n\tpublic static readonly LTE = new Token('<=', 10);\n\n\t/**\n\t * ___ >= ___\n\t */\n\tpublic static readonly GTE = new Token('>=', 10);\n\n\t/**\n\t * ___ <=> ___\n\t */\n\tpublic static readonly SPACESHIP = new Token('<=>', 10);\n\n\t/**\n\t * ___ = ___\n\t */\n\tpublic static readonly ASSIGN = new Token('=', 2);\n\n\t/**\n\t * ___ += ___\n\t */\n\tpublic static readonly ADD_ASSIGN = new Token('+=', 2);\n\n\t/**\n\t * ___ -= ___\n\t */\n\tpublic static readonly SUB_ASSIGN = new Token('-=', 2);\n\n\t/**\n\t * ___ *= ___\n\t */\n\tpublic static readonly MUL_ASSIGN = new Token('*=', 2);\n\n\t/**\n\t * ___ /= ___\n\t */\n\tpublic static readonly DIV_ASSIGN = new Token('/=', 2);\n\n\t/**\n\t * ___ %= ___\n\t */\n\tpublic static readonly MOD_ASSIGN = new Token('%=', 2);\n\n\t/**\n\t * ___ %% ___\n\t */\n\tpublic static readonly MODULO_ASSIGN = new Token('%%=', 2);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly LARGER_ASSIGN = new Token('>?=', 2);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly SMALLER_ASSIGN = new Token('<?=', 2);\n\n\t/**\n\t * ___ **= ___\n\t */\n\tpublic static readonly EXP_ASSIGN = new Token('**=', 2);\n\n\t/**\n\t * ___ ^= ___\n\t */\n\tpublic static readonly BIT_XOR_ASSIGN = new Token('^=', 2);\n\n\t/**\n\t * ___ &= ___\n\t */\n\tpublic static readonly BIT_AND_ASSIGN = new Token('&=', 2);\n\n\t/**\n\t * ___ |= ___\n\t */\n\tpublic static readonly BIT_OR_ASSIGN = new Token('|=', 2);\n\n\t/**\n\t * ___ &&= ___\n\t */\n\tpublic static readonly AND_ASSIGN = new Token('&&=', 2);\n\n\t/**\n\t * ___ ||= ___\n\t */\n\tpublic static readonly OR_ASSIGN = new Token('||=', 2);\n\n\t/**\n\t * ___ ??= ___\n\t */\n\tpublic static readonly NULLISH_ASSIGN = new Token('??=', 2);\n\n\t/**\n\t * ___ <<= ___\n\t */\n\tpublic static readonly SHL_ASSIGN = new Token('<<=', 2);\n\n\t/**\n\t * ___ >>= ___\n\t */\n\tpublic static readonly SAR_ASSIGN = new Token('>>=', 2);\n\n\t/**\n\t * ___ >>>= ___\n\t */\n\tpublic static readonly SHR_ASSIGN = new Token('>>>=', 2);\n\n\t/**\n\t * ___ . ___\n\t */\n\tpublic static readonly PERIOD = new Token('.', 0);\n\n\t/**\n\t * ___ ?. ___\n\t * \n\t * ___?.[___]\n\t * \n\t * ___?.()\n\t */\n\tpublic static readonly QUESTION_PERIOD = new Token('?.', 0);\n\n\t/**\n\t * ___ :: ___\n\t */\n\tpublic static readonly BIND = new Token('::', 0);\n\n\t/**\n\t * ___ ?:: ___\n\t * \n\t * ___?::[___]\n\t * \n\t * ___?::()\n\t */\n\tpublic static readonly QUESTION_BIND = new Token('?::', 0);\n\n\t/**\n\t * (\n\t */\n\tpublic static readonly L_PARENTHESES = new Token('(', 0);\n\n\t/**\n\t * )\n\t */\n\tpublic static readonly R_PARENTHESES = new Token(')', 0);\n\n\t/**\n\t * [\n\t */\n\tpublic static readonly L_BRACKETS = new Token('[', 0);\n\n\t/**\n\t * ]\n\t */\n\tpublic static readonly R_BRACKETS = new Token(']', 0);\n\n\t/**\n\t * {\n\t */\n\tpublic static readonly L_CURLY = new Token('{', 0);\n\n\t/**\n\t * }\n\t */\n\tpublic static readonly R_CURLY = new Token('}', 0);\n\n\t/**\n\t * :\n\t */\n\tpublic static readonly COLON = new Token(':', 0);\n\n\t/**\n\t * ...\n\t */\n\tpublic static readonly ELLIPSIS = new Token('...', 0);\n\n\t/**\n\t * ;\n\t */\n\tpublic static readonly SEMICOLON = new Token(';', 0);\n\n\t/**\n\t * end of source\n\t */\n\tpublic static readonly EOS = new Token('EOS', 0);\n\n\t/**\n\t * =>\n\t */\n\tpublic static readonly ARROW = new Token('=>', 0);\n\n\t/**\n\t * ___, ___, ___\n\t */\n\tpublic static readonly COMMA = new Token(',', 1);\n\tpublic static readonly ASYNC = new Token('async', 0);\n\tpublic static readonly AWAIT = new Token('await', 0);\n\tpublic static readonly BREAK = new Token('break', 0);\n\tpublic static readonly CASE = new Token('case', 0);\n\tpublic static readonly CATCH = new Token('catch', 0);\n\tpublic static readonly CLASS = new Token('class', 0);\n\tpublic static readonly CONST = new Token('const', 0);\n\tpublic static readonly CONTINUE = new Token('continue', 0);\n\tpublic static readonly DEBUGGER = new Token('debugger', 0);\n\tpublic static readonly DEFAULT = new Token('default', 0);\n\tpublic static readonly DELETE = new Token('delete', 0);\n\tpublic static readonly DO = new Token('do', 0);\n\tpublic static readonly ELSE = new Token('else', 0);\n\tpublic static readonly ENUM = new Token('enum', 0);\n\tpublic static readonly EXPORT = new Token('export', 0);\n\tpublic static readonly EXTENDS = new Token('extends', 0);\n\tpublic static readonly FALSE_LITERAL = new Token('false', 0);\n\tpublic static readonly FINALLY = new Token('finally', 0);\n\tpublic static readonly FOR = new Token('for', 0);\n\tpublic static readonly FUNCTION = new Token('function', 0);\n\tpublic static readonly GET = new Token('get', 0);\n\tpublic static readonly IF = new Token('if', 0);\n\tpublic static readonly IMPLEMENTS = new Token('implements', 0);\n\tpublic static readonly IMPORT = new Token('import', 0);\n\tpublic static readonly PRIVATE_NAME = new Token('PRIVATE_NAME', 0);\n\tpublic static readonly IN = new Token('in', 10);\n\tpublic static readonly INSTANCEOF = new Token('instanceof', 10);\n\tpublic static readonly LET = new Token('let', 0);\n\tpublic static readonly NEW = new Token('new', 0);\n\tpublic static readonly NULL_LITERAL = new Token('null', 0);\n\tpublic static readonly UNDEFINED_LITERAL = new Token('undefined', 0);\n\tpublic static readonly PACKAGE = new Token('package', 0);\n\tpublic static readonly INTERFACE = new Token('interface', 0);\n\tpublic static readonly PRIVATE = new Token('private', 0);\n\tpublic static readonly PROTECTED = new Token('protected', 0);\n\tpublic static readonly PUBLIC = new Token('public', 0);\n\tpublic static readonly RETURN = new Token('return', 0);\n\tpublic static readonly SET = new Token('set', 0);\n\tpublic static readonly STATIC = new Token('static', 0);\n\tpublic static readonly SUPER = new Token('super', 0);\n\tpublic static readonly SWITCH = new Token('switch', 0);\n\tpublic static readonly THIS = new Token('this', 0);\n\tpublic static readonly THROW = new Token('throw', 0);\n\tpublic static readonly TRUE_LITERAL = new Token('true', 0);\n\tpublic static readonly TRY = new Token('try', 0);\n\tpublic static readonly TYPEOF = new Token('typeof', 0);\n\tpublic static readonly VAR = new Token('var', 0);\n\tpublic static readonly VOID = new Token('void', 0);\n\tpublic static readonly WHILE = new Token('while', 0);\n\tpublic static readonly YIELD = new Token('yield', 0);\n\tpublic static readonly NUMBER = new Token('NUMBER', 0);\n\tpublic static readonly BIGINT = new Token('BIGINT', 0);\n\tpublic static readonly STRING = new Token('STRING', 0);\n\tpublic static readonly IDENTIFIER = new Token('IDENTIFIER', 0);\n\tpublic static readonly TEMPLATE_LITERALS = new Token('TEMPLATE_LITERALS', 0);\n\tpublic static readonly ILLEGAL = new Token('ILLEGAL', 0);\n\tpublic static readonly ESCAPED_KEYWORD = new Token('ESCAPED_KEYWORD', 0);\n\tpublic static readonly WHITESPACE = new Token('WHITESPACE', 0);\n\tpublic static readonly REGEXP_LITERAL = new Token('REGEXP_LITERAL', 0);\n\n\n\tpublic static isPair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.L_PARENTHESES:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\tcase Token.L_CURLY:\n\t\t\tcase Token.R_CURLY:\n\t\t\tcase Token.R_BRACKETS:\n\t\t\tcase Token.R_PARENTHESES:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isOpenPair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.L_PARENTHESES:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\tcase Token.L_CURLY:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isClosePair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.R_CURLY:\n\t\t\tcase Token.R_BRACKETS:\n\t\t\tcase Token.R_PARENTHESES:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static openOf(token: Token): Token {\n\t\tswitch (token) {\n\t\t\tcase Token.R_CURLY:\n\t\t\t\treturn Token.L_CURLY;\n\t\t\tcase Token.R_BRACKETS:\n\t\t\t\treturn Token.L_BRACKETS;\n\t\t\tcase Token.R_PARENTHESES:\n\t\t\t\treturn Token.L_PARENTHESES;\n\t\t}\n\t\treturn token;\n\t}\n\tpublic static closeOf(token: Token): Token {\n\t\tswitch (token) {\n\t\t\tcase Token.L_CURLY:\n\t\t\t\treturn Token.R_CURLY;\n\t\t\tcase Token.L_BRACKETS:\n\t\t\t\treturn Token.R_BRACKETS;\n\t\t\tcase Token.L_PARENTHESES:\n\t\t\t\treturn Token.R_PARENTHESES;\n\t\t}\n\t\treturn token;\n\t}\n\tpublic static isAnyIdentifier(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.STATIC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isIdentifier(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isLiteral(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.UNDEFINED_LITERAL:\n\t\t\tcase Token.NULL_LITERAL:\n\t\t\tcase Token.TRUE_LITERAL:\n\t\t\tcase Token.FALSE_LITERAL:\n\t\t\tcase Token.NUMBER:\n\t\t\tcase Token.BIGINT:\n\t\t\tcase Token.STRING:\n\t\t\tcase Token.REGEXP_LITERAL:\n\t\t\t\t// case Token.SMI:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isArrowOrAssignmentOp(token: Token) {\n\t\treturn token === Token.ARROW || this.isAssignment(token);\n\t}\n\tpublic static isAssignment(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.ASSIGN:\n\t\t\tcase Token.ADD_ASSIGN:\n\t\t\tcase Token.SUB_ASSIGN:\n\t\t\tcase Token.MUL_ASSIGN:\n\t\t\tcase Token.DIV_ASSIGN:\n\t\t\tcase Token.MOD_ASSIGN:\n\t\t\tcase Token.MODULO_ASSIGN:\n\t\t\tcase Token.EXP_ASSIGN:\n\t\t\tcase Token.BIT_XOR_ASSIGN:\n\t\t\tcase Token.BIT_AND_ASSIGN:\n\t\t\tcase Token.BIT_OR_ASSIGN:\n\t\t\tcase Token.AND_ASSIGN:\n\t\t\tcase Token.OR_ASSIGN:\n\t\t\tcase Token.NULLISH_ASSIGN:\n\t\t\tcase Token.SHL_ASSIGN:\n\t\t\tcase Token.SAR_ASSIGN:\n\t\t\tcase Token.SHR_ASSIGN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isLogicalAssignmentOp(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.AND_ASSIGN:\n\t\t\tcase Token.OR_ASSIGN:\n\t\t\tcase Token.NULLISH_ASSIGN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isAutoSemicolon(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.SEMICOLON:\n\t\t\tcase Token.R_CURLY:\n\t\t\tcase Token.EOS:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isMember(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_LITERALS:\n\t\t\tcase Token.PERIOD:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isTemplate(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_LITERALS:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isNextLetKeyword(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.L_CURLY:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.STATIC:\n\t\t\tcase Token.LET: // `let let;` is disallowed by static semantics, but the\n\t\t\t// token must be first interpreted as a keyword in order\n\t\t\t// for those semantics to apply. This ensures that ASI is\n\t\t\t// not honored when a LineTerminator separates the tokens.\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\t// case Token.FUTURE_STRICT_RESERVED_WORD:\n\t\t\t// return is_sloppy(language_mode());\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isPropertyOrCall(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_LITERALS:\n\t\t\tcase Token.PERIOD:\n\t\t\tcase Token.L_BRACKETS:\n\t\t\tcase Token.QUESTION_PERIOD:\n\t\t\tcase Token.L_PARENTHESES:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isPropertyName(token: Token) {\n\t\treturn /\\w/.test(token.getName());\n\t}\n\tprivate static isInRange(op: number, start: Token, end: Token) {\n\t\treturn op >= start.precedence && op <= end.precedence;\n\t}\n\tpublic static isBinary(token: number | Token) {\n\t\tif (token instanceof Token) {\n\t\t\ttoken = token.precedence;\n\t\t}\n\t\treturn Token.isInRange(token, Token.COMMA, Token.SUB);\n\t}\n\n\tpublic static isCompare(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.EQ:\n\t\t\tcase Token.EQ_STRICT:\n\t\t\tcase Token.NE:\n\t\t\tcase Token.NE_STRICT:\n\t\t\tcase Token.LT:\n\t\t\tcase Token.GT:\n\t\t\tcase Token.LTE:\n\t\t\tcase Token.GTE:\n\t\t\tcase Token.SPACESHIP:\n\t\t\tcase Token.INSTANCEOF:\n\t\t\tcase Token.IN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isOrderedRelationalCompare(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.LT:\n\t\t\tcase Token.GT:\n\t\t\tcase Token.LTE:\n\t\t\tcase Token.GTE:\n\t\t\tcase Token.SPACESHIP:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isEquality(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.EQ:\n\t\t\tcase Token.EQ_STRICT:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static binaryOpForAssignment(token: Token) {\n\t\tif (Token.isInRange(token.precedence, Token.NULLISH_ASSIGN, Token.SUB_ASSIGN)) {\n\t\t\tconst result = token.precedence - Token.NULLISH_ASSIGN.precedence + Token.NULLISH.precedence;\n\t\t\treturn Token.isBinary(result);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isBitOp(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.BIT_OR:\n\t\t\tcase Token.BIT_XOR:\n\t\t\tcase Token.BIT_AND:\n\t\t\tcase Token.SHL:\n\t\t\tcase Token.SAR:\n\t\t\tcase Token.SHR:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isUnary(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.ADD:\n\t\t\tcase Token.SUB:\n\t\t\tcase Token.NOT:\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.DELETE:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.TYPEOF:\n\t\t\tcase Token.VOID:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isCount(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.INC:\n\t\t\tcase Token.DEC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isUnaryOrCount(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.ADD:\n\t\t\tcase Token.SUB:\n\t\t\tcase Token.INC:\n\t\t\tcase Token.DEC:\n\t\t\tcase Token.NOT:\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.DELETE:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.TYPEOF:\n\t\t\tcase Token.VOID:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isShift(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.SHL:\n\t\t\tcase Token.SAR:\n\t\t\tcase Token.SHR:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isStrictReservedWord(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.IMPLEMENTS:\n\t\t\tcase Token.INTERFACE:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.PACKAGE:\n\t\t\tcase Token.PRIVATE:\n\t\t\tcase Token.PROTECTED:\n\t\t\tcase Token.PUBLIC:\n\t\t\tcase Token.STATIC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isPipelineOperator(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.PIPELINE:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isValidIdentifier(token: Token) {\n\t\tif (Token.isInRange(token.precedence, Token.IDENTIFIER, Token.ASYNC)) return true;\n\t\tif (token == Token.AWAIT || token == Token.YIELD) return false;\n\t\treturn Token.isStrictReservedWord(token) && false;\n\t}\n\n\tconstructor(private name: string, private precedence: number) { }\n\tgetName() {\n\t\treturn this.name;\n\t}\n\tgetPrecedence() {\n\t\treturn this.precedence;\n\t}\n}\n\nexport class TokenExpression {\n\tconstructor(public token: Token, public value?: ExpressionNode) { }\n\tgetValue<T extends ExpressionNode>(): T {\n\t\treturn this.value! as T;\n\t}\n\tisType(type: Token) {\n\t\treturn this.token === type;\n\t}\n\tisNotType(type: Token) {\n\t\treturn this.token !== type;\n\t}\n\n\ttest(func: (token: Token) => boolean): boolean {\n\t\treturn func(this.token);\n\t}\n\ttoString(): string {\n\t\treturn JSON.stringify(this);\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"token.js","sourceRoot":"","sources":["../../../src/expressions/v8/token.ts"],"names":[],"mappings":"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","sourcesContent":["import type { ExpressionNode } from '../api/expression.js';\nimport { isSloppy, LanguageMode } from './enums.js';\n\nexport class Token {\n\n\t/**\n\t * ___ ? ___ : ___\n\t */\n\tpublic static readonly CONDITIONAL = new Token('?', 3);\n\n\t/**\n\t * ___ ?? ___\n\t */\n\tpublic static readonly NULLISH = new Token('??', 3);\n\n\t/**\n\t * ___ |> ___ : ___ : ?\n\t * ___ |> ___ ( ___, ___ , ?)\n\t */\n\tpublic static readonly PIPELINE = new Token('|>', 3);\n\n\t/**\n\t * ___ || ___\n\t */\n\tpublic static readonly OR = new Token('||', 4);\n\n\t/**\n\t * ___ && ___\n\t */\n\tpublic static readonly AND = new Token('&&', 5);\n\n\t/**\n\t * ___ | ___\n\t */\n\tpublic static readonly BIT_OR = new Token('|', 6);\n\n\t/**\n\t * ___ ^ ___\n\t */\n\tpublic static readonly BIT_XOR = new Token('^', 7);\n\n\t/**\n\t * ___ | ___\n\t */\n\tpublic static readonly BIT_AND = new Token('&', 8);\n\n\t/**\n\t * ___ << ___\n\t */\n\tpublic static readonly SHL = new Token('<<', 11);\n\n\t/**\n\t * ___ >> ___\n\t */\n\tpublic static readonly SAR = new Token('>>', 11);\n\n\t/**\n\t * ___ >>> ___\n\t */\n\tpublic static readonly SHR = new Token('>>>', 11);\n\n\t/**\n\t * ___ * ___\n\t */\n\tpublic static readonly MUL = new Token('*', 13);\n\n\t/**\n\t * ___ / ___\n\t */\n\tpublic static readonly DIV = new Token('/', 13);\n\n\t/**\n\t * ___ % ___\n\t */\n\tpublic static readonly MOD = new Token('%', 13);\n\n\t/**\n\t * ___ %% ___\n\t */\n\tpublic static readonly MODULO = new Token('%%', 13);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly LARGER = new Token('>?', 13);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly SMALLER = new Token('<?', 13);\n\n\t/**\n\t * ___ ** ___\n\t */\n\tpublic static readonly EXP = new Token('**', 14);\n\n\t/**\n\t * ___ + ___\n\t */\n\tpublic static readonly ADD = new Token('+', 12);\n\n\t/**\n\t * ___ - ___\n\t */\n\tpublic static readonly SUB = new Token('-', 12);\n\n\t/**\n\t * ! ___\n\t */\n\tpublic static readonly NOT = new Token('!', 0);\n\n\t/**\n\t * ~ ___\n\t */\n\tpublic static readonly BIT_NOT = new Token('~', 0);\n\n\t/**\n\t * ___ < ___\n\t */\n\tpublic static readonly LT = new Token('<', 10);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly GT = new Token('>', 10);\n\n\t/**\n\t * ___++\n\t * \n\t * ++___\n\t */\n\tpublic static readonly INC = new Token('++', 0);\n\n\t/**\n\t * ___--\n\t * \n\t * --___\n\t */\n\tpublic static readonly DEC = new Token('--', 0);\n\n\t/**\n\t * ___ == ___\n\t */\n\tpublic static readonly EQ = new Token('==', 9);\n\n\t/**\n\t * ___ === ___\n\t */\n\tpublic static readonly EQ_STRICT = new Token('===', 9);\n\n\t/**\n\t * ___ != ___\n\t */\n\tpublic static readonly NE = new Token('!=', 9);\n\n\t/**\n\t * ___ !== ___\n\t */\n\tpublic static readonly NE_STRICT = new Token('!==', 9);\n\n\t/**\n\t * ___ <= ___\n\t */\n\tpublic static readonly LTE = new Token('<=', 10);\n\n\t/**\n\t * ___ >= ___\n\t */\n\tpublic static readonly GTE = new Token('>=', 10);\n\n\t/**\n\t * ___ <=> ___\n\t */\n\tpublic static readonly SPACESHIP = new Token('<=>', 10);\n\n\t/**\n\t * ___ = ___\n\t */\n\tpublic static readonly ASSIGN = new Token('=', 2);\n\n\t/**\n\t * ___ += ___\n\t */\n\tpublic static readonly ADD_ASSIGN = new Token('+=', 2);\n\n\t/**\n\t * ___ -= ___\n\t */\n\tpublic static readonly SUB_ASSIGN = new Token('-=', 2);\n\n\t/**\n\t * ___ *= ___\n\t */\n\tpublic static readonly MUL_ASSIGN = new Token('*=', 2);\n\n\t/**\n\t * ___ /= ___\n\t */\n\tpublic static readonly DIV_ASSIGN = new Token('/=', 2);\n\n\t/**\n\t * ___ %= ___\n\t */\n\tpublic static readonly MOD_ASSIGN = new Token('%=', 2);\n\n\t/**\n\t * ___ %% ___\n\t */\n\tpublic static readonly MODULO_ASSIGN = new Token('%%=', 2);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly LARGER_ASSIGN = new Token('>?=', 2);\n\n\t/**\n\t * ___ > ___\n\t */\n\tpublic static readonly SMALLER_ASSIGN = new Token('<?=', 2);\n\n\t/**\n\t * ___ **= ___\n\t */\n\tpublic static readonly EXP_ASSIGN = new Token('**=', 2);\n\n\t/**\n\t * ___ ^= ___\n\t */\n\tpublic static readonly BIT_XOR_ASSIGN = new Token('^=', 2);\n\n\t/**\n\t * ___ &= ___\n\t */\n\tpublic static readonly BIT_AND_ASSIGN = new Token('&=', 2);\n\n\t/**\n\t * ___ |= ___\n\t */\n\tpublic static readonly BIT_OR_ASSIGN = new Token('|=', 2);\n\n\t/**\n\t * ___ &&= ___\n\t */\n\tpublic static readonly AND_ASSIGN = new Token('&&=', 2);\n\n\t/**\n\t * ___ ||= ___\n\t */\n\tpublic static readonly OR_ASSIGN = new Token('||=', 2);\n\n\t/**\n\t * ___ ??= ___\n\t */\n\tpublic static readonly NULLISH_ASSIGN = new Token('??=', 2);\n\n\t/**\n\t * ___ <<= ___\n\t */\n\tpublic static readonly SHL_ASSIGN = new Token('<<=', 2);\n\n\t/**\n\t * ___ >>= ___\n\t */\n\tpublic static readonly SAR_ASSIGN = new Token('>>=', 2);\n\n\t/**\n\t * ___ >>>= ___\n\t */\n\tpublic static readonly SHR_ASSIGN = new Token('>>>=', 2);\n\n\t/**\n\t * ___ . ___\n\t */\n\tpublic static readonly PERIOD = new Token('.', 0);\n\n\t/**\n\t * ___ ?. ___\n\t * \n\t * ___?.[___]\n\t * \n\t * ___?.()\n\t */\n\tpublic static readonly QUESTION_PERIOD = new Token('?.', 0);\n\n\t/**\n\t * ___ :: ___\n\t */\n\tpublic static readonly BIND = new Token('::', 0);\n\n\t/**\n\t * ___ ?:: ___\n\t * \n\t * ___?::[___]\n\t * \n\t * ___?::()\n\t */\n\tpublic static readonly QUESTION_BIND = new Token('?::', 0);\n\n\t/**\n\t * (\n\t */\n\tpublic static readonly LPAREN = new Token('(', 0);\n\n\t/**\n\t * )\n\t */\n\tpublic static readonly RPAREN = new Token(')', 0);\n\n\t/**\n\t * [\n\t */\n\tpublic static readonly LBRACK = new Token('[', 0);\n\n\t/**\n\t * ]\n\t */\n\tpublic static readonly RBRACK = new Token(']', 0);\n\n\t/**\n\t * {\n\t */\n\tpublic static readonly LBRACE = new Token('{', 0);\n\n\t/**\n\t * }\n\t */\n\tpublic static readonly RBRACE = new Token('}', 0);\n\n\t/**\n\t * :\n\t */\n\tpublic static readonly COLON = new Token(':', 0);\n\n\t/**\n\t * ...\n\t */\n\tpublic static readonly ELLIPSIS = new Token('...', 0);\n\n\t/**\n\t * ;\n\t */\n\tpublic static readonly SEMICOLON = new Token(';', 0);\n\n\t/**\n\t * end of source\n\t */\n\tpublic static readonly EOS = new Token('EOS', 0);\n\n\t/**\n\t * =>\n\t */\n\tpublic static readonly ARROW = new Token('=>', 0);\n\n\t/**\n\t * ___, ___, ___\n\t */\n\tpublic static readonly COMMA = new Token(',', 1);\n\tpublic static readonly ASYNC = new Token('async', 0);\n\tpublic static readonly AWAIT = new Token('await', 0);\n\tpublic static readonly BREAK = new Token('break', 0);\n\tpublic static readonly CASE = new Token('case', 0);\n\tpublic static readonly CATCH = new Token('catch', 0);\n\tpublic static readonly CLASS = new Token('class', 0);\n\tpublic static readonly CONST = new Token('const', 0);\n\tpublic static readonly CONTINUE = new Token('continue', 0);\n\tpublic static readonly DEBUGGER = new Token('debugger', 0);\n\tpublic static readonly DEFAULT = new Token('default', 0);\n\tpublic static readonly DELETE = new Token('delete', 0);\n\tpublic static readonly DO = new Token('do', 0);\n\tpublic static readonly ELSE = new Token('else', 0);\n\tpublic static readonly ENUM = new Token('enum', 0);\n\tpublic static readonly EXPORT = new Token('export', 0);\n\tpublic static readonly EXTENDS = new Token('extends', 0);\n\tpublic static readonly FALSE_LITERAL = new Token('false', 0);\n\tpublic static readonly FINALLY = new Token('finally', 0);\n\tpublic static readonly FOR = new Token('for', 0);\n\tpublic static readonly FUNCTION = new Token('function', 0);\n\tpublic static readonly GET = new Token('get', 0);\n\tpublic static readonly IF = new Token('if', 0);\n\tpublic static readonly IMPLEMENTS = new Token('implements', 0);\n\tpublic static readonly IMPORT = new Token('import', 0);\n\tpublic static readonly PRIVATE_NAME = new Token('PRIVATE_NAME', 0);\n\tpublic static readonly IN = new Token('in', 10);\n\tpublic static readonly INSTANCEOF = new Token('instanceof', 10);\n\tpublic static readonly LET = new Token('let', 0);\n\tpublic static readonly NEW = new Token('new', 0);\n\tpublic static readonly NULL_LITERAL = new Token('null', 0);\n\tpublic static readonly UNDEFINED_LITERAL = new Token('undefined', 0);\n\tpublic static readonly PACKAGE = new Token('package', 0);\n\tpublic static readonly INTERFACE = new Token('interface', 0);\n\tpublic static readonly PRIVATE = new Token('private', 0);\n\tpublic static readonly PROTECTED = new Token('protected', 0);\n\tpublic static readonly PUBLIC = new Token('public', 0);\n\tpublic static readonly RETURN = new Token('return', 0);\n\tpublic static readonly SET = new Token('set', 0);\n\tpublic static readonly STATIC = new Token('static', 0);\n\tpublic static readonly SUPER = new Token('super', 0);\n\tpublic static readonly SWITCH = new Token('switch', 0);\n\tpublic static readonly THIS = new Token('this', 0);\n\tpublic static readonly THROW = new Token('throw', 0);\n\tpublic static readonly TRUE_LITERAL = new Token('true', 0);\n\tpublic static readonly TRY = new Token('try', 0);\n\tpublic static readonly TYPEOF = new Token('typeof', 0);\n\tpublic static readonly VAR = new Token('var', 0);\n\tpublic static readonly VOID = new Token('void', 0);\n\tpublic static readonly WHILE = new Token('while', 0);\n\tpublic static readonly YIELD = new Token('yield', 0);\n\tpublic static readonly NUMBER = new Token('NUMBER', 0);\n\tpublic static readonly BIGINT = new Token('BIGINT', 0);\n\tpublic static readonly STRING = new Token('STRING', 0);\n\tpublic static readonly IDENTIFIER = new Token('IDENTIFIER', 0);\n\t/**\n\t * TEMPLATE_SPAN ::\n\t * \n\t * \t\t` LiteralChars* ${\n\t * \t\t| } LiteralChars* ${\n\t */\n\tpublic static readonly TEMPLATE_SPAN = new Token('TEMPLATE_SPAN', 0);\n\n\t/**\n\t * TEMPLATE_TAIL ::\n\t * \n\t * \t\t` LiteralChars* `\n\t * \t\t| } LiteralChar* `\n\t */\n\tpublic static readonly TEMPLATE_TAIL = new Token('TEMPLATE_TAIL', 0);\n\tpublic static readonly ILLEGAL = new Token('ILLEGAL', 0);\n\tpublic static readonly ESCAPED_KEYWORD = new Token('ESCAPED_KEYWORD', 0);\n\tpublic static readonly WHITESPACE = new Token('WHITESPACE', 0);\n\tpublic static readonly REGEXP_LITERAL = new Token('REGEXP_LITERAL', 0);\n\n\n\tpublic static isPair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.LPAREN:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.LBRACE:\n\t\t\tcase Token.RBRACE:\n\t\t\tcase Token.RBRACK:\n\t\t\tcase Token.RPAREN:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isOpenPair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.LPAREN:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isClosePair(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.RBRACE:\n\t\t\tcase Token.RBRACK:\n\t\t\tcase Token.RPAREN:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static openOf(token: Token): Token {\n\t\tswitch (token) {\n\t\t\tcase Token.RBRACE:\n\t\t\t\treturn Token.LBRACE;\n\t\t\tcase Token.RBRACK:\n\t\t\t\treturn Token.LBRACK;\n\t\t\tcase Token.RPAREN:\n\t\t\t\treturn Token.LPAREN;\n\t\t}\n\t\treturn token;\n\t}\n\tpublic static closeOf(token: Token): Token {\n\t\tswitch (token) {\n\t\t\tcase Token.LBRACE:\n\t\t\t\treturn Token.RBRACE;\n\t\t\tcase Token.LBRACK:\n\t\t\t\treturn Token.RBRACK;\n\t\t\tcase Token.LPAREN:\n\t\t\t\treturn Token.RPAREN;\n\t\t}\n\t\treturn token;\n\t}\n\tpublic static isAnyIdentifier(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.STATIC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isIdentifier(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isLiteral(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.UNDEFINED_LITERAL:\n\t\t\tcase Token.NULL_LITERAL:\n\t\t\tcase Token.TRUE_LITERAL:\n\t\t\tcase Token.FALSE_LITERAL:\n\t\t\tcase Token.NUMBER:\n\t\t\tcase Token.BIGINT:\n\t\t\tcase Token.STRING:\n\t\t\tcase Token.REGEXP_LITERAL:\n\t\t\t\t// case Token.SMI:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isArrowOrAssignmentOp(token: Token) {\n\t\treturn token === Token.ARROW || this.isAssignment(token);\n\t}\n\tpublic static isAssignment(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.ASSIGN:\n\t\t\tcase Token.ADD_ASSIGN:\n\t\t\tcase Token.SUB_ASSIGN:\n\t\t\tcase Token.MUL_ASSIGN:\n\t\t\tcase Token.DIV_ASSIGN:\n\t\t\tcase Token.MOD_ASSIGN:\n\t\t\tcase Token.MODULO_ASSIGN:\n\t\t\tcase Token.EXP_ASSIGN:\n\t\t\tcase Token.BIT_XOR_ASSIGN:\n\t\t\tcase Token.BIT_AND_ASSIGN:\n\t\t\tcase Token.BIT_OR_ASSIGN:\n\t\t\tcase Token.AND_ASSIGN:\n\t\t\tcase Token.OR_ASSIGN:\n\t\t\tcase Token.NULLISH_ASSIGN:\n\t\t\tcase Token.SHL_ASSIGN:\n\t\t\tcase Token.SAR_ASSIGN:\n\t\t\tcase Token.SHR_ASSIGN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isLogicalAssignmentOp(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.AND_ASSIGN:\n\t\t\tcase Token.OR_ASSIGN:\n\t\t\tcase Token.NULLISH_ASSIGN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isAutoSemicolon(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.SEMICOLON:\n\t\t\tcase Token.RBRACE:\n\t\t\tcase Token.EOS:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isMember(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\n\t\t\tcase Token.PERIOD:\n\t\t\tcase Token.LBRACK:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isTemplate(token: Token): boolean {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isNextLetKeyword(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.LBRACE:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.STATIC:\n\t\t\tcase Token.LET: // `let let;` is disallowed by static semantics, but the\n\t\t\t// token must be first interpreted as a keyword in order\n\t\t\t// for those semantics to apply. This ensures that ASI is\n\t\t\t// not honored when a LineTerminator separates the tokens.\n\t\t\tcase Token.YIELD:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\t// case Token.FUTURE_STRICT_RESERVED_WORD:\n\t\t\t// return is_sloppy(language_mode());\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\n\tpublic static isInRangeIdentifierAndAsync(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.IDENTIFIER:\n\t\t\tcase Token.GET:\n\t\t\tcase Token.SET:\n\t\t\tcase Token.ASYNC:\n\t\t\t\treturn true;\n\t\t\tdefault:\n\t\t\t\treturn false;\n\t\t}\n\t}\n\tpublic static isPropertyOrCall(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.TEMPLATE_SPAN:\n\t\t\tcase Token.TEMPLATE_TAIL:\n\t\t\tcase Token.PERIOD:\n\t\t\tcase Token.LBRACK:\n\t\t\tcase Token.QUESTION_PERIOD:\n\t\t\tcase Token.LPAREN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isPropertyName(token: Token) {\n\t\treturn /\\w/.test(token.getName());\n\t}\n\tprivate static isInRange(op: number, start: Token, end: Token) {\n\t\treturn op >= start.precedence && op <= end.precedence;\n\t}\n\tpublic static isProperty(token: number | Token) {\n\t\tif (token instanceof Token) {\n\t\t\ttoken = token.precedence;\n\t\t}\n\t\treturn Token.isInRange(token, Token.PERIOD, Token.LBRACK);\n\t}\n\tpublic static isBinary(token: number | Token) {\n\t\tif (token instanceof Token) {\n\t\t\ttoken = token.precedence;\n\t\t}\n\t\treturn Token.isInRange(token, Token.COMMA, Token.SUB);\n\t}\n\n\tpublic static isCompare(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.EQ:\n\t\t\tcase Token.EQ_STRICT:\n\t\t\tcase Token.NE:\n\t\t\tcase Token.NE_STRICT:\n\t\t\tcase Token.LT:\n\t\t\tcase Token.GT:\n\t\t\tcase Token.LTE:\n\t\t\tcase Token.GTE:\n\t\t\tcase Token.SPACESHIP:\n\t\t\tcase Token.INSTANCEOF:\n\t\t\tcase Token.IN:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isOrderedRelationalCompare(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.LT:\n\t\t\tcase Token.GT:\n\t\t\tcase Token.LTE:\n\t\t\tcase Token.GTE:\n\t\t\tcase Token.SPACESHIP:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isEquality(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.EQ:\n\t\t\tcase Token.EQ_STRICT:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static binaryOpForAssignment(token: Token) {\n\t\tif (Token.isInRange(token.precedence, Token.NULLISH_ASSIGN, Token.SUB_ASSIGN)) {\n\t\t\tconst result = token.precedence - Token.NULLISH_ASSIGN.precedence + Token.NULLISH.precedence;\n\t\t\treturn Token.isBinary(result);\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isBitOp(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.BIT_OR:\n\t\t\tcase Token.BIT_XOR:\n\t\t\tcase Token.BIT_AND:\n\t\t\tcase Token.SHL:\n\t\t\tcase Token.SAR:\n\t\t\tcase Token.SHR:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isUnary(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.ADD:\n\t\t\tcase Token.SUB:\n\t\t\tcase Token.NOT:\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.DELETE:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.TYPEOF:\n\t\t\tcase Token.VOID:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isCount(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.INC:\n\t\t\tcase Token.DEC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isUnaryOrCount(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.ADD:\n\t\t\tcase Token.SUB:\n\t\t\tcase Token.INC:\n\t\t\tcase Token.DEC:\n\t\t\tcase Token.NOT:\n\t\t\tcase Token.BIT_NOT:\n\t\t\tcase Token.DELETE:\n\t\t\tcase Token.AWAIT:\n\t\t\tcase Token.TYPEOF:\n\t\t\tcase Token.VOID:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isShift(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.SHL:\n\t\t\tcase Token.SAR:\n\t\t\tcase Token.SHR:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\tpublic static isStrictReservedWord(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.IMPLEMENTS:\n\t\t\tcase Token.INTERFACE:\n\t\t\tcase Token.LET:\n\t\t\tcase Token.PACKAGE:\n\t\t\tcase Token.PRIVATE:\n\t\t\tcase Token.PROTECTED:\n\t\t\tcase Token.PUBLIC:\n\t\t\tcase Token.STATIC:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isPipelineOperator(token: Token) {\n\t\tswitch (token) {\n\t\t\tcase Token.PIPELINE:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tpublic static isValidIdentifier(token: Token, mode: LanguageMode, isGenerator: boolean, disallowAwait: boolean) {\n\t\tif (Token.isInRangeIdentifierAndAsync(token)) return true;\n\t\tif (token == Token.AWAIT) return !disallowAwait;\n\t\tif (token == Token.YIELD) return !isGenerator;\n\t\treturn Token.isStrictReservedWord(token) && isSloppy(mode);\n\t}\n\n\tpublic static precedence(token: Token, acceptIN: boolean) {\n\t\tif (!acceptIN && Token.IN === token) {\n\t\t\treturn 0;\n\t\t}\n\t\treturn token.getPrecedence();\n\t}\n\n\tconstructor(private name: string, private precedence: number) { }\n\tgetName() {\n\t\treturn this.name;\n\t}\n\tgetPrecedence() {\n\t\treturn this.precedence;\n\t}\n\tequal(token: Token) {\n\t\treturn this === token || this.name === token.name;\n\t}\n}\n\nexport class TokenExpression {\n\tconstructor(public token: Token, public value?: ExpressionNode) { }\n\tgetValue<T extends ExpressionNode>(): T {\n\t\treturn this.value! as T;\n\t}\n\tisType(type: Token) {\n\t\treturn this.token === type;\n\t}\n\tisNotType(type: Token) {\n\t\treturn this.token !== type;\n\t}\n\n\ttest(func: (token: Token, value?: ExpressionNode) => boolean): boolean {\n\t\treturn func(this.token, this.value);\n\t}\n\ttoString(): string {\n\t\treturn JSON.stringify(this);\n\t}\n}\n"]}
|
package/visit/visitor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../../src/expressions/visit/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAclE,CAAC;AAEF,MAAM,cAAe,SAAQ,KAAK;CAEjC;AAID,MAAM,OAAO,iBAAiB;IAErB,OAAO,CAAC,IAAoB;QACnC,OAAQ,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"visitor.js","sourceRoot":"","sources":["../../../src/expressions/visit/visitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAclE,CAAC;AAEF,MAAM,cAAe,SAAQ,KAAK;CAEjC;AAID,MAAM,OAAO,iBAAiB;IAErB,OAAO,CAAC,IAAoB;QACnC,OAAQ,IAAI,CAAC,WAAwD,CAAC,IAAI,CAAC;IAC5E,CAAC;IAED,KAAK,CAAC,IAAoB,EAAE,eAAgC;QAC3D,MAAM,OAAO,GAAmB;YAC/B,KAAK;gBACJ,MAAM,IAAI,cAAc,CAAC,WAAW,CAAC,CAAC;YACvC,CAAC;SACD,CAAC;QACF,MAAM,SAAS,GAAkB,CAAC,UAAU,EAAE,EAAE;YAC/C,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;YAC/D,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,IAAI;YACH,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YACnD,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;SAC1C;QAAC,OAAO,KAAK,EAAE;YACf,IAAI,CAAC,CAAC,KAAK,YAAY,cAAc,CAAC,EAAE;gBACvC,MAAM,KAAK,CAAC;aACZ;SACD;IACF,CAAC;IAEO,mBAAmB,CAAC,IAAoB,EAAE,SAAwB;QACzE,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAE,CAAC;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE;YACX,OAAO;SACP;QACD,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxB,CAAC;CAED;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC","sourcesContent":["import { expressionTypes } from '../api/deserialize/type-store.js';\nimport { ExpressionNode, ExpressionNodConstructor, VisitNodeType } from '../api/expression.js';\n\nexport interface VisitorControl {\n\n\t/**\n\t * terminate the traversal\n\t */\n\tabort(): void;\n\n\t// /**\n\t// * indicate that the traversal need not continue any further down this subtree.\n\t// */\n\t// traverse(): void;\n};\n\nclass AbortException extends Error {\n\n}\n\nexport type VisitorCallback = (expression: ExpressionNode, type: string, control: VisitorControl) => void;\n\nexport class ExpressionVisitor {\n\n\tprivate getType(node: ExpressionNode): string {\n\t\treturn (node.constructor as ExpressionNodConstructor<ExpressionNode>).type;\n\t}\n\n\tvisit(node: ExpressionNode, visitorCallback: VisitorCallback): void {\n\t\tconst control: VisitorControl = {\n\t\t\tabort() {\n\t\t\t\tthrow new AbortException('terminate');\n\t\t\t}\n\t\t};\n\t\tconst visitNode: VisitNodeType = (expression) => {\n\t\t\tvisitorCallback(expression, this.getType(expression), control);\n\t\t\tthis.visitExpressionNode(expression, visitNode);\n\t\t};\n\t\ttry {\n\t\t\tvisitorCallback(node, this.getType(node), control);\n\t\t\tthis.visitExpressionNode(node, visitNode);\n\t\t} catch (abort) {\n\t\t\tif (!(abort instanceof AbortException)) {\n\t\t\t\tthrow abort;\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate visitExpressionNode(node: ExpressionNode, visitNode: VisitNodeType): void {\n\t\tconst classType = expressionTypes.get(this.getType(node))!;\n\t\tconst visit = classType.visit;\n\t\tif (!visit) {\n\t\t\treturn;\n\t\t}\n\t\tvisit(node, visitNode);\n\t}\n\n}\n\nexport const expressionVisitor = new ExpressionVisitor();\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../../../../src/expressions/api/module/app/program.ts"],"names":[],"mappings":";;AAMA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKhE,IAAa,OAAO,eAApB,MAAa,OAAQ,SAAQ,sBAAsB;IAQlD,YAAoB,UAA6B,EAAU,IAAsB;QAChF,KAAK,EAAE,CAAC;QADW,eAAU,GAAV,UAAU,CAAmB;QAAU,SAAI,GAAJ,IAAI,CAAkB;IAEjF,CAAC;IARD,MAAM,CAAC,QAAQ,CAAC,IAAa,EAAE,YAA8B;QAC5D,OAAO,IAAI,SAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,IAAa,EAAE,SAAwB;QACnD,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;IAID,cAAc,CAAC,SAAgC,IAAU,CAAC;IAC1D,GAAG,CAAC,KAAY,EAAE,KAAU;QAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IACzD,CAAC;IACD,GAAG,CAAC,KAAY;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,QAAe;QACzB,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC;IAC/D,CAAC;IACD,cAAc,CAAC,QAAe;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,QAAQ;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IACD,MAAM;QACL,OAAO;YACN,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;SACpD,CAAC;IACH,CAAC;CAED,CAAA;AAnCY,OAAO;IADnB,YAAY,CAAC,SAAS,CAAC;;GACX,OAAO,CAmCnB;SAnCY,OAAO","sourcesContent":["import type {\n\tExpressionEventPath, ExpressionNode,\n\tNodeDeserializer, VisitNodeType\n} from '../../expression.js';\nimport type { Scope, ScopeContext } from '../../../scope/scope.js';\nimport type { Stack } from '../../../scope/stack.js';\nimport { AbstractExpressionNode } from '../../abstract.js';\nimport { Deserializer } from '../../deserialize/deserialize.js';\n\nexport type ProgramSourceType = 'script' | 'module';\n\n@Deserializer('Program')\nexport class Program extends AbstractExpressionNode {\n\n\tstatic fromJSON(node: Program, deserializer: NodeDeserializer): Program {\n\t\treturn new Program(node.sourceType, node.body.map(deserializer));\n\t}\n\tstatic visit(node: Program, visitNode: VisitNodeType): void {\n\t\tnode.body.forEach(visitNode);\n\t}\n\tconstructor(private sourceType: ProgramSourceType, private body: ExpressionNode[]) {\n\t\tsuper();\n\t}\n\tshareVariables(scopeList: Scope<ScopeContext>[]): void { }\n\tset(stack: Stack, value: any): any {\n\t\tthrow new Error(`Program#set() has no implementation.`);\n\t}\n\tget(stack: Stack): any {\n\t\treturn this.body.forEach(statement => statement.get(stack));\n\t}\n\n\tdependency(computed?: true): ExpressionNode[] {\n\t\treturn this.body.flatMap(statement => statement.dependency());\n\t}\n\tdependencyPath(computed?: true): ExpressionEventPath[] {\n\t\treturn this.body.flatMap(statement => statement.dependencyPath());\n\t}\n\ttoString(): string {\n\t\treturn this.body.map(statement => statement.toString()).join('\\n');\n\t}\n\ttoJson(): object {\n\t\treturn {\n\t\t\tsourceType: this.sourceType,\n\t\t\tbody: this.body.map(statement => statement.toJSON())\n\t\t};\n\t}\n\n}\n"]}
|
package/v8/app.d.ts
DELETED
|
File without changes
|
package/v8/app.js
DELETED
package/v8/app.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/expressions/v8/app.ts"],"names":[],"mappings":"","sourcesContent":["// import type { CanDeclareExpression, ExpressionNode } from '../api/expression.js';\n// import { JavaScriptParser, PropertyKind, PropertyKindInfo } from './parser.js';\n// import { Token } from './token.js';\n// import { MetaProperty } from '../api/app/class.js';\n// import { FunctionKind } from '../api/definition/function.js';\n// import { Identifier, Literal } from '../api/definition/values.js';\n// import { AssignmentExpression } from '../api/operators/assignment.js';\n// import { VariableDeclarationNode, VariableNode } from '../api/statement/declarations/declares.js';\n\n\n// export type ClassInfo = {\n// \tisAnonymous: boolean;\n// \textends: ExpressionNode;\n// \thasSeenConstructor: boolean;\n// \thasStaticComputedNames: boolean;\n// \trequiresBrand: boolean;\n// \thasPrivateMethods: boolean,\n// \thasStaticPrivateMethods: boolean;\n// \tcomputedFieldCount: number;\n// \thasStaticElements: boolean;\n// };\n\n// export enum FunctionNameValidity {\n// \tFunctionNameIsStrictReserved = 'FunctionNameIsStrictReserved',\n// \tSkipFunctionNameCheck = 'SkipFunctionNameCheck',\n// \tFunctionNameValidityUnknown = 'FunctionNameValidityUnknown'\n// };\n\n// export enum AllowLabelledFunctionStatement {\n// \tAllowLabelledFunctionStatement = 'AllowLabelledFunctionStatement',\n// \tDisallowLabelledFunctionStatement = 'DisallowLabelledFunctionStatement',\n// };\n\n// export enum ParsingArrowHeadFlag {\n// \tCertainlyNotArrowHead = 'CertainlyNotArrowHead',\n// \tMaybeArrowHead = 'MaybeArrowHead'\n// };\n\n// export enum PropertyPosition {\n// \tObjectLiteral = 'ObjectLiteral',\n// \tClassLiteral = 'ClassLiteral'\n// }\n\n// const FUNCTIONS_TYPES: FunctionKind[][][] = [\n// \t[\n// \t\t// SubFunctionKind::kNormalFunction\n// \t\t[// is_generator=false\n// \t\t\tFunctionKind.NORMAL,\n// \t\t\tFunctionKind.ASYNC\n// \t\t],\n// \t\t[// is_generator=true\n// \t\t\tFunctionKind.GENERATOR,\n// \t\t\tFunctionKind.ASYNC_GENERATOR\n// \t\t],\n// \t],\n// \t[\n// \t\t// SubFunctionKind::kNonStaticMethod\n// \t\t[// is_generator=false\n// \t\t\tFunctionKind.CONCISE,\n// \t\t\tFunctionKind.ASYNC_CONCISE\n// \t\t],\n// \t\t[// is_generator=true\n// \t\t\tFunctionKind.CONCISE_GENERATOR,\n// \t\t\tFunctionKind.ASYNC_CONCISE_GENERATOR\n// \t\t],\n// \t],\n// \t[\n// \t\t// SubFunctionKind::kStaticMethod\n// \t\t[// is_generator=false\n// \t\t\tFunctionKind.STATIC_CONCISE,\n// \t\t\tFunctionKind.STATIC_ASYNC_CONCISE\n// \t\t],\n// \t\t[// is_generator=true\n// \t\t\tFunctionKind.STATIC_CONCISE_GENERATOR,\n// \t\t\tFunctionKind.STATIC_ASYNC_CONCISE_GENERATOR\n// \t\t],\n// \t]\n// ];\n\n// export enum SubFunctionKind {\n// \tNormalFunction,\n// \tNonStaticMethod,\n// \tStaticMethod,\n// }\n\n// export function functionKindForImpl(subFunctionKind: SubFunctionKind, isGenerator: boolean, isAsync: boolean): FunctionKind {\n// \treturn FUNCTIONS_TYPES[subFunctionKind as number][isGenerator ? 1 : 0][isAsync ? 1 : 0];\n// }\n\n// export class ParsePropertyInfo implements PropertyKindInfo {\n// \tname: string;\n// \tposition = PropertyPosition.ClassLiteral;\n// \tfuncFlag = FunctionKind.NORMAL;\n// \tkind = PropertyKind.NotSet;\n// \tisComputedName = false;\n// \tisPrivate = false;\n// \tisStatic = false;\n// \tisRest = false;\n\n// \tPropertyKindFromToken(token: Token): boolean {\n// \t\t// This returns true, setting the property kind, iff the given token is\n// \t\t// one which must occur after a property name, indicating that the\n// \t\t// previous token was in fact a name and not a modifier (like the \"get\" in\n// \t\t// \"get x\").\n// \t\tswitch (token) {\n// \t\t\tcase Token.COLON:\n// \t\t\t\tthis.kind = PropertyKind.Value;\n// \t\t\t\treturn true;\n// \t\t\tcase Token.COMMA:\n// \t\t\t\tthis.kind = PropertyKind.Shorthand;\n// \t\t\t\treturn true;\n// \t\t\tcase Token.R_CURLY:\n// \t\t\t\tthis.kind = PropertyKind.ShorthandOrClassField;\n// \t\t\t\treturn true;\n// \t\t\tcase Token.ASSIGN:\n// \t\t\t\tthis.kind = PropertyKind.Assign;\n// \t\t\t\treturn true;\n// \t\t\tcase Token.L_PARENTHESES:\n// \t\t\t\tthis.kind = PropertyKind.Method;\n// \t\t\t\treturn true;\n// \t\t\tcase Token.MUL:\n// \t\t\tcase Token.SEMICOLON:\n// \t\t\t\tthis.kind = PropertyKind.ClassField;\n// \t\t\t\treturn true;\n// \t\t\tdefault:\n// \t\t\t\tbreak;\n// \t\t}\n// \t\treturn false;\n// \t}\n\n// }\n// enum ObjectLiteralPropertyKind {\n// \tCONSTANT = 'CONSTANT',\t// Property with constant value (compile time).\n// \tCOMPUTED = 'COMPUTED',\t// Property with computed value (execution time).\n// \tMATERIALIZED_LITERAL = 'MATERIALIZED_LITERAL', // Property value is a materialized literal.\n// \tGETTER = 'GETTER',\n// \tSETTER = 'SETTER',\t\t// Property is an accessor function.\n// \tPROTOTYPE = 'PROTOTYPE',\t// Property is __proto__.\n// \tSPREAD = 'SPREAD'\n// }\n// export class ObjectLiteralProperty {\n// \tstatic Kind = ObjectLiteralPropertyKind;\n// }\n\n// enum ClassLiteralPropertyKind {\n// \tMETHOD = 'METHOD',\n// \tGETTER = 'GETTER',\n// \tSETTER = 'SETTER',\n// \tFIELD = 'FIELD'\n// }\n\n// export class ClassLiteralProperty {\n// \tstatic Kind = ClassLiteralPropertyKind;\n// }\n\n// function assertUnreachable(x: never): never {\n// \tthrow new Error(`Didn't expect to get here`);\n// }\n// export function classPropertyKindFor(kind: PropertyKind): ClassLiteralPropertyKind {\n// \tswitch (kind) {\n// \t\tcase PropertyKind.AccessorGetter:\n// \t\t\treturn ClassLiteralPropertyKind.GETTER;\n// \t\tcase PropertyKind.AccessorSetter:\n// \t\t\treturn ClassLiteralPropertyKind.SETTER;\n// \t\tcase PropertyKind.Method:\n// \t\t\treturn ClassLiteralPropertyKind.METHOD;\n// \t\tcase PropertyKind.ClassField:\n// \t\t\treturn ClassLiteralPropertyKind.FIELD;\n// \t}\n// \tthrow new Error(`unexpected property kind: ${kind}`);\n// }\n\n// export enum VariableMode {\n// \tConst = 'Const',\n// \tPrivateMethod = 'PrivateMethod',\n// \tPrivateGetterOnly = 'PrivateGetterOnly',\n// \tPrivateSetterOnly = 'PrivateSetterOnly'\n// }\n\n// export function getVariableMode(kind: ClassLiteralPropertyKind): VariableMode {\n// \tswitch (kind) {\n// \t\tcase ClassLiteralPropertyKind.FIELD:\n// \t\t\treturn VariableMode.Const;\n// \t\tcase ClassLiteralPropertyKind.METHOD:\n// \t\t\treturn VariableMode.PrivateMethod;\n// \t\tcase ClassLiteralPropertyKind.GETTER:\n// \t\t\treturn VariableMode.PrivateGetterOnly;\n// \t\tcase ClassLiteralPropertyKind.SETTER:\n// \t\t\treturn VariableMode.PrivateSetterOnly;\n// \t}\n// }\n\n// export class JavaScriptAppParser extends JavaScriptParser {\n// \tprotected parseNewTargetExpression(): ExpressionNode {\n// \t\tthis.consume(Token.PERIOD);\n// \t\tconst target: ExpressionNode = this.parsePropertyName();\n// \t\tif (target.toString() !== 'target') {\n// \t\t\tthrow new Error(this.errorMessage(`Expression (new.${target.toString()}) not supported.`));\n// \t\t}\n// \t\treturn MetaProperty.NewTarget;\n// \t}\n// \tprotected parseClassDeclaration(names: ExpressionNode[] | undefined, defaultExport: boolean): ExpressionNode {\n// \t\t// ClassDeclaration ::\n// \t\t// 'class' Identifier ('extends' LeftHandExpression)? '{' ClassBody '}'\n// \t\t// 'class' ('extends' LeftHandExpression)? '{' ClassBody '}'\n// \t\t//\n// \t\t// The anonymous form is allowed iff [default_export] is true.\n// \t\t//\n// \t\t// 'class' is expected to be consumed by the caller.\n// \t\t//\n// \t\t// A ClassDeclaration\n// \t\t//\n// \t\t// class C { ... }\n// \t\t//\n// \t\t// has the same semantics as:\n// \t\t//\n// \t\t// let C = class C { ... };\n// \t\t//\n// \t\t// so rewrite it as such.\n\n// \t\tconst nextToken = this.peek().token;\n// \t\tconst isStrictReserved = Token.isStrictReservedWord(nextToken);\n// \t\tlet name: ExpressionNode | undefined;\n// \t\tlet variableName: ExpressionNode | undefined;\n// \t\tif (defaultExport && (nextToken == Token.EXTENDS || nextToken == Token.L_CURLY)) {\n// \t\t\tname = new Literal('default');\n// \t\t\tvariableName = new Literal('.default');\n// \t\t} else {\n// \t\t\tname = this.parseIdentifier();\n// \t\t\tvariableName = name;\n// \t\t}\n// \t\tconst value = this.parseClassLiteral(name, isStrictReserved);\n// \t\treturn this.declareClass(variableName, value, names);\n// \t}\n// \tprotected parseClassLiteral(name: ExpressionNode | undefined, nameIsStrictReserved: boolean): ExpressionNode {\n// \t\tconst isAnonymous = !!!name;\n\n// \t\t// All parts of a ClassDeclaration and ClassExpression are strict code.\n// \t\tif (!isAnonymous) {\n// \t\t\tif (nameIsStrictReserved) {\n// \t\t\t\tthrow new Error(this.errorMessage(`Unexpected Strict Reserved class name`));\n// \t\t\t}\n// \t\t\tif (this.isEvalOrArguments(name!)) {\n// \t\t\t\tthrow new Error(this.errorMessage(`Strict Eval Arguments not allowed for class name`));\n// \t\t\t}\n// \t\t}\n\n// \t\t// ClassScope * class_scope = NewClassScope(scope(), is_anonymous);\n// \t\t// BlockState block_state(& scope_, class_scope);\n// \t\t// RaiseLanguageMode(LanguageMode.kStrict);\n\n// \t\t// BlockState object_literal_scope_state(& object_literal_scope_, nullptr);\n\n// \t\t// ClassInfo classInfo(this);\n// \t\t// classInfo.is_anonymous = is_anonymous;\n\n// \t\tconst classInfo = { isAnonymous, computedFieldCount: 0 } as ClassInfo;\n\n// \t\t// scope() -> set_start_position(class_token_pos);\n// \t\tif (this.check(Token.EXTENDS)) {\n// \t\t\t// ClassScope.HeritageParsingScope heritage(class_scope);\n// \t\t\t// FuncNameInferrerState fni_state(& fni_);\n// \t\t\t// ExpressionParsingScope scope(impl());\n// \t\t\tclassInfo.extends = this.parseLeftHandSideExpression();\n// \t\t\t// scope.ValidateExpression();\n// \t\t}\n\n// \t\tthis.expect(Token.L_CURLY);\n\n// \t\tconst hasExtends = !(classInfo.extends === undefined);\n\n// \t\tconst staticBlockList: ExpressionNode[] = [];\n// \t\tconst privateClassMemberList: ExpressionNode[] = [];\n// \t\tconst publicClassFieldList: ExpressionNode[] = [];\n// \t\tconst publicClassMethodList: ExpressionNode[] = [];\n\n// \t\twhile (this.peek().isNotType(Token.R_CURLY)) {\n// \t\t\tif (this.check(Token.SEMICOLON)) continue;\n\n// \t\t\t// Either we're parsing a `static { }` initialization block or a property.\n// \t\t\tif (this.peek().isType(Token.STATIC) && this.peekAhead().isType(Token.L_CURLY)) {\n// \t\t\t\tconst staticBlock = this.parseClassStaticBlock(classInfo);\n// \t\t\t\tstaticBlockList.push(staticBlock);\n// \t\t\t\tcontinue;\n// \t\t\t}\n\n// \t\t\t// FuncNameInferrerState fni_state(& fni_);\n// \t\t\t// If we haven't seen the constructor yet, it potentially is the next\n// \t\t\t// property.\n// \t\t\tlet isConstructor = !classInfo.hasSeenConstructor;\n// \t\t\tconst propInfo = new ParsePropertyInfo();\n// \t\t\tpropInfo.position = PropertyPosition.ClassLiteral;\n\n// \t\t\tconst property = this.parseClassPropertyDefinition(classInfo, propInfo, hasExtends);\n\n// \t\t\t// if (has_error()) return impl() -> FailureExpression();\n\n// \t\t\tconst propertyKind = classPropertyKindFor(propInfo.kind);\n// \t\t\tif (!classInfo.hasStaticComputedNames && propInfo.isStatic && propInfo.isComputedName) {\n// \t\t\t\tclassInfo.hasStaticComputedNames = true;\n// \t\t\t}\n// \t\t\tisConstructor &&= classInfo.hasSeenConstructor;\n\n// \t\t\tconst isField = propertyKind == ClassLiteralPropertyKind.FIELD;\n\n// \t\t\tif (propInfo.isPrivate) {\n// \t\t\t\tif (isConstructor) {\n// \t\t\t\t\tthrow new Error(this.errorMessage('private constructor is not allowed'));\n// \t\t\t\t}\n// \t\t\t\tclassInfo.requiresBrand ||= (!isField && !propInfo.isStatic);\n// \t\t\t\tconst isMethod = propertyKind == ClassLiteralPropertyKind.METHOD;\n// \t\t\t\tclassInfo.hasPrivateMethods ||= isMethod;\n// \t\t\t\tclassInfo.hasStaticPrivateMethods ||= isMethod && propInfo.isStatic;\n// \t\t\t\tconst privateClassMember = this.declarePrivateClassMember(propInfo.name, property, propertyKind, propInfo.isStatic, classInfo);\n// \t\t\t\tprivateClassMemberList.push(privateClassMember);\n// \t\t\t\tcontinue;\n// \t\t\t}\n\n// \t\t\tif (isField) {\n// \t\t\t\tif (propInfo.isComputedName) {\n// \t\t\t\t\tclassInfo.computedFieldCount++;\n// \t\t\t\t}\n// \t\t\t\tconst publicClassField = this.declarePublicClassField(property, propInfo.isStatic, propInfo.isComputedName, classInfo);\n// \t\t\t\tpublicClassFieldList.push(publicClassField);\n// \t\t\t\tcontinue;\n// \t\t\t}\n\n// \t\t\tconst publicClassMethod = this.declarePublicClassMethod(name, property, isConstructor, classInfo);\n// \t\t\tpublicClassMethodList.push(publicClassMethod);\n// \t\t}\n\n// \t\tthis.expect(Token.R_CURLY);\n// \t\t// int end_pos = end_position();\n// \t\t// class_scope -> set_end_position(end_pos);\n\n// \t\t// VariableProxy * unresolvable = class_scope -> ResolvePrivateNamesPartially();\n// \t\t// if (unresolvable != nullptr) {\n// \t\t// \timpl() -> ReportMessageAt(Scanner.Location(unresolvable -> position(),unresolvable -> position() + 1),\n// \t\t// \t\tMessageTemplate.kInvalidPrivateFieldResolution,\n// \t\t// \t\tunresolvable -> raw_name());\n// \t\t// \treturn impl() -> FailureExpression();\n// \t\t// }\n\n// \t\t// if (classInfo.requiresBrand) {\n// \t\t// \tclass_scope -> DeclareBrandVariable(ast_value_factory(), IsStaticFlag.kNotStatic, kNoSourcePosition);\n// \t\t// }\n\n// \t\t// if (class_scope -> needs_home_object()) {\n// \t\t// \tclassInfo.homeObjectVariable = class_scope -> DeclareHomeObjectVariable(ast_value_factory());\n// \t\t// \tclassInfo.staticHomeObjectVariable = class_scope -> DeclareStaticHomeObjectVariable(ast_value_factory());\n// \t\t// }\n\n// \t\t// bool should_save_class_variable_index = class_scope -> should_save_class_variable_index();\n// \t\t// if (!isAnonymous || should_save_class_variable_index) {\n// \t\t// \tthis.declareClassVariable(name, classInfo);\n// \t\t// \tif (should_save_class_variable_index) {\n// \t\t// \t\tclass_scope -> class_variable() -> set_is_used();\n// \t\t// \t\tclass_scope -> class_variable() -> ForceContextAllocation();\n// \t\t// \t}\n// \t\t// }\n// \t\treturn this.rewriteClassLiteral(name, classInfo);\n// \t}\n// \tprotected declarePublicClassMethod(name: ExpressionNode | undefined, property: ExpressionNode, isConstructor: boolean, classInfo: ClassInfo): ExpressionNode {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tprotected declarePublicClassField(property: ExpressionNode, isStatic: boolean, isComputedName: boolean, classInfo: ClassInfo): ExpressionNode {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tprotected inferFunctionName() {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tprotected declarePrivateClassMember(name: string, property: ExpressionNode, propertyKind: ClassLiteralPropertyKind, isStatic: boolean, classInfo: ClassInfo): ExpressionNode {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tprotected parseClassPropertyDefinition(classInfo: ClassInfo, propInfo: ParsePropertyInfo, hasExtends: boolean): ExpressionNode {\n// \t\tif (!classInfo) {\n// \t\t\tthrow new Error(this.errorMessage('class info is undefined'));\n// \t\t}\n// \t\tif (propInfo.position !== PropertyPosition.ClassLiteral) {\n// \t\t\tthrow new Error(this.errorMessage('expected property position ClassLiteral'));\n// \t\t}\n\n// \t\tconst nameToken = this.peek();\n// \t\tlet nameExpression: ExpressionNode;\n// \t\tif (nameToken.isType(Token.STATIC)) {\n// \t\t\tthis.consume(Token.STATIC);\n// \t\t\tif (this.peek().isType(Token.L_PARENTHESES)) {\n// \t\t\t\tpropInfo.kind = PropertyKind.Method;\n// \t\t\t\tnameExpression = this.parseIdentifier();\n// \t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n// \t\t\t} else if (this.peek().isType(Token.ASSIGN)\n// \t\t\t\t|| this.peek().isType(Token.SEMICOLON)\n// \t\t\t\t|| this.peek().isType(Token.R_BRACKETS)) {\n// \t\t\t\tnameExpression = this.parseIdentifier();\n// \t\t\t\tpropInfo.name = (nameExpression as Identifier).getName() as string;\n// \t\t\t} else {\n// \t\t\t\tpropInfo.isStatic = true;\n// \t\t\t\tnameExpression = this.parseProperty(propInfo);\n// \t\t\t}\n// \t\t} else {\n// \t\t\tnameExpression = this.parseProperty(propInfo);\n// \t\t}\n\n// \t\tswitch (propInfo.kind) {\n// \t\t\tcase PropertyKind.Assign:\n// \t\t\tcase PropertyKind.ClassField:\n// \t\t\tcase PropertyKind.ShorthandOrClassField:\n// \t\t\tcase PropertyKind.NotSet: {\n// \t\t\t\t// This case is a name followed by a\n// \t\t\t\t// name or other property. Here we have\n// \t\t\t\t// to assume that's an uninitialized\n// \t\t\t\t// field followed by a line break\n// \t\t\t\t// followed by a property, with ASI\n// \t\t\t\t// adding the semicolon. If not, there\n// \t\t\t\t// will be a syntax error after parsing\n// \t\t\t\t// the first name as an uninitialized\n// \t\t\t\t// field.\n// \t\t\t\tpropInfo.kind = PropertyKind.ClassField;\n\n// \t\t\t\t// if (!propInfo.isComputedName) {\n// \t\t\t\t// \tthis.checkClassFieldName(propInfo.name, propInfo.isStatic);\n// \t\t\t\t// }\n\n// \t\t\t\tconst initializer: ExpressionNode = this.parseMemberInitializer(classInfo, propInfo.isStatic);\n// \t\t\t\tthis.expectSemicolon();\n\n// \t\t\t\tconst result: ExpressionNode = this.newClassLiteralProperty(\n// \t\t\t\t\tnameExpression,\n// \t\t\t\t\tinitializer,\n// \t\t\t\t\tClassLiteralPropertyKind.FIELD,\n// \t\t\t\t\tpropInfo.isStatic,\n// \t\t\t\t\tpropInfo.isComputedName,\n// \t\t\t\t\tpropInfo.isPrivate\n// \t\t\t\t);\n// \t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n// \t\t\t\treturn result;\n// \t\t\t}\n// \t\t\tcase PropertyKind.Method: {\n// \t\t\t\t// MethodDefinition\n// \t\t\t\t// PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n// \t\t\t\t// '*' PropertyName '(' StrictFormalParameters ')' '{' FunctionBody '}'\n// \t\t\t\t// async PropertyName '(' StrictFormalParameters ')'\n// \t\t\t\t// '{' FunctionBody '}'\n// \t\t\t\t// async '*' PropertyName '(' StrictFormalParameters ')'\n// \t\t\t\t// '{' FunctionBody '}'\n\n// \t\t\t\t// if (!propInfo.isComputedName) {\n// \t\t\t\t// \tthis.checkClassMethodName(propInfo.name, PropertyKind.Method,propInfo.functionFlags, propInfo.isStatic,classInfo . hasSeenConstructor);\n// \t\t\t\t// }\n\n// \t\t\t\tlet kind: FunctionKind = this.methodKindFor(propInfo.isStatic, propInfo.funcFlag);\n\n// \t\t\t\tif (!propInfo.isStatic && propInfo.name.toString() === 'constructor') {\n// \t\t\t\t\tclassInfo.hasSeenConstructor = true;\n// \t\t\t\t\tkind = hasExtends ? FunctionKind.DERIVED_CONSTRUCTOR : FunctionKind.BASE_CONSTRUCTOR;\n// \t\t\t\t}\n\n// \t\t\t\tconst value = this.parseFunctionLiteral(\n// \t\t\t\t\tkind,\n// \t\t\t\t\tpropInfo.name\n// \t\t\t\t\t// ,kSkipFunctionNameCheck, kind, FunctionSyntaxKind.kAccessorOrMethod\n// \t\t\t\t);\n\n// \t\t\t\tClassLiteralPropertyT result = factory() -> NewClassLiteralProperty(\n// \t\t\t\t\tname_expression, value, ClassLiteralProperty.METHOD,\n// \t\t\t\t\tpropInfo.is_static, propInfo.is_computed_name,\n// \t\t\t\t\tpropInfo.is_private);\n// \t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name);\n// \t\t\t\treturn result;\n// \t\t\t}\n\n// \t\t\tcase PropertyKind.AccessorGetter:\n// \t\t\tcase PropertyKind.AccessorSetter: {\n// \t\t\t\tDCHECK_EQ(propInfo.function_flags, ParseFunctionFlag.kIsNormal);\n// \t\t\t\tbool is_get = propInfo.kind == PropertyKind.kAccessorGetter;\n\n// \t\t\t\tif (!propInfo.is_computed_name) {\n// \t\t\t\t\tCheckClassMethodName(propInfo.name, propInfo.kind,\n// \t\t\t\t\t\tParseFunctionFlag.kIsNormal, propInfo.is_static,\n// & class_info -> has_seen_constructor);\n// \t\t\t\t\t// Make sure the name expression is a string since we need a Name for\n// \t\t\t\t\t// Runtime_DefineAccessorPropertyUnchecked and since we can determine\n// \t\t\t\t\t// this statically we can skip the extra runtime check.\n// \t\t\t\t\tname_expression = factory() -> NewStringLiteral(\n// \t\t\t\t\t\tpropInfo.name, name_expression -> position());\n// \t\t\t\t}\n\n// \t\t\t\tlet kind: FunctionKind;\n// \t\t\t\tif (propInfo.is_static) {\n// \t\t\t\t\tkind = is_get ? FunctionKind.StaticGetterFunction\n// \t\t\t\t\t\t: FunctionKind.StaticSetterFunction;\n// \t\t\t\t} else {\n// \t\t\t\t\tkind = is_get ? FunctionKind.GetterFunction\n// \t\t\t\t\t\t: FunctionKind.SetterFunction;\n// \t\t\t\t}\n\n// \t\t\t\tFunctionLiteralT value = impl() -> ParseFunctionLiteral(\n// \t\t\t\t\tpropInfo.name, scanner() -> location(), kSkipFunctionNameCheck, kind,\n// \t\t\t\t\tname_token_position, FunctionSyntaxKind.kAccessorOrMethod,\n// \t\t\t\t\tlanguage_mode(), nullptr);\n\n// \t\t\t\tClassLiteralPropertyKind property_kind =\n// \t\t\t\t\tis_get ? ClassLiteralProperty.GETTER : ClassLiteralProperty.SETTER;\n// \t\t\t\tClassLiteralPropertyT result = factory() -> NewClassLiteralProperty(\n// \t\t\t\t\t\tname_expression, value, property_kind, propInfo.is_static,\n// \t\t\t\t\t\tpropInfo.is_computed_name, propInfo.is_private);\n// \t\t\t\tconst AstRawString* prefix =\n// \t\t\t\tis_get ? ast_value_factory() -> get_space_string()\n// \t\t\t\t\t: ast_value_factory() -> set_space_string();\n// \t\t\t\tthis.setFunctionNameFromPropertyName(result, propInfo.name, prefix);\n// \t\t\t\treturn result;\n// \t\t\t}\n// \t\t\tcase PropertyKind.Value:\n// \t\t\tcase PropertyKind.Shorthand:\n// \t\t\tcase PropertyKind.Spread:\n// \t\t\t\t// throw new Error(this.errorMessage('Report Unexpected Token'));\n// \t\t\t\treturn NullNode;\n// \t\t}\n// \t\tthrow new Error(this.errorMessage('UNREACHABLE'));\n// \t}\n// \tsetFunctionNameFromPropertyName(property: LiteralProperty, name: string, prefix?: string): void {\n// \t\t// Ignore \"__proto__\" as a name when it's being used to set the [[Prototype]]\n// \t\t// of an object literal.\n// \t\t// See ES #sec-__proto__-property-names-in-object-initializers.\n\n// \t\tif (property instanceof Identifier && property.getName() === '__proto__') {\n// \t\t\treturn;\n// \t\t}\n\n// \t\t// if (property -> IsPrototype() || has_error()) return;\n\n// \t\t// DCHECK(!property -> value() -> IsAnonymousFunctionDefinition() ||\n// \t\t// \tproperty -> kind() == ObjectLiteralProperty:: COMPUTED);\n\n// \t\t// SetFunctionNameFromPropertyName(static_cast < LiteralProperty *> (property), name,\n// \t\t// \tprefix);\n// \t}\n// \tprotected methodKindFor(isStatic: boolean, functionFlags: FunctionKind): FunctionKind {\n// \t\tconst isGenerator = functionFlags.includes('GENERATOR');\n// \t\tconst isAsync = functionFlags.includes('ASYNC');\n// \t\treturn functionKindForImpl(\n// \t\t\tisStatic ? SubFunctionKind.StaticMethod : SubFunctionKind.NonStaticMethod,\n// \t\t\tisGenerator,\n// \t\t\tisAsync\n// \t\t);\n// \t}\n// \tnewClassLiteralProperty(nameExpression: ExpressionNode, initializer: ExpressionNode, FIELD: ClassLiteralPropertyKind, isStatic: boolean, isComputedName: boolean, isPrivate: boolean): ExpressionNode {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tparseMemberInitializer(classInfo: ClassInfo, isStatic: boolean): ExpressionNode {\n// \t\tthrow new Error('Method not implemented.');\n// \t}\n// \tprotected parseClassStaticBlock(classInfo: ClassInfo): ExpressionNode {\n// \t\tthis.consume(Token.STATIC);\n// \t\t// Each static block has its own var and lexical scope, so make a new var\n// \t\t// block scope instead of using the synthetic members initializer function\n// \t\t// scope.\n// \t\tconst staticBlock = this.parseBlock();\n// \t\tclassInfo.hasStaticElements = true;\n// \t\treturn staticBlock;\n\n// \t}\n// \tprotected declareClass(variableName: ExpressionNode | undefined, value: ExpressionNode, names: ExpressionNode[] | undefined): ExpressionNode {\n// \t\tif (names && variableName) {\n// \t\t\tconst proxy = this.declareVariable(variableName, 'let');\n// \t\t\tnames.push(variableName);\n// \t\t\treturn new AssignmentExpression('=', proxy, value);\n// \t\t}\n// \t\treturn value;\n// \t}\n// \tprotected parseSuperExpression(): ExpressionNode {\n// \t\tthrow new Error(this.errorMessage('Expression (supper) not supported.'));\n// \t}\n// \tprotected parseImportExpressions(): ExpressionNode {\n// \t\tthrow new Error(this.errorMessage('Expression (import) not supported.'));\n// \t}\n// \tprotected declareVariable(name: ExpressionNode | undefined, mode: 'let' | 'const' | 'var') {\n// \t\tif (!name) {\n// \t\t\tthrow new Error(this.errorMessage('Variable name is undefined'));\n// \t\t}\n// \t\tswitch (mode) {\n// \t\t\tcase 'const':\n// \t\t\t\treturn new VariableDeclarationNode([new VariableNode(name as CanDeclareExpression)], 'const');\n// \t\t\tdefault:\n// \t\t\tcase 'var':\n// \t\t\t\treturn new VariableDeclarationNode([new VariableNode(name as CanDeclareExpression)], 'var');\n// \t\t\tcase 'let':\n// \t\t\t\treturn new VariableDeclarationNode([new VariableNode(name as CanDeclareExpression)], 'let');\n// \t\t}\n// \t}\n// }\n"]}
|