as-test 0.4.4 → 0.5.1
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/CHANGELOG.md +46 -0
- package/README.md +196 -82
- package/as-test.config.schema.json +137 -0
- package/assembly/coverage.ts +19 -0
- package/assembly/index.ts +172 -85
- package/assembly/src/expectation.ts +263 -199
- package/assembly/src/log.ts +1 -9
- package/assembly/src/suite.ts +61 -25
- package/assembly/src/tests.ts +2 -0
- package/assembly/util/wipc.ts +286 -0
- package/bin/build.js +86 -41
- package/bin/index.js +337 -68
- package/bin/init.js +441 -183
- package/bin/reporter.js +1 -1
- package/bin/reporters/default.js +379 -0
- package/bin/reporters/types.js +1 -0
- package/bin/run.js +882 -194
- package/bin/types.js +14 -7
- package/bin/util.js +54 -3
- package/package.json +34 -16
- package/transform/lib/builder.js +169 -169
- package/transform/lib/builder.js.map +1 -1
- package/transform/lib/coverage.js +47 -1
- package/transform/lib/coverage.js.map +1 -1
- package/transform/lib/index.js +70 -0
- package/transform/lib/index.js.map +1 -1
- package/transform/lib/location.js +20 -0
- package/transform/lib/location.js.map +1 -0
- package/transform/lib/log.js +118 -0
- package/transform/lib/log.js.map +1 -0
- package/transform/lib/mock.js +2 -2
- package/transform/lib/mock.js.map +1 -1
- package/transform/lib/util.js +3 -3
- package/transform/lib/util.js.map +1 -1
- package/.github/workflows/as-test.yml +0 -26
- package/.prettierrc +0 -3
- package/as-test.config.json +0 -19
- package/assembly/__tests__/array.spec.ts +0 -25
- package/assembly/__tests__/math.spec.ts +0 -16
- package/assembly/__tests__/mock.spec.ts +0 -22
- package/assembly/__tests__/mock.ts +0 -7
- package/assembly/__tests__/sleep.spec.ts +0 -28
- package/assembly/tsconfig.json +0 -97
- package/assets/img/screenshot.png +0 -0
- package/cli/build.ts +0 -117
- package/cli/index.ts +0 -190
- package/cli/init.ts +0 -247
- package/cli/reporter.ts +0 -1
- package/cli/run.ts +0 -286
- package/cli/tsconfig.json +0 -9
- package/cli/types.ts +0 -29
- package/cli/util.ts +0 -65
- package/run/package.json +0 -27
- package/tests/array.run.js +0 -7
- package/tests/math.run.js +0 -7
- package/tests/mock.run.js +0 -14
- package/tests/sleep.run.js +0 -7
- package/transform/src/builder.ts +0 -1474
- package/transform/src/coverage.ts +0 -580
- package/transform/src/index.ts +0 -73
- package/transform/src/linker.ts +0 -41
- package/transform/src/mock.ts +0 -163
- package/transform/src/range.ts +0 -12
- package/transform/src/types.ts +0 -35
- package/transform/src/util.ts +0 -81
- package/transform/src/visitor.ts +0 -744
- package/transform/tsconfig.json +0 -10
package/transform/lib/builder.js
CHANGED
|
@@ -7,7 +7,7 @@ function assert(isTruish, message = "assertion error") {
|
|
|
7
7
|
}
|
|
8
8
|
export class ASTBuilder extends Visitor {
|
|
9
9
|
static build(node) {
|
|
10
|
-
|
|
10
|
+
const builder = new ASTBuilder();
|
|
11
11
|
builder.visitNode(node);
|
|
12
12
|
return builder.finish();
|
|
13
13
|
}
|
|
@@ -17,7 +17,7 @@ export class ASTBuilder extends Visitor {
|
|
|
17
17
|
return this.visit(node);
|
|
18
18
|
}
|
|
19
19
|
visitSource(source) {
|
|
20
|
-
|
|
20
|
+
const statements = source.statements;
|
|
21
21
|
for (let i = 0, k = statements.length; i < k; ++i) {
|
|
22
22
|
this.visitNodeAndTerminate(statements[i]);
|
|
23
23
|
}
|
|
@@ -38,8 +38,8 @@ export class ASTBuilder extends Visitor {
|
|
|
38
38
|
}
|
|
39
39
|
visitTypeName(node) {
|
|
40
40
|
this.visitIdentifierExpression(node.identifier);
|
|
41
|
-
|
|
42
|
-
|
|
41
|
+
const sb = this.sb;
|
|
42
|
+
let current = node.next;
|
|
43
43
|
while (current) {
|
|
44
44
|
sb.push(".");
|
|
45
45
|
this.visitIdentifierExpression(current.identifier);
|
|
@@ -48,10 +48,10 @@ export class ASTBuilder extends Visitor {
|
|
|
48
48
|
}
|
|
49
49
|
visitNamedTypeNode(node) {
|
|
50
50
|
this.visitTypeName(node.name);
|
|
51
|
-
|
|
51
|
+
const typeArguments = node.typeArguments;
|
|
52
52
|
if (typeArguments) {
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
const numTypeArguments = typeArguments.length;
|
|
54
|
+
const sb = this.sb;
|
|
55
55
|
if (numTypeArguments) {
|
|
56
56
|
sb.push("<");
|
|
57
57
|
this.visitTypeNode(typeArguments[0]);
|
|
@@ -66,16 +66,16 @@ export class ASTBuilder extends Visitor {
|
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
68
|
visitFunctionTypeNode(node) {
|
|
69
|
-
|
|
70
|
-
|
|
69
|
+
const isNullable = node.isNullable;
|
|
70
|
+
const sb = this.sb;
|
|
71
71
|
sb.push(isNullable ? "((" : "(");
|
|
72
|
-
|
|
72
|
+
const explicitThisType = node.explicitThisType;
|
|
73
73
|
if (explicitThisType) {
|
|
74
74
|
sb.push("this: ");
|
|
75
75
|
this.visitTypeNode(explicitThisType);
|
|
76
76
|
}
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
const parameters = node.parameters;
|
|
78
|
+
const numParameters = parameters.length;
|
|
79
79
|
if (numParameters) {
|
|
80
80
|
if (explicitThisType)
|
|
81
81
|
sb.push(", ");
|
|
@@ -85,7 +85,7 @@ export class ASTBuilder extends Visitor {
|
|
|
85
85
|
this.serializeParameter(parameters[i]);
|
|
86
86
|
}
|
|
87
87
|
}
|
|
88
|
-
|
|
88
|
+
const returnType = node.returnType;
|
|
89
89
|
if (returnType) {
|
|
90
90
|
sb.push(") => ");
|
|
91
91
|
this.visitTypeNode(returnType);
|
|
@@ -98,12 +98,12 @@ export class ASTBuilder extends Visitor {
|
|
|
98
98
|
}
|
|
99
99
|
visitTypeParameter(node) {
|
|
100
100
|
this.visitIdentifierExpression(node.name);
|
|
101
|
-
|
|
101
|
+
const extendsType = node.extendsType;
|
|
102
102
|
if (extendsType) {
|
|
103
103
|
this.sb.push(" extends ");
|
|
104
104
|
this.visitTypeNode(extendsType);
|
|
105
105
|
}
|
|
106
|
-
|
|
106
|
+
const defaultType = node.defaultType;
|
|
107
107
|
if (defaultType) {
|
|
108
108
|
this.sb.push("=");
|
|
109
109
|
this.visitTypeNode(defaultType);
|
|
@@ -116,10 +116,10 @@ export class ASTBuilder extends Visitor {
|
|
|
116
116
|
this.sb.push(node.text);
|
|
117
117
|
}
|
|
118
118
|
visitArrayLiteralExpression(node) {
|
|
119
|
-
|
|
119
|
+
const sb = this.sb;
|
|
120
120
|
sb.push("[");
|
|
121
|
-
|
|
122
|
-
|
|
121
|
+
const elements = node.elementExpressions;
|
|
122
|
+
const numElements = elements.length;
|
|
123
123
|
if (numElements) {
|
|
124
124
|
let element = elements[0];
|
|
125
125
|
if (element)
|
|
@@ -134,10 +134,10 @@ export class ASTBuilder extends Visitor {
|
|
|
134
134
|
sb.push("]");
|
|
135
135
|
}
|
|
136
136
|
visitObjectLiteralExpression(node) {
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
137
|
+
const sb = this.sb;
|
|
138
|
+
const names = node.names;
|
|
139
|
+
const values = node.values;
|
|
140
|
+
const numElements = names.length;
|
|
141
141
|
assert(numElements == values.length);
|
|
142
142
|
if (numElements) {
|
|
143
143
|
sb.push("{\n");
|
|
@@ -148,8 +148,8 @@ export class ASTBuilder extends Visitor {
|
|
|
148
148
|
for (let i = 1; i < numElements; ++i) {
|
|
149
149
|
sb.push(",\n");
|
|
150
150
|
util.indent(sb, this.indentLevel);
|
|
151
|
-
|
|
152
|
-
|
|
151
|
+
const name = names[i];
|
|
152
|
+
const value = values[i];
|
|
153
153
|
if (name == value) {
|
|
154
154
|
this.visitNode(name);
|
|
155
155
|
}
|
|
@@ -168,7 +168,7 @@ export class ASTBuilder extends Visitor {
|
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
visitAssertionExpression(node) {
|
|
171
|
-
|
|
171
|
+
const sb = this.sb;
|
|
172
172
|
switch (node.assertionKind) {
|
|
173
173
|
case 0: {
|
|
174
174
|
sb.push("<");
|
|
@@ -200,7 +200,7 @@ export class ASTBuilder extends Visitor {
|
|
|
200
200
|
}
|
|
201
201
|
}
|
|
202
202
|
visitBinaryExpression(node) {
|
|
203
|
-
|
|
203
|
+
const sb = this.sb;
|
|
204
204
|
this.visitNode(node.left);
|
|
205
205
|
sb.push(" ");
|
|
206
206
|
sb.push(operatorTokenToString(node.operator));
|
|
@@ -212,9 +212,9 @@ export class ASTBuilder extends Visitor {
|
|
|
212
212
|
this.visitArguments(node.typeArguments, node.args);
|
|
213
213
|
}
|
|
214
214
|
visitArguments(typeArguments, args) {
|
|
215
|
-
|
|
215
|
+
const sb = this.sb;
|
|
216
216
|
if (typeArguments) {
|
|
217
|
-
|
|
217
|
+
const numTypeArguments = typeArguments.length;
|
|
218
218
|
if (numTypeArguments) {
|
|
219
219
|
sb.push("<");
|
|
220
220
|
this.visitTypeNode(typeArguments[0]);
|
|
@@ -228,7 +228,7 @@ export class ASTBuilder extends Visitor {
|
|
|
228
228
|
else {
|
|
229
229
|
sb.push("(");
|
|
230
230
|
}
|
|
231
|
-
|
|
231
|
+
const numArgs = args.length;
|
|
232
232
|
if (numArgs) {
|
|
233
233
|
this.visitNode(args[0]);
|
|
234
234
|
for (let i = 1; i < numArgs; ++i) {
|
|
@@ -239,28 +239,28 @@ export class ASTBuilder extends Visitor {
|
|
|
239
239
|
sb.push(")");
|
|
240
240
|
}
|
|
241
241
|
visitClassExpression(node) {
|
|
242
|
-
|
|
242
|
+
const declaration = node.declaration;
|
|
243
243
|
this.visitClassDeclaration(declaration);
|
|
244
244
|
}
|
|
245
245
|
visitCommaExpression(node) {
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
const expressions = node.expressions;
|
|
247
|
+
const numExpressions = expressions.length;
|
|
248
248
|
this.visitNode(expressions[0]);
|
|
249
|
-
|
|
249
|
+
const sb = this.sb;
|
|
250
250
|
for (let i = 1; i < numExpressions; ++i) {
|
|
251
251
|
sb.push(",");
|
|
252
252
|
this.visitNode(expressions[i]);
|
|
253
253
|
}
|
|
254
254
|
}
|
|
255
255
|
visitElementAccessExpression(node) {
|
|
256
|
-
|
|
256
|
+
const sb = this.sb;
|
|
257
257
|
this.visitNode(node.expression);
|
|
258
258
|
sb.push("[");
|
|
259
259
|
this.visitNode(node.elementExpression);
|
|
260
260
|
sb.push("]");
|
|
261
261
|
}
|
|
262
262
|
visitFunctionExpression(node) {
|
|
263
|
-
|
|
263
|
+
const declaration = node.declaration;
|
|
264
264
|
if (!declaration.arrowKind) {
|
|
265
265
|
if (declaration.name.text.length) {
|
|
266
266
|
this.sb.push("function ");
|
|
@@ -322,25 +322,25 @@ export class ASTBuilder extends Visitor {
|
|
|
322
322
|
this.sb.push(i64_to_string(node.value));
|
|
323
323
|
}
|
|
324
324
|
visitStringLiteral(str) {
|
|
325
|
-
|
|
325
|
+
const sb = this.sb;
|
|
326
326
|
sb.push('"');
|
|
327
327
|
this.visitRawString(str, 34);
|
|
328
328
|
sb.push('"');
|
|
329
329
|
}
|
|
330
330
|
visitRawString(str, quote) {
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
331
|
+
const sb = this.sb;
|
|
332
|
+
let off = 0;
|
|
333
|
+
let i = 0;
|
|
334
334
|
for (let k = str.length; i < k;) {
|
|
335
335
|
switch (str.charCodeAt(i)) {
|
|
336
336
|
case 0: {
|
|
337
337
|
if (i > off)
|
|
338
|
-
sb.push(str.substring(off,
|
|
338
|
+
sb.push(str.substring(off, i));
|
|
339
339
|
sb.push("\\0");
|
|
340
340
|
off = ++i;
|
|
341
341
|
break;
|
|
342
342
|
}
|
|
343
|
-
case
|
|
343
|
+
case 8: {
|
|
344
344
|
if (i > off)
|
|
345
345
|
sb.push(str.substring(off, i));
|
|
346
346
|
off = ++i;
|
|
@@ -438,10 +438,10 @@ export class ASTBuilder extends Visitor {
|
|
|
438
438
|
this.visitStringLiteral(node.value);
|
|
439
439
|
}
|
|
440
440
|
visitTemplateLiteralExpression(node) {
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
441
|
+
const sb = this.sb;
|
|
442
|
+
const tag = node.tag;
|
|
443
|
+
const parts = node.parts;
|
|
444
|
+
const expressions = node.expressions;
|
|
445
445
|
if (tag)
|
|
446
446
|
this.visitNode(tag);
|
|
447
447
|
sb.push("`");
|
|
@@ -456,7 +456,7 @@ export class ASTBuilder extends Visitor {
|
|
|
456
456
|
sb.push("`");
|
|
457
457
|
}
|
|
458
458
|
visitRegexpLiteralExpression(node) {
|
|
459
|
-
|
|
459
|
+
const sb = this.sb;
|
|
460
460
|
sb.push("/");
|
|
461
461
|
sb.push(node.pattern);
|
|
462
462
|
sb.push("/");
|
|
@@ -468,7 +468,7 @@ export class ASTBuilder extends Visitor {
|
|
|
468
468
|
this.visitArguments(node.typeArguments, node.args);
|
|
469
469
|
}
|
|
470
470
|
visitParenthesizedExpression(node) {
|
|
471
|
-
|
|
471
|
+
const sb = this.sb;
|
|
472
472
|
sb.push("(");
|
|
473
473
|
this.visitNode(node.expression);
|
|
474
474
|
sb.push(")");
|
|
@@ -479,7 +479,7 @@ export class ASTBuilder extends Visitor {
|
|
|
479
479
|
this.visitIdentifierExpression(node.property);
|
|
480
480
|
}
|
|
481
481
|
visitTernaryExpression(node) {
|
|
482
|
-
|
|
482
|
+
const sb = this.sb;
|
|
483
483
|
this.visitNode(node.condition);
|
|
484
484
|
sb.push(" ? ");
|
|
485
485
|
this.visitNode(node.ifThen);
|
|
@@ -510,15 +510,15 @@ export class ASTBuilder extends Visitor {
|
|
|
510
510
|
}
|
|
511
511
|
visitNodeAndTerminate(node) {
|
|
512
512
|
this.visitNode(node);
|
|
513
|
-
|
|
513
|
+
const sb = this.sb;
|
|
514
514
|
if (!sb.length ||
|
|
515
515
|
node.kind == 47 ||
|
|
516
516
|
node.kind == 38) {
|
|
517
517
|
sb.push(";\n");
|
|
518
518
|
}
|
|
519
519
|
else {
|
|
520
|
-
|
|
521
|
-
|
|
520
|
+
const last = sb[sb.length - 1];
|
|
521
|
+
const lastCharPos = last.length - 1;
|
|
522
522
|
if (lastCharPos >= 0 &&
|
|
523
523
|
(last.charCodeAt(lastCharPos) == 125 ||
|
|
524
524
|
last.charCodeAt(lastCharPos) == 59)) {
|
|
@@ -530,12 +530,12 @@ export class ASTBuilder extends Visitor {
|
|
|
530
530
|
}
|
|
531
531
|
}
|
|
532
532
|
visitBlockStatement(node) {
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
533
|
+
const sb = this.sb;
|
|
534
|
+
const statements = node.statements;
|
|
535
|
+
const numStatements = statements.length;
|
|
536
536
|
if (numStatements) {
|
|
537
537
|
sb.push("{\n");
|
|
538
|
-
|
|
538
|
+
const indentLevel = ++this.indentLevel;
|
|
539
539
|
for (let i = 0; i < numStatements; ++i) {
|
|
540
540
|
util.indent(sb, indentLevel);
|
|
541
541
|
this.visitNodeAndTerminate(statements[i]);
|
|
@@ -548,7 +548,7 @@ export class ASTBuilder extends Visitor {
|
|
|
548
548
|
}
|
|
549
549
|
}
|
|
550
550
|
visitBreakStatement(node) {
|
|
551
|
-
|
|
551
|
+
const label = node.label;
|
|
552
552
|
if (label) {
|
|
553
553
|
this.sb.push("break ");
|
|
554
554
|
this.visitIdentifierExpression(label);
|
|
@@ -558,7 +558,7 @@ export class ASTBuilder extends Visitor {
|
|
|
558
558
|
}
|
|
559
559
|
}
|
|
560
560
|
visitContinueStatement(node) {
|
|
561
|
-
|
|
561
|
+
const label = node.label;
|
|
562
562
|
if (label) {
|
|
563
563
|
this.sb.push("continue ");
|
|
564
564
|
this.visitIdentifierExpression(label);
|
|
@@ -568,13 +568,13 @@ export class ASTBuilder extends Visitor {
|
|
|
568
568
|
}
|
|
569
569
|
}
|
|
570
570
|
visitClassDeclaration(node, isDefault = false) {
|
|
571
|
-
|
|
571
|
+
const decorators = node.decorators;
|
|
572
572
|
if (decorators) {
|
|
573
573
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
574
574
|
this.serializeDecorator(decorators[i]);
|
|
575
575
|
}
|
|
576
576
|
}
|
|
577
|
-
|
|
577
|
+
const sb = this.sb;
|
|
578
578
|
if (isDefault) {
|
|
579
579
|
sb.push("export default ");
|
|
580
580
|
}
|
|
@@ -590,7 +590,7 @@ export class ASTBuilder extends Visitor {
|
|
|
590
590
|
else {
|
|
591
591
|
sb.push("class");
|
|
592
592
|
}
|
|
593
|
-
|
|
593
|
+
const typeParameters = node.typeParameters;
|
|
594
594
|
if (typeParameters != null && typeParameters.length > 0) {
|
|
595
595
|
sb.push("<");
|
|
596
596
|
this.visitTypeParameter(typeParameters[0]);
|
|
@@ -600,14 +600,14 @@ export class ASTBuilder extends Visitor {
|
|
|
600
600
|
}
|
|
601
601
|
sb.push(">");
|
|
602
602
|
}
|
|
603
|
-
|
|
603
|
+
const extendsType = node.extendsType;
|
|
604
604
|
if (extendsType) {
|
|
605
605
|
sb.push(" extends ");
|
|
606
606
|
this.visitTypeNode(extendsType);
|
|
607
607
|
}
|
|
608
|
-
|
|
608
|
+
const implementsTypes = node.implementsTypes;
|
|
609
609
|
if (implementsTypes) {
|
|
610
|
-
|
|
610
|
+
const numImplementsTypes = implementsTypes.length;
|
|
611
611
|
if (numImplementsTypes) {
|
|
612
612
|
sb.push(" implements ");
|
|
613
613
|
this.visitTypeNode(implementsTypes[0]);
|
|
@@ -617,18 +617,18 @@ export class ASTBuilder extends Visitor {
|
|
|
617
617
|
}
|
|
618
618
|
}
|
|
619
619
|
}
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
620
|
+
const indexSignature = node.indexSignature;
|
|
621
|
+
const members = node.members;
|
|
622
|
+
const numMembers = members.length;
|
|
623
623
|
if (indexSignature !== null || numMembers) {
|
|
624
624
|
sb.push(" {\n");
|
|
625
|
-
|
|
625
|
+
const indentLevel = ++this.indentLevel;
|
|
626
626
|
if (indexSignature) {
|
|
627
627
|
util.indent(sb, indentLevel);
|
|
628
628
|
this.visitNodeAndTerminate(indexSignature);
|
|
629
629
|
}
|
|
630
630
|
for (let i = 0, k = members.length; i < k; ++i) {
|
|
631
|
-
|
|
631
|
+
const member = members[i];
|
|
632
632
|
if (member.kind != 54 ||
|
|
633
633
|
member.parameterIndex < 0) {
|
|
634
634
|
util.indent(sb, indentLevel);
|
|
@@ -643,7 +643,7 @@ export class ASTBuilder extends Visitor {
|
|
|
643
643
|
}
|
|
644
644
|
}
|
|
645
645
|
visitDoStatement(node) {
|
|
646
|
-
|
|
646
|
+
const sb = this.sb;
|
|
647
647
|
sb.push("do ");
|
|
648
648
|
this.visitNode(node.body);
|
|
649
649
|
if (node.body.kind == 30) {
|
|
@@ -656,10 +656,10 @@ export class ASTBuilder extends Visitor {
|
|
|
656
656
|
this.visitNode(node.condition);
|
|
657
657
|
sb.push(")");
|
|
658
658
|
}
|
|
659
|
-
visitEmptyStatement(
|
|
659
|
+
visitEmptyStatement(_node) {
|
|
660
660
|
}
|
|
661
661
|
visitEnumDeclaration(node, isDefault = false) {
|
|
662
|
-
|
|
662
|
+
const sb = this.sb;
|
|
663
663
|
if (isDefault) {
|
|
664
664
|
sb.push("export default ");
|
|
665
665
|
}
|
|
@@ -670,11 +670,11 @@ export class ASTBuilder extends Visitor {
|
|
|
670
670
|
sb.push("const ");
|
|
671
671
|
sb.push("enum ");
|
|
672
672
|
this.visitIdentifierExpression(node.name);
|
|
673
|
-
|
|
674
|
-
|
|
673
|
+
const values = node.values;
|
|
674
|
+
const numValues = values.length;
|
|
675
675
|
if (numValues) {
|
|
676
676
|
sb.push(" {\n");
|
|
677
|
-
|
|
677
|
+
const indentLevel = ++this.indentLevel;
|
|
678
678
|
util.indent(sb, indentLevel);
|
|
679
679
|
this.visitEnumValueDeclaration(node.values[0]);
|
|
680
680
|
for (let i = 1; i < numValues; ++i) {
|
|
@@ -692,14 +692,14 @@ export class ASTBuilder extends Visitor {
|
|
|
692
692
|
}
|
|
693
693
|
visitEnumValueDeclaration(node) {
|
|
694
694
|
this.visitIdentifierExpression(node.name);
|
|
695
|
-
|
|
695
|
+
const initializer = node.initializer;
|
|
696
696
|
if (initializer) {
|
|
697
697
|
this.sb.push(" = ");
|
|
698
698
|
this.visitNode(initializer);
|
|
699
699
|
}
|
|
700
700
|
}
|
|
701
701
|
visitExportImportStatement(node) {
|
|
702
|
-
|
|
702
|
+
const sb = this.sb;
|
|
703
703
|
sb.push("export import ");
|
|
704
704
|
this.visitIdentifierExpression(node.externalName);
|
|
705
705
|
sb.push(" = ");
|
|
@@ -713,18 +713,18 @@ export class ASTBuilder extends Visitor {
|
|
|
713
713
|
}
|
|
714
714
|
}
|
|
715
715
|
visitExportStatement(node) {
|
|
716
|
-
|
|
716
|
+
const sb = this.sb;
|
|
717
717
|
if (node.isDeclare) {
|
|
718
718
|
sb.push("declare ");
|
|
719
719
|
}
|
|
720
|
-
|
|
720
|
+
const members = node.members;
|
|
721
721
|
if (members == null) {
|
|
722
722
|
sb.push("export *");
|
|
723
723
|
}
|
|
724
724
|
else if (members.length > 0) {
|
|
725
|
-
|
|
725
|
+
const numMembers = members.length;
|
|
726
726
|
sb.push("export {\n");
|
|
727
|
-
|
|
727
|
+
const indentLevel = ++this.indentLevel;
|
|
728
728
|
util.indent(sb, indentLevel);
|
|
729
729
|
this.visitExportMember(members[0]);
|
|
730
730
|
for (let i = 1; i < numMembers; ++i) {
|
|
@@ -738,7 +738,7 @@ export class ASTBuilder extends Visitor {
|
|
|
738
738
|
else {
|
|
739
739
|
sb.push("export {}");
|
|
740
740
|
}
|
|
741
|
-
|
|
741
|
+
const path = node.path;
|
|
742
742
|
if (path) {
|
|
743
743
|
sb.push(" from ");
|
|
744
744
|
this.visitStringLiteralExpression(path);
|
|
@@ -746,7 +746,7 @@ export class ASTBuilder extends Visitor {
|
|
|
746
746
|
sb.push(";");
|
|
747
747
|
}
|
|
748
748
|
visitExportDefaultStatement(node) {
|
|
749
|
-
|
|
749
|
+
const declaration = node.declaration;
|
|
750
750
|
switch (declaration.kind) {
|
|
751
751
|
case 52: {
|
|
752
752
|
this.visitEnumDeclaration(declaration, true);
|
|
@@ -776,7 +776,7 @@ export class ASTBuilder extends Visitor {
|
|
|
776
776
|
this.visitNode(node.expression);
|
|
777
777
|
}
|
|
778
778
|
visitFieldDeclaration(node) {
|
|
779
|
-
|
|
779
|
+
const decorators = node.decorators;
|
|
780
780
|
if (decorators) {
|
|
781
781
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
782
782
|
this.serializeDecorator(decorators[i]);
|
|
@@ -784,29 +784,29 @@ export class ASTBuilder extends Visitor {
|
|
|
784
784
|
}
|
|
785
785
|
this.serializeAccessModifiers(node);
|
|
786
786
|
this.visitIdentifierExpression(node.name);
|
|
787
|
-
|
|
787
|
+
const sb = this.sb;
|
|
788
788
|
if (node.flags & 16384) {
|
|
789
789
|
sb.push("!");
|
|
790
790
|
}
|
|
791
|
-
|
|
791
|
+
const type = node.type;
|
|
792
792
|
if (type) {
|
|
793
793
|
sb.push(": ");
|
|
794
794
|
this.visitTypeNode(type);
|
|
795
795
|
}
|
|
796
|
-
|
|
796
|
+
const initializer = node.initializer;
|
|
797
797
|
if (initializer) {
|
|
798
798
|
sb.push(" = ");
|
|
799
799
|
this.visitNode(initializer);
|
|
800
800
|
}
|
|
801
801
|
}
|
|
802
802
|
visitForStatement(node) {
|
|
803
|
-
|
|
803
|
+
const sb = this.sb;
|
|
804
804
|
sb.push("for (");
|
|
805
|
-
|
|
805
|
+
const initializer = node.initializer;
|
|
806
806
|
if (initializer) {
|
|
807
807
|
this.visitNode(initializer);
|
|
808
808
|
}
|
|
809
|
-
|
|
809
|
+
const condition = node.condition;
|
|
810
810
|
if (condition) {
|
|
811
811
|
sb.push("; ");
|
|
812
812
|
this.visitNode(condition);
|
|
@@ -814,7 +814,7 @@ export class ASTBuilder extends Visitor {
|
|
|
814
814
|
else {
|
|
815
815
|
sb.push(";");
|
|
816
816
|
}
|
|
817
|
-
|
|
817
|
+
const incrementor = node.incrementor;
|
|
818
818
|
if (incrementor) {
|
|
819
819
|
sb.push("; ");
|
|
820
820
|
this.visitNode(incrementor);
|
|
@@ -826,7 +826,7 @@ export class ASTBuilder extends Visitor {
|
|
|
826
826
|
this.visitNode(node.body);
|
|
827
827
|
}
|
|
828
828
|
visitForOfStatement(node) {
|
|
829
|
-
|
|
829
|
+
const sb = this.sb;
|
|
830
830
|
sb.push("for (");
|
|
831
831
|
this.visitNode(node.variable);
|
|
832
832
|
sb.push(" of ");
|
|
@@ -835,8 +835,8 @@ export class ASTBuilder extends Visitor {
|
|
|
835
835
|
this.visitNode(node.body);
|
|
836
836
|
}
|
|
837
837
|
visitFunctionDeclaration(node, isDefault = false) {
|
|
838
|
-
|
|
839
|
-
|
|
838
|
+
const sb = this.sb;
|
|
839
|
+
const decorators = node.decorators;
|
|
840
840
|
if (decorators) {
|
|
841
841
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
842
842
|
this.serializeDecorator(decorators[i]);
|
|
@@ -858,12 +858,12 @@ export class ASTBuilder extends Visitor {
|
|
|
858
858
|
this.visitFunctionCommon(node);
|
|
859
859
|
}
|
|
860
860
|
visitFunctionCommon(node) {
|
|
861
|
-
|
|
861
|
+
const sb = this.sb;
|
|
862
862
|
this.visitIdentifierExpression(node.name);
|
|
863
|
-
|
|
864
|
-
|
|
863
|
+
const signature = node.signature;
|
|
864
|
+
const typeParameters = node.typeParameters;
|
|
865
865
|
if (typeParameters) {
|
|
866
|
-
|
|
866
|
+
const numTypeParameters = typeParameters.length;
|
|
867
867
|
if (numTypeParameters) {
|
|
868
868
|
sb.push("<");
|
|
869
869
|
this.visitTypeParameter(typeParameters[0]);
|
|
@@ -875,16 +875,16 @@ export class ASTBuilder extends Visitor {
|
|
|
875
875
|
}
|
|
876
876
|
}
|
|
877
877
|
if (node.arrowKind == 2) {
|
|
878
|
-
|
|
878
|
+
const parameters = signature.parameters;
|
|
879
879
|
assert(parameters.length == 1);
|
|
880
880
|
assert(!signature.explicitThisType);
|
|
881
881
|
this.serializeParameter(parameters[0]);
|
|
882
882
|
}
|
|
883
883
|
else {
|
|
884
884
|
sb.push("(");
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
885
|
+
const parameters = signature.parameters;
|
|
886
|
+
const numParameters = parameters.length;
|
|
887
|
+
const explicitThisType = signature.explicitThisType;
|
|
888
888
|
if (explicitThisType) {
|
|
889
889
|
sb.push("this: ");
|
|
890
890
|
this.visitTypeNode(explicitThisType);
|
|
@@ -899,8 +899,8 @@ export class ASTBuilder extends Visitor {
|
|
|
899
899
|
}
|
|
900
900
|
}
|
|
901
901
|
}
|
|
902
|
-
|
|
903
|
-
|
|
902
|
+
const body = node.body;
|
|
903
|
+
const returnType = signature.returnType;
|
|
904
904
|
if (node.arrowKind) {
|
|
905
905
|
if (body) {
|
|
906
906
|
if (node.arrowKind == 2) {
|
|
@@ -940,16 +940,16 @@ export class ASTBuilder extends Visitor {
|
|
|
940
940
|
}
|
|
941
941
|
}
|
|
942
942
|
visitIfStatement(node) {
|
|
943
|
-
|
|
943
|
+
const sb = this.sb;
|
|
944
944
|
sb.push("if (");
|
|
945
945
|
this.visitNode(node.condition);
|
|
946
946
|
sb.push(") ");
|
|
947
|
-
|
|
947
|
+
const ifTrue = node.ifTrue;
|
|
948
948
|
this.visitNode(ifTrue);
|
|
949
949
|
if (ifTrue.kind != 30) {
|
|
950
950
|
sb.push(";\n");
|
|
951
951
|
}
|
|
952
|
-
|
|
952
|
+
const ifFalse = node.ifFalse;
|
|
953
953
|
if (ifFalse) {
|
|
954
954
|
if (ifTrue.kind == 30) {
|
|
955
955
|
sb.push(" else ");
|
|
@@ -961,8 +961,8 @@ export class ASTBuilder extends Visitor {
|
|
|
961
961
|
}
|
|
962
962
|
}
|
|
963
963
|
visitImportDeclaration(node) {
|
|
964
|
-
|
|
965
|
-
|
|
964
|
+
const externalName = node.foreignName;
|
|
965
|
+
const name = node.name;
|
|
966
966
|
this.visitIdentifierExpression(externalName);
|
|
967
967
|
if (externalName.text != name.text) {
|
|
968
968
|
this.sb.push(" as ");
|
|
@@ -970,15 +970,15 @@ export class ASTBuilder extends Visitor {
|
|
|
970
970
|
}
|
|
971
971
|
}
|
|
972
972
|
visitImportStatement(node) {
|
|
973
|
-
|
|
973
|
+
const sb = this.sb;
|
|
974
974
|
sb.push("import ");
|
|
975
|
-
|
|
976
|
-
|
|
975
|
+
const declarations = node.declarations;
|
|
976
|
+
const namespaceName = node.namespaceName;
|
|
977
977
|
if (declarations) {
|
|
978
|
-
|
|
978
|
+
const numDeclarations = declarations.length;
|
|
979
979
|
if (numDeclarations) {
|
|
980
980
|
sb.push("{\n");
|
|
981
|
-
|
|
981
|
+
const indentLevel = ++this.indentLevel;
|
|
982
982
|
util.indent(sb, indentLevel);
|
|
983
983
|
this.visitImportDeclaration(declarations[0]);
|
|
984
984
|
for (let i = 1; i < numDeclarations; ++i) {
|
|
@@ -1001,20 +1001,20 @@ export class ASTBuilder extends Visitor {
|
|
|
1001
1001
|
this.visitStringLiteralExpression(node.path);
|
|
1002
1002
|
}
|
|
1003
1003
|
visitIndexSignature(node) {
|
|
1004
|
-
|
|
1004
|
+
const sb = this.sb;
|
|
1005
1005
|
sb.push("[key: ");
|
|
1006
1006
|
this.visitTypeNode(node.keyType);
|
|
1007
1007
|
sb.push("]: ");
|
|
1008
1008
|
this.visitTypeNode(node.valueType);
|
|
1009
1009
|
}
|
|
1010
1010
|
visitInterfaceDeclaration(node, isDefault = false) {
|
|
1011
|
-
|
|
1011
|
+
const decorators = node.decorators;
|
|
1012
1012
|
if (decorators) {
|
|
1013
1013
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
1014
1014
|
this.serializeDecorator(decorators[i]);
|
|
1015
1015
|
}
|
|
1016
1016
|
}
|
|
1017
|
-
|
|
1017
|
+
const sb = this.sb;
|
|
1018
1018
|
if (isDefault) {
|
|
1019
1019
|
sb.push("export default ");
|
|
1020
1020
|
}
|
|
@@ -1023,7 +1023,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1023
1023
|
}
|
|
1024
1024
|
sb.push("interface ");
|
|
1025
1025
|
this.visitIdentifierExpression(node.name);
|
|
1026
|
-
|
|
1026
|
+
const typeParameters = node.typeParameters;
|
|
1027
1027
|
if (typeParameters != null && typeParameters.length > 0) {
|
|
1028
1028
|
sb.push("<");
|
|
1029
1029
|
this.visitTypeParameter(typeParameters[0]);
|
|
@@ -1033,14 +1033,14 @@ export class ASTBuilder extends Visitor {
|
|
|
1033
1033
|
}
|
|
1034
1034
|
sb.push(">");
|
|
1035
1035
|
}
|
|
1036
|
-
|
|
1036
|
+
const extendsType = node.extendsType;
|
|
1037
1037
|
if (extendsType) {
|
|
1038
1038
|
sb.push(" extends ");
|
|
1039
1039
|
this.visitTypeNode(extendsType);
|
|
1040
1040
|
}
|
|
1041
1041
|
sb.push(" {\n");
|
|
1042
|
-
|
|
1043
|
-
|
|
1042
|
+
const indentLevel = ++this.indentLevel;
|
|
1043
|
+
const members = node.members;
|
|
1044
1044
|
for (let i = 0, k = members.length; i < k; ++i) {
|
|
1045
1045
|
util.indent(sb, indentLevel);
|
|
1046
1046
|
this.visitNodeAndTerminate(members[i]);
|
|
@@ -1049,7 +1049,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1049
1049
|
sb.push("}");
|
|
1050
1050
|
}
|
|
1051
1051
|
visitMethodDeclaration(node) {
|
|
1052
|
-
|
|
1052
|
+
const decorators = node.decorators;
|
|
1053
1053
|
if (decorators) {
|
|
1054
1054
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
1055
1055
|
this.serializeDecorator(decorators[i]);
|
|
@@ -1065,13 +1065,13 @@ export class ASTBuilder extends Visitor {
|
|
|
1065
1065
|
this.visitFunctionCommon(node);
|
|
1066
1066
|
}
|
|
1067
1067
|
visitNamespaceDeclaration(node, isDefault = false) {
|
|
1068
|
-
|
|
1068
|
+
const decorators = node.decorators;
|
|
1069
1069
|
if (decorators) {
|
|
1070
1070
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
1071
1071
|
this.serializeDecorator(decorators[i]);
|
|
1072
1072
|
}
|
|
1073
1073
|
}
|
|
1074
|
-
|
|
1074
|
+
const sb = this.sb;
|
|
1075
1075
|
if (isDefault) {
|
|
1076
1076
|
sb.push("export default ");
|
|
1077
1077
|
}
|
|
@@ -1080,11 +1080,11 @@ export class ASTBuilder extends Visitor {
|
|
|
1080
1080
|
}
|
|
1081
1081
|
sb.push("namespace ");
|
|
1082
1082
|
this.visitIdentifierExpression(node.name);
|
|
1083
|
-
|
|
1084
|
-
|
|
1083
|
+
const members = node.members;
|
|
1084
|
+
const numMembers = members.length;
|
|
1085
1085
|
if (numMembers) {
|
|
1086
1086
|
sb.push(" {\n");
|
|
1087
|
-
|
|
1087
|
+
const indentLevel = ++this.indentLevel;
|
|
1088
1088
|
for (let i = 0, k = members.length; i < k; ++i) {
|
|
1089
1089
|
util.indent(sb, indentLevel);
|
|
1090
1090
|
this.visitNodeAndTerminate(members[i]);
|
|
@@ -1097,7 +1097,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1097
1097
|
}
|
|
1098
1098
|
}
|
|
1099
1099
|
visitReturnStatement(node) {
|
|
1100
|
-
|
|
1100
|
+
const value = node.value;
|
|
1101
1101
|
if (value) {
|
|
1102
1102
|
this.sb.push("return ");
|
|
1103
1103
|
this.visitNode(value);
|
|
@@ -1106,18 +1106,18 @@ export class ASTBuilder extends Visitor {
|
|
|
1106
1106
|
this.sb.push("return");
|
|
1107
1107
|
}
|
|
1108
1108
|
}
|
|
1109
|
-
visitTrueExpression(
|
|
1109
|
+
visitTrueExpression(_node) {
|
|
1110
1110
|
this.sb.push("true");
|
|
1111
1111
|
}
|
|
1112
|
-
visitFalseExpression(
|
|
1112
|
+
visitFalseExpression(_node) {
|
|
1113
1113
|
this.sb.push("false");
|
|
1114
1114
|
}
|
|
1115
|
-
visitNullExpression(
|
|
1115
|
+
visitNullExpression(_node) {
|
|
1116
1116
|
this.sb.push("null");
|
|
1117
1117
|
}
|
|
1118
1118
|
visitSwitchCase(node) {
|
|
1119
|
-
|
|
1120
|
-
|
|
1119
|
+
const sb = this.sb;
|
|
1120
|
+
const label = node.label;
|
|
1121
1121
|
if (label) {
|
|
1122
1122
|
sb.push("case ");
|
|
1123
1123
|
this.visitNode(label);
|
|
@@ -1126,10 +1126,10 @@ export class ASTBuilder extends Visitor {
|
|
|
1126
1126
|
else {
|
|
1127
1127
|
sb.push("default:\n");
|
|
1128
1128
|
}
|
|
1129
|
-
|
|
1130
|
-
|
|
1129
|
+
const statements = node.statements;
|
|
1130
|
+
const numStatements = statements.length;
|
|
1131
1131
|
if (numStatements) {
|
|
1132
|
-
|
|
1132
|
+
const indentLevel = ++this.indentLevel;
|
|
1133
1133
|
util.indent(sb, indentLevel);
|
|
1134
1134
|
this.visitNodeAndTerminate(statements[0]);
|
|
1135
1135
|
for (let i = 1; i < numStatements; ++i) {
|
|
@@ -1140,12 +1140,12 @@ export class ASTBuilder extends Visitor {
|
|
|
1140
1140
|
}
|
|
1141
1141
|
}
|
|
1142
1142
|
visitSwitchStatement(node) {
|
|
1143
|
-
|
|
1143
|
+
const sb = this.sb;
|
|
1144
1144
|
sb.push("switch (");
|
|
1145
1145
|
this.visitNode(node.condition);
|
|
1146
1146
|
sb.push(") {\n");
|
|
1147
|
-
|
|
1148
|
-
|
|
1147
|
+
const indentLevel = ++this.indentLevel;
|
|
1148
|
+
const cases = node.cases;
|
|
1149
1149
|
for (let i = 0, k = cases.length; i < k; ++i) {
|
|
1150
1150
|
util.indent(sb, indentLevel);
|
|
1151
1151
|
this.visitSwitchCase(cases[i]);
|
|
@@ -1159,21 +1159,21 @@ export class ASTBuilder extends Visitor {
|
|
|
1159
1159
|
this.visitNode(node.value);
|
|
1160
1160
|
}
|
|
1161
1161
|
visitTryStatement(node) {
|
|
1162
|
-
|
|
1162
|
+
const sb = this.sb;
|
|
1163
1163
|
sb.push("try {\n");
|
|
1164
|
-
|
|
1165
|
-
|
|
1164
|
+
const indentLevel = ++this.indentLevel;
|
|
1165
|
+
const statements = node.bodyStatements;
|
|
1166
1166
|
for (let i = 0, k = statements.length; i < k; ++i) {
|
|
1167
1167
|
util.indent(sb, indentLevel);
|
|
1168
1168
|
this.visitNodeAndTerminate(statements[i]);
|
|
1169
1169
|
}
|
|
1170
|
-
|
|
1170
|
+
const catchVariable = node.catchVariable;
|
|
1171
1171
|
if (catchVariable) {
|
|
1172
1172
|
util.indent(sb, indentLevel - 1);
|
|
1173
1173
|
sb.push("} catch (");
|
|
1174
1174
|
this.visitIdentifierExpression(catchVariable);
|
|
1175
1175
|
sb.push(") {\n");
|
|
1176
|
-
|
|
1176
|
+
const catchStatements = node.catchStatements;
|
|
1177
1177
|
if (catchStatements) {
|
|
1178
1178
|
for (let i = 0, k = catchStatements.length; i < k; ++i) {
|
|
1179
1179
|
util.indent(sb, indentLevel);
|
|
@@ -1181,7 +1181,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1181
1181
|
}
|
|
1182
1182
|
}
|
|
1183
1183
|
}
|
|
1184
|
-
|
|
1184
|
+
const finallyStatements = node.finallyStatements;
|
|
1185
1185
|
if (finallyStatements) {
|
|
1186
1186
|
util.indent(sb, indentLevel - 1);
|
|
1187
1187
|
sb.push("} finally {\n");
|
|
@@ -1194,19 +1194,19 @@ export class ASTBuilder extends Visitor {
|
|
|
1194
1194
|
sb.push("}");
|
|
1195
1195
|
}
|
|
1196
1196
|
visitTypeDeclaration(node) {
|
|
1197
|
-
|
|
1197
|
+
const decorators = node.decorators;
|
|
1198
1198
|
if (decorators) {
|
|
1199
1199
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
1200
1200
|
this.serializeDecorator(decorators[i]);
|
|
1201
1201
|
}
|
|
1202
1202
|
}
|
|
1203
|
-
|
|
1203
|
+
const sb = this.sb;
|
|
1204
1204
|
this.serializeExternalModifiers(node);
|
|
1205
1205
|
sb.push("type ");
|
|
1206
1206
|
this.visitIdentifierExpression(node.name);
|
|
1207
|
-
|
|
1207
|
+
const typeParameters = node.typeParameters;
|
|
1208
1208
|
if (typeParameters) {
|
|
1209
|
-
|
|
1209
|
+
const numTypeParameters = typeParameters.length;
|
|
1210
1210
|
if (numTypeParameters) {
|
|
1211
1211
|
sb.push("<");
|
|
1212
1212
|
for (let i = 0; i < numTypeParameters; ++i) {
|
|
@@ -1220,8 +1220,8 @@ export class ASTBuilder extends Visitor {
|
|
|
1220
1220
|
}
|
|
1221
1221
|
visitVariableDeclaration(node) {
|
|
1222
1222
|
this.visitIdentifierExpression(node.name);
|
|
1223
|
-
|
|
1224
|
-
|
|
1223
|
+
const type = node.type;
|
|
1224
|
+
const sb = this.sb;
|
|
1225
1225
|
if (node.flags & 16384) {
|
|
1226
1226
|
sb.push("!");
|
|
1227
1227
|
}
|
|
@@ -1229,23 +1229,23 @@ export class ASTBuilder extends Visitor {
|
|
|
1229
1229
|
sb.push(": ");
|
|
1230
1230
|
this.visitTypeNode(type);
|
|
1231
1231
|
}
|
|
1232
|
-
|
|
1232
|
+
const initializer = node.initializer;
|
|
1233
1233
|
if (initializer) {
|
|
1234
1234
|
sb.push(" = ");
|
|
1235
1235
|
this.visitNode(initializer);
|
|
1236
1236
|
}
|
|
1237
1237
|
}
|
|
1238
1238
|
visitVariableStatement(node) {
|
|
1239
|
-
|
|
1239
|
+
const decorators = node.decorators;
|
|
1240
1240
|
if (decorators) {
|
|
1241
1241
|
for (let i = 0, k = decorators.length; i < k; ++i) {
|
|
1242
1242
|
this.serializeDecorator(decorators[i]);
|
|
1243
1243
|
}
|
|
1244
1244
|
}
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1245
|
+
const sb = this.sb;
|
|
1246
|
+
const declarations = node.declarations;
|
|
1247
|
+
const numDeclarations = declarations.length;
|
|
1248
|
+
const firstDeclaration = declarations[0];
|
|
1249
1249
|
this.serializeExternalModifiers(firstDeclaration);
|
|
1250
1250
|
sb.push(firstDeclaration.is(8)
|
|
1251
1251
|
? "const "
|
|
@@ -1259,10 +1259,10 @@ export class ASTBuilder extends Visitor {
|
|
|
1259
1259
|
}
|
|
1260
1260
|
}
|
|
1261
1261
|
visitWhileStatement(node) {
|
|
1262
|
-
|
|
1262
|
+
const sb = this.sb;
|
|
1263
1263
|
sb.push("while (");
|
|
1264
1264
|
this.visitNode(node.condition);
|
|
1265
|
-
|
|
1265
|
+
const statement = node.body;
|
|
1266
1266
|
if (statement.kind == 34) {
|
|
1267
1267
|
sb.push(")");
|
|
1268
1268
|
}
|
|
@@ -1272,13 +1272,13 @@ export class ASTBuilder extends Visitor {
|
|
|
1272
1272
|
}
|
|
1273
1273
|
}
|
|
1274
1274
|
serializeDecorator(node) {
|
|
1275
|
-
|
|
1275
|
+
const sb = this.sb;
|
|
1276
1276
|
sb.push("@");
|
|
1277
1277
|
this.visitNode(node.name);
|
|
1278
|
-
|
|
1278
|
+
const args = node.args;
|
|
1279
1279
|
if (args) {
|
|
1280
1280
|
sb.push("(");
|
|
1281
|
-
|
|
1281
|
+
const numArgs = args.length;
|
|
1282
1282
|
if (numArgs) {
|
|
1283
1283
|
this.visitNode(args[0]);
|
|
1284
1284
|
for (let i = 1; i < numArgs; ++i) {
|
|
@@ -1294,9 +1294,9 @@ export class ASTBuilder extends Visitor {
|
|
|
1294
1294
|
util.indent(sb, this.indentLevel);
|
|
1295
1295
|
}
|
|
1296
1296
|
serializeParameter(node) {
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1297
|
+
const sb = this.sb;
|
|
1298
|
+
const kind = node.parameterKind;
|
|
1299
|
+
const implicitFieldDeclaration = node.implicitFieldDeclaration;
|
|
1300
1300
|
if (implicitFieldDeclaration) {
|
|
1301
1301
|
this.serializeAccessModifiers(implicitFieldDeclaration);
|
|
1302
1302
|
}
|
|
@@ -1304,8 +1304,8 @@ export class ASTBuilder extends Visitor {
|
|
|
1304
1304
|
sb.push("...");
|
|
1305
1305
|
}
|
|
1306
1306
|
this.visitIdentifierExpression(node.name);
|
|
1307
|
-
|
|
1308
|
-
|
|
1307
|
+
const type = node.type;
|
|
1308
|
+
const initializer = node.initializer;
|
|
1309
1309
|
if (type) {
|
|
1310
1310
|
if (kind == 1 && !initializer)
|
|
1311
1311
|
sb.push("?");
|
|
@@ -1320,7 +1320,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1320
1320
|
}
|
|
1321
1321
|
}
|
|
1322
1322
|
serializeExternalModifiers(node) {
|
|
1323
|
-
|
|
1323
|
+
const sb = this.sb;
|
|
1324
1324
|
if (node.is(2)) {
|
|
1325
1325
|
sb.push("export ");
|
|
1326
1326
|
}
|
|
@@ -1332,7 +1332,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1332
1332
|
}
|
|
1333
1333
|
}
|
|
1334
1334
|
serializeAccessModifiers(node) {
|
|
1335
|
-
|
|
1335
|
+
const sb = this.sb;
|
|
1336
1336
|
if (node.is(256)) {
|
|
1337
1337
|
sb.push("public ");
|
|
1338
1338
|
}
|
|
@@ -1353,7 +1353,7 @@ export class ASTBuilder extends Visitor {
|
|
|
1353
1353
|
}
|
|
1354
1354
|
}
|
|
1355
1355
|
finish() {
|
|
1356
|
-
|
|
1356
|
+
const ret = this.sb.join("");
|
|
1357
1357
|
this.sb = [];
|
|
1358
1358
|
return ret;
|
|
1359
1359
|
}
|