brighterscript 1.0.0-alpha.14 → 1.0.0-alpha.17
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 +83 -1
- package/README.md +28 -9
- package/dist/Cache.d.ts +2 -7
- package/dist/Cache.js +4 -13
- package/dist/Cache.js.map +1 -1
- package/dist/DependencyGraph.js +5 -4
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +21 -1
- package/dist/DiagnosticMessages.js +21 -1
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/Logger.js +5 -5
- package/dist/Logger.js.map +1 -1
- package/dist/Program.d.ts +3 -3
- package/dist/Program.js +9 -7
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +1 -1
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +16 -11
- package/dist/Scope.js +42 -12
- package/dist/Scope.js.map +1 -1
- package/dist/XmlScope.d.ts +3 -3
- package/dist/XmlScope.js +1 -1
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +6 -0
- package/dist/astUtils/AstEditor.js +10 -0
- package/dist/astUtils/AstEditor.js.map +1 -1
- package/dist/astUtils/AstEditor.spec.js +37 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -1
- package/dist/astUtils/creators.d.ts +10 -6
- package/dist/astUtils/creators.js +93 -12
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +10 -0
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +7 -2
- package/dist/astUtils/reflection.js +19 -3
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +5 -4
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +3 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +2 -0
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +4 -1
- package/dist/bscPlugin/BscPlugin.js +16 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +38 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +28 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +40 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +32 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +9 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +66 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +11 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +94 -0
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
- package/dist/diagnosticUtils.js +3 -3
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +12 -14
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +22 -23
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +10 -3
- package/dist/files/BrsFile.js +133 -49
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +299 -123
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +5 -5
- package/dist/files/XmlFile.js +3 -3
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +9 -9
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/interfaces.d.ts +29 -37
- package/dist/lexer/Lexer.spec.js +8 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +2 -0
- package/dist/lexer/TokenKind.js +5 -0
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/Expression.d.ts +85 -21
- package/dist/parser/Expression.js +177 -53
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +1 -1
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +12 -3
- package/dist/parser/Parser.js +156 -56
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +57 -2
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +94 -30
- package/dist/parser/Statement.js +281 -106
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Enum.spec.js +774 -0
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
- package/dist/parser/tests/statement/For.spec.d.ts +1 -0
- package/dist/parser/tests/statement/For.spec.js +46 -0
- package/dist/parser/tests/statement/For.spec.js.map +1 -0
- package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
- package/dist/parser/tests/statement/ForEach.spec.js +37 -0
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
- package/dist/types/BooleanType.d.ts +4 -2
- package/dist/types/BooleanType.js +5 -1
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/DoubleType.d.ts +2 -0
- package/dist/types/DoubleType.js +5 -1
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +2 -0
- package/dist/types/DynamicType.js +5 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/FloatType.d.ts +3 -1
- package/dist/types/FloatType.js +5 -1
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +2 -1
- package/dist/types/FunctionType.js +11 -8
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +6 -0
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/IntegerType.d.ts +3 -1
- package/dist/types/IntegerType.js +5 -1
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InvalidType.d.ts +4 -2
- package/dist/types/InvalidType.js +5 -1
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +3 -1
- package/dist/types/LongIntegerType.js +5 -1
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/ObjectType.d.ts +2 -1
- package/dist/types/ObjectType.js +4 -2
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/StringType.d.ts +4 -2
- package/dist/types/StringType.js +5 -1
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UniversalFunctionType.d.ts +9 -0
- package/dist/types/UniversalFunctionType.js +25 -0
- package/dist/types/UniversalFunctionType.js.map +1 -0
- package/dist/types/VoidType.d.ts +4 -2
- package/dist/types/VoidType.js +5 -1
- package/dist/types/VoidType.js.map +1 -1
- package/dist/util.d.ts +12 -2
- package/dist/util.js +74 -44
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +3 -3
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -3
package/dist/parser/Statement.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ThrowStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.ClassMethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = exports.Statement = void 0;
|
|
3
|
+
exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.ClassMethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = exports.Statement = void 0;
|
|
4
4
|
const TokenKind_1 = require("../lexer/TokenKind");
|
|
5
5
|
const Expression_1 = require("./Expression");
|
|
6
6
|
const util_1 = require("../util");
|
|
7
|
-
const vscode_languageserver_1 = require("vscode-languageserver");
|
|
8
7
|
const Parser_1 = require("./Parser");
|
|
9
8
|
const visitors_1 = require("../astUtils/visitors");
|
|
10
9
|
const reflection_1 = require("../astUtils/reflection");
|
|
@@ -46,12 +45,10 @@ exports.EmptyStatement = EmptyStatement;
|
|
|
46
45
|
*/
|
|
47
46
|
class Body extends Statement {
|
|
48
47
|
constructor(statements = []) {
|
|
48
|
+
var _a;
|
|
49
49
|
super();
|
|
50
50
|
this.statements = statements;
|
|
51
|
-
|
|
52
|
-
get range() {
|
|
53
|
-
var _a, _b, _c, _d;
|
|
54
|
-
return util_1.util.createRangeFromPositions((_b = (_a = this.statements[0]) === null || _a === void 0 ? void 0 : _a.range.start) !== null && _b !== void 0 ? _b : vscode_languageserver_1.Position.create(0, 0), (_d = (_c = this.statements[this.statements.length - 1]) === null || _c === void 0 ? void 0 : _c.range.end) !== null && _d !== void 0 ? _d : vscode_languageserver_1.Position.create(0, 0));
|
|
51
|
+
this.range = (_a = util_1.util.createBoundingRange(...this.statements)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
55
52
|
}
|
|
56
53
|
transpile(state) {
|
|
57
54
|
let result = [];
|
|
@@ -103,12 +100,13 @@ class Body extends Statement {
|
|
|
103
100
|
exports.Body = Body;
|
|
104
101
|
class AssignmentStatement extends Statement {
|
|
105
102
|
constructor(name, equals, value, containingFunction) {
|
|
103
|
+
var _a;
|
|
106
104
|
super();
|
|
107
105
|
this.name = name;
|
|
108
106
|
this.equals = equals;
|
|
109
107
|
this.value = value;
|
|
110
108
|
this.containingFunction = containingFunction;
|
|
111
|
-
this.range = util_1.util.
|
|
109
|
+
this.range = (_a = util_1.util.createBoundingRange(this.name, this.equals, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
112
110
|
}
|
|
113
111
|
transpile(state) {
|
|
114
112
|
var _a, _b;
|
|
@@ -135,12 +133,11 @@ class AssignmentStatement extends Statement {
|
|
|
135
133
|
exports.AssignmentStatement = AssignmentStatement;
|
|
136
134
|
class Block extends Statement {
|
|
137
135
|
constructor(statements, startingRange) {
|
|
136
|
+
var _a;
|
|
138
137
|
super();
|
|
139
138
|
this.statements = statements;
|
|
140
139
|
this.startingRange = startingRange;
|
|
141
|
-
this.range = util_1.util.
|
|
142
|
-
? this.statements[this.statements.length - 1].range.end
|
|
143
|
-
: this.startingRange.start);
|
|
140
|
+
this.range = (_a = util_1.util.createBoundingRange({ range: this.startingRange }, ...statements)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
144
141
|
}
|
|
145
142
|
transpile(state) {
|
|
146
143
|
state.blockDepth++;
|
|
@@ -177,9 +174,10 @@ class Block extends Statement {
|
|
|
177
174
|
exports.Block = Block;
|
|
178
175
|
class ExpressionStatement extends Statement {
|
|
179
176
|
constructor(expression) {
|
|
177
|
+
var _a, _b;
|
|
180
178
|
super();
|
|
181
179
|
this.expression = expression;
|
|
182
|
-
this.range = this.expression.range;
|
|
180
|
+
this.range = (_b = (_a = this.expression) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
183
181
|
}
|
|
184
182
|
transpile(state) {
|
|
185
183
|
return this.expression.transpile(state);
|
|
@@ -196,10 +194,8 @@ class CommentStatement extends Statement {
|
|
|
196
194
|
var _a;
|
|
197
195
|
super();
|
|
198
196
|
this.comments = comments;
|
|
197
|
+
this.range = (_a = util_1.util.createBoundingRange(...this.comments)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
199
198
|
this.visitMode = visitors_1.InternalWalkMode.visitStatements | visitors_1.InternalWalkMode.visitExpressions;
|
|
200
|
-
if (((_a = this.comments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
201
|
-
this.range = util_1.util.createRangeFromPositions(this.comments[0].range.start, this.comments[this.comments.length - 1].range.end);
|
|
202
|
-
}
|
|
203
199
|
}
|
|
204
200
|
get text() {
|
|
205
201
|
return this.comments.map(x => x.text).join('\n');
|
|
@@ -229,9 +225,10 @@ class CommentStatement extends Statement {
|
|
|
229
225
|
exports.CommentStatement = CommentStatement;
|
|
230
226
|
class ExitForStatement extends Statement {
|
|
231
227
|
constructor(tokens) {
|
|
228
|
+
var _a, _b, _c;
|
|
232
229
|
super();
|
|
233
230
|
this.tokens = tokens;
|
|
234
|
-
this.range = this.tokens.exitFor.range;
|
|
231
|
+
this.range = (_c = (_b = (_a = this.tokens) === null || _a === void 0 ? void 0 : _a.exitFor) === null || _b === void 0 ? void 0 : _b.range) !== null && _c !== void 0 ? _c : creators_1.interpolatedRange;
|
|
235
232
|
}
|
|
236
233
|
transpile(state) {
|
|
237
234
|
return [
|
|
@@ -245,9 +242,10 @@ class ExitForStatement extends Statement {
|
|
|
245
242
|
exports.ExitForStatement = ExitForStatement;
|
|
246
243
|
class ExitWhileStatement extends Statement {
|
|
247
244
|
constructor(tokens) {
|
|
245
|
+
var _a, _b, _c;
|
|
248
246
|
super();
|
|
249
247
|
this.tokens = tokens;
|
|
250
|
-
this.range = this.tokens.exitWhile.range;
|
|
248
|
+
this.range = (_c = (_b = (_a = this.tokens) === null || _a === void 0 ? void 0 : _a.exitWhile) === null || _b === void 0 ? void 0 : _b.range) !== null && _c !== void 0 ? _c : creators_1.interpolatedRange;
|
|
251
249
|
}
|
|
252
250
|
transpile(state) {
|
|
253
251
|
return [
|
|
@@ -265,7 +263,16 @@ class FunctionStatement extends Statement {
|
|
|
265
263
|
this.name = name;
|
|
266
264
|
this.func = func;
|
|
267
265
|
this.namespaceName = namespaceName;
|
|
268
|
-
|
|
266
|
+
}
|
|
267
|
+
get range() {
|
|
268
|
+
return this.cacheRange();
|
|
269
|
+
}
|
|
270
|
+
cacheRange() {
|
|
271
|
+
var _a, _b;
|
|
272
|
+
if (!this._range) {
|
|
273
|
+
this._range = (_b = (_a = this.func) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : this.name.range;
|
|
274
|
+
}
|
|
275
|
+
return this._range;
|
|
269
276
|
}
|
|
270
277
|
/**
|
|
271
278
|
* Get the name of this expression based on the parse mode
|
|
@@ -303,14 +310,14 @@ class FunctionStatement extends Statement {
|
|
|
303
310
|
exports.FunctionStatement = FunctionStatement;
|
|
304
311
|
class IfStatement extends Statement {
|
|
305
312
|
constructor(tokens, condition, thenBranch, elseBranch, isInline) {
|
|
306
|
-
var _a
|
|
313
|
+
var _a;
|
|
307
314
|
super();
|
|
308
315
|
this.tokens = tokens;
|
|
309
316
|
this.condition = condition;
|
|
310
317
|
this.thenBranch = thenBranch;
|
|
311
318
|
this.elseBranch = elseBranch;
|
|
312
319
|
this.isInline = isInline;
|
|
313
|
-
this.range = util_1.util.
|
|
320
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.if, this.condition, this.tokens.then, this.thenBranch, this.tokens.else, this.elseBranch, this.tokens.endIf)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
314
321
|
}
|
|
315
322
|
transpile(state) {
|
|
316
323
|
let results = [];
|
|
@@ -319,14 +326,11 @@ class IfStatement extends Statement {
|
|
|
319
326
|
results.push(' ');
|
|
320
327
|
//conditions
|
|
321
328
|
results.push(...this.condition.transpile(state));
|
|
322
|
-
results.push(' ');
|
|
323
329
|
//then
|
|
324
330
|
if (this.tokens.then) {
|
|
331
|
+
results.push(' ');
|
|
325
332
|
results.push(state.transpileToken(this.tokens.then));
|
|
326
333
|
}
|
|
327
|
-
else {
|
|
328
|
-
results.push('then');
|
|
329
|
-
}
|
|
330
334
|
state.lineage.unshift(this);
|
|
331
335
|
//if statement body
|
|
332
336
|
let thenNodes = this.thenBranch.transpile(state);
|
|
@@ -347,7 +351,8 @@ class IfStatement extends Statement {
|
|
|
347
351
|
let body = this.elseBranch.transpile(state);
|
|
348
352
|
state.lineage.shift();
|
|
349
353
|
if (body.length > 0) {
|
|
350
|
-
|
|
354
|
+
//zero or more spaces between the `else` and the `if`
|
|
355
|
+
results.push(this.elseBranch.tokens.if.leadingWhitespace);
|
|
351
356
|
results.push(...body);
|
|
352
357
|
// stop here because chained if will transpile the rest
|
|
353
358
|
return results;
|
|
@@ -392,10 +397,11 @@ class IfStatement extends Statement {
|
|
|
392
397
|
exports.IfStatement = IfStatement;
|
|
393
398
|
class IncrementStatement extends Statement {
|
|
394
399
|
constructor(value, operator) {
|
|
400
|
+
var _a;
|
|
395
401
|
super();
|
|
396
402
|
this.value = value;
|
|
397
403
|
this.operator = operator;
|
|
398
|
-
this.range = util_1.util.
|
|
404
|
+
this.range = (_a = util_1.util.createBoundingRange(this.value, this.operator)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
399
405
|
}
|
|
400
406
|
transpile(state) {
|
|
401
407
|
return [
|
|
@@ -420,12 +426,11 @@ class PrintStatement extends Statement {
|
|
|
420
426
|
* evaluated and printed.
|
|
421
427
|
*/
|
|
422
428
|
constructor(tokens, expressions) {
|
|
429
|
+
var _a;
|
|
423
430
|
super();
|
|
424
431
|
this.tokens = tokens;
|
|
425
432
|
this.expressions = expressions;
|
|
426
|
-
this.range = util_1.util.
|
|
427
|
-
? this.expressions[this.expressions.length - 1].range.end
|
|
428
|
-
: this.tokens.print.range.end);
|
|
433
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.print, ...this.expressions)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
429
434
|
}
|
|
430
435
|
transpile(state) {
|
|
431
436
|
var _a;
|
|
@@ -462,14 +467,14 @@ class PrintStatement extends Statement {
|
|
|
462
467
|
exports.PrintStatement = PrintStatement;
|
|
463
468
|
class DimStatement extends Statement {
|
|
464
469
|
constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
|
|
465
|
-
var _a
|
|
470
|
+
var _a;
|
|
466
471
|
super();
|
|
467
472
|
this.dimToken = dimToken;
|
|
468
473
|
this.identifier = identifier;
|
|
469
474
|
this.openingSquare = openingSquare;
|
|
470
475
|
this.dimensions = dimensions;
|
|
471
476
|
this.closingSquare = closingSquare;
|
|
472
|
-
this.range = util_1.util.
|
|
477
|
+
this.range = (_a = util_1.util.createBoundingRange(this.dimToken, this.identifier, this.openingSquare, ...this.dimensions, this.closingSquare)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
473
478
|
}
|
|
474
479
|
transpile(state) {
|
|
475
480
|
let result = [
|
|
@@ -499,9 +504,10 @@ class DimStatement extends Statement {
|
|
|
499
504
|
exports.DimStatement = DimStatement;
|
|
500
505
|
class GotoStatement extends Statement {
|
|
501
506
|
constructor(tokens) {
|
|
507
|
+
var _a;
|
|
502
508
|
super();
|
|
503
509
|
this.tokens = tokens;
|
|
504
|
-
this.range = util_1.util.
|
|
510
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.goto, this.tokens.label)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
505
511
|
}
|
|
506
512
|
transpile(state) {
|
|
507
513
|
return [
|
|
@@ -517,9 +523,10 @@ class GotoStatement extends Statement {
|
|
|
517
523
|
exports.GotoStatement = GotoStatement;
|
|
518
524
|
class LabelStatement extends Statement {
|
|
519
525
|
constructor(tokens) {
|
|
526
|
+
var _a;
|
|
520
527
|
super();
|
|
521
528
|
this.tokens = tokens;
|
|
522
|
-
this.range = util_1.util.
|
|
529
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.identifier, this.tokens.colon)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
523
530
|
}
|
|
524
531
|
transpile(state) {
|
|
525
532
|
return [
|
|
@@ -538,7 +545,7 @@ class ReturnStatement extends Statement {
|
|
|
538
545
|
super();
|
|
539
546
|
this.tokens = tokens;
|
|
540
547
|
this.value = value;
|
|
541
|
-
this.range = util_1.util.
|
|
548
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.return, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
542
549
|
}
|
|
543
550
|
transpile(state) {
|
|
544
551
|
let result = [];
|
|
@@ -558,9 +565,10 @@ class ReturnStatement extends Statement {
|
|
|
558
565
|
exports.ReturnStatement = ReturnStatement;
|
|
559
566
|
class EndStatement extends Statement {
|
|
560
567
|
constructor(tokens) {
|
|
568
|
+
var _a, _b;
|
|
561
569
|
super();
|
|
562
570
|
this.tokens = tokens;
|
|
563
|
-
this.range =
|
|
571
|
+
this.range = (_b = (_a = this.tokens.end) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
564
572
|
}
|
|
565
573
|
transpile(state) {
|
|
566
574
|
return [
|
|
@@ -574,9 +582,10 @@ class EndStatement extends Statement {
|
|
|
574
582
|
exports.EndStatement = EndStatement;
|
|
575
583
|
class StopStatement extends Statement {
|
|
576
584
|
constructor(tokens) {
|
|
585
|
+
var _a, _b;
|
|
577
586
|
super();
|
|
578
587
|
this.tokens = tokens;
|
|
579
|
-
this.range =
|
|
588
|
+
this.range = (_b = (_a = this.tokens.stop) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
580
589
|
}
|
|
581
590
|
transpile(state) {
|
|
582
591
|
return [
|
|
@@ -590,7 +599,7 @@ class StopStatement extends Statement {
|
|
|
590
599
|
exports.StopStatement = StopStatement;
|
|
591
600
|
class ForStatement extends Statement {
|
|
592
601
|
constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
|
|
593
|
-
var _a
|
|
602
|
+
var _a;
|
|
594
603
|
super();
|
|
595
604
|
this.forToken = forToken;
|
|
596
605
|
this.counterDeclaration = counterDeclaration;
|
|
@@ -600,8 +609,7 @@ class ForStatement extends Statement {
|
|
|
600
609
|
this.endForToken = endForToken;
|
|
601
610
|
this.stepToken = stepToken;
|
|
602
611
|
this.increment = increment;
|
|
603
|
-
|
|
604
|
-
this.range = util_1.util.createRangeFromPositions(this.forToken.range.start, lastRange.end);
|
|
612
|
+
this.range = (_a = util_1.util.createBoundingRange(this.forToken, this.counterDeclaration, this.toToken, this.finalValue, this.body, this.stepToken, this.increment, this.endForToken)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
605
613
|
}
|
|
606
614
|
transpile(state) {
|
|
607
615
|
let result = [];
|
|
@@ -621,9 +629,8 @@ class ForStatement extends Statement {
|
|
|
621
629
|
state.lineage.unshift(this);
|
|
622
630
|
result.push(...this.body.transpile(state));
|
|
623
631
|
state.lineage.shift();
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
}
|
|
632
|
+
// add new line before "end for"
|
|
633
|
+
result.push('\n');
|
|
627
634
|
//end for
|
|
628
635
|
result.push(state.indent(), state.transpileToken(this.endForToken));
|
|
629
636
|
return result;
|
|
@@ -644,7 +651,7 @@ class ForStatement extends Statement {
|
|
|
644
651
|
exports.ForStatement = ForStatement;
|
|
645
652
|
class ForEachStatement extends Statement {
|
|
646
653
|
constructor(forEachToken, item, inToken, target, body, endForToken) {
|
|
647
|
-
var _a
|
|
654
|
+
var _a;
|
|
648
655
|
super();
|
|
649
656
|
this.forEachToken = forEachToken;
|
|
650
657
|
this.item = item;
|
|
@@ -652,7 +659,7 @@ class ForEachStatement extends Statement {
|
|
|
652
659
|
this.target = target;
|
|
653
660
|
this.body = body;
|
|
654
661
|
this.endForToken = endForToken;
|
|
655
|
-
this.range = util_1.util.
|
|
662
|
+
this.range = (_a = util_1.util.createBoundingRange(this.forEachToken, this.item, this.inToken, this.target, this.body, this.endForToken)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
656
663
|
}
|
|
657
664
|
transpile(state) {
|
|
658
665
|
let result = [];
|
|
@@ -668,9 +675,8 @@ class ForEachStatement extends Statement {
|
|
|
668
675
|
state.lineage.unshift(this);
|
|
669
676
|
result.push(...this.body.transpile(state));
|
|
670
677
|
state.lineage.shift();
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
}
|
|
678
|
+
// add new line before "end for"
|
|
679
|
+
result.push('\n');
|
|
674
680
|
//end for
|
|
675
681
|
result.push(state.indent(), state.transpileToken(this.endForToken));
|
|
676
682
|
return result;
|
|
@@ -687,13 +693,12 @@ class ForEachStatement extends Statement {
|
|
|
687
693
|
exports.ForEachStatement = ForEachStatement;
|
|
688
694
|
class WhileStatement extends Statement {
|
|
689
695
|
constructor(tokens, condition, body) {
|
|
690
|
-
var _a
|
|
696
|
+
var _a;
|
|
691
697
|
super();
|
|
692
698
|
this.tokens = tokens;
|
|
693
699
|
this.condition = condition;
|
|
694
700
|
this.body = body;
|
|
695
|
-
|
|
696
|
-
this.range = util_1.util.createRangeFromPositions(this.tokens.while.range.start, lastRange.end);
|
|
701
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.while, this.condition, this.body, this.tokens.endWhile)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
697
702
|
}
|
|
698
703
|
transpile(state) {
|
|
699
704
|
let result = [];
|
|
@@ -722,12 +727,15 @@ class WhileStatement extends Statement {
|
|
|
722
727
|
}
|
|
723
728
|
exports.WhileStatement = WhileStatement;
|
|
724
729
|
class DottedSetStatement extends Statement {
|
|
725
|
-
constructor(obj, name, value) {
|
|
730
|
+
constructor(obj, name, value, dot, operator) {
|
|
731
|
+
var _a;
|
|
726
732
|
super();
|
|
727
733
|
this.obj = obj;
|
|
728
734
|
this.name = name;
|
|
729
735
|
this.value = value;
|
|
730
|
-
this.
|
|
736
|
+
this.dot = dot;
|
|
737
|
+
this.operator = operator;
|
|
738
|
+
this.range = (_a = util_1.util.createBoundingRange(this.obj, this.dot, this.name, this.operator, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
731
739
|
}
|
|
732
740
|
transpile(state) {
|
|
733
741
|
var _a, _b;
|
|
@@ -757,14 +765,16 @@ class DottedSetStatement extends Statement {
|
|
|
757
765
|
}
|
|
758
766
|
exports.DottedSetStatement = DottedSetStatement;
|
|
759
767
|
class IndexedSetStatement extends Statement {
|
|
760
|
-
constructor(obj, index, value, openingSquare, closingSquare) {
|
|
768
|
+
constructor(obj, index, value, openingSquare, closingSquare, operator) {
|
|
769
|
+
var _a;
|
|
761
770
|
super();
|
|
762
771
|
this.obj = obj;
|
|
763
772
|
this.index = index;
|
|
764
773
|
this.value = value;
|
|
765
774
|
this.openingSquare = openingSquare;
|
|
766
775
|
this.closingSquare = closingSquare;
|
|
767
|
-
this.
|
|
776
|
+
this.operator = operator;
|
|
777
|
+
this.range = (_a = util_1.util.createBoundingRange(this.obj, this.openingSquare, this.index, this.closingSquare, this.operator, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
768
778
|
}
|
|
769
779
|
transpile(state) {
|
|
770
780
|
var _a, _b;
|
|
@@ -800,9 +810,10 @@ class IndexedSetStatement extends Statement {
|
|
|
800
810
|
exports.IndexedSetStatement = IndexedSetStatement;
|
|
801
811
|
class LibraryStatement extends Statement {
|
|
802
812
|
constructor(tokens) {
|
|
813
|
+
var _a;
|
|
803
814
|
super();
|
|
804
815
|
this.tokens = tokens;
|
|
805
|
-
this.range = util_1.util.
|
|
816
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.library, this.tokens.filePath)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
806
817
|
}
|
|
807
818
|
transpile(state) {
|
|
808
819
|
let result = [];
|
|
@@ -835,8 +846,14 @@ class NamespaceStatement extends Statement {
|
|
|
835
846
|
this.symbolTable = new SymbolTable_1.SymbolTable(parentSymbolTable);
|
|
836
847
|
}
|
|
837
848
|
get range() {
|
|
838
|
-
|
|
839
|
-
|
|
849
|
+
return this.cacheRange();
|
|
850
|
+
}
|
|
851
|
+
cacheRange() {
|
|
852
|
+
var _a;
|
|
853
|
+
if (!this._range) {
|
|
854
|
+
this._range = (_a = util_1.util.createBoundingRange(this.keyword, this.nameExpression, this.body, this.endKeyword)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
855
|
+
}
|
|
856
|
+
return this._range;
|
|
840
857
|
}
|
|
841
858
|
getName(parseMode) {
|
|
842
859
|
return this.nameExpression.getName(parseMode);
|
|
@@ -869,10 +886,11 @@ class NamespaceStatement extends Statement {
|
|
|
869
886
|
exports.NamespaceStatement = NamespaceStatement;
|
|
870
887
|
class ImportStatement extends Statement {
|
|
871
888
|
constructor(importToken, filePathToken) {
|
|
889
|
+
var _a;
|
|
872
890
|
super();
|
|
873
891
|
this.importToken = importToken;
|
|
874
892
|
this.filePathToken = filePathToken;
|
|
875
|
-
this.range = util_1.util.
|
|
893
|
+
this.range = (_a = util_1.util.createBoundingRange(this.importToken, this.filePathToken)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
876
894
|
if (this.filePathToken) {
|
|
877
895
|
//remove quotes
|
|
878
896
|
this.filePath = this.filePathToken.text.replace(/"/g, '');
|
|
@@ -908,6 +926,7 @@ class ImportStatement extends Statement {
|
|
|
908
926
|
exports.ImportStatement = ImportStatement;
|
|
909
927
|
class InterfaceStatement extends Statement {
|
|
910
928
|
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken, namespaceName) {
|
|
929
|
+
var _a;
|
|
911
930
|
super();
|
|
912
931
|
this.parentInterfaceName = parentInterfaceName;
|
|
913
932
|
this.body = body;
|
|
@@ -917,6 +936,7 @@ class InterfaceStatement extends Statement {
|
|
|
917
936
|
this.tokens.name = name;
|
|
918
937
|
this.tokens.extends = extendsToken;
|
|
919
938
|
this.tokens.endInterface = endInterfaceToken;
|
|
939
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.interface, this.tokens.name, this.tokens.extends, this.parentInterfaceName, ...this.body, this.tokens.endInterface)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
920
940
|
}
|
|
921
941
|
get fields() {
|
|
922
942
|
return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
|
|
@@ -994,20 +1014,21 @@ class InterfaceStatement extends Statement {
|
|
|
994
1014
|
}
|
|
995
1015
|
exports.InterfaceStatement = InterfaceStatement;
|
|
996
1016
|
class InterfaceFieldStatement extends Statement {
|
|
997
|
-
constructor(nameToken, asToken,
|
|
1017
|
+
constructor(nameToken, asToken, type) {
|
|
1018
|
+
var _a;
|
|
998
1019
|
super();
|
|
999
1020
|
this.type = type;
|
|
1000
1021
|
this.tokens = {};
|
|
1001
1022
|
this.tokens.name = nameToken;
|
|
1002
1023
|
this.tokens.as = asToken;
|
|
1003
|
-
this.tokens.type
|
|
1024
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.name, this.tokens.as, this.type)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1004
1025
|
}
|
|
1005
1026
|
transpile(state) {
|
|
1006
1027
|
throw new Error('Method not implemented.');
|
|
1007
1028
|
}
|
|
1008
|
-
|
|
1009
|
-
var _a
|
|
1010
|
-
return
|
|
1029
|
+
getType() {
|
|
1030
|
+
var _a;
|
|
1031
|
+
return (_a = this.type) === null || _a === void 0 ? void 0 : _a.type;
|
|
1011
1032
|
}
|
|
1012
1033
|
get name() {
|
|
1013
1034
|
return this.tokens.name.text;
|
|
@@ -1016,21 +1037,22 @@ class InterfaceFieldStatement extends Statement {
|
|
|
1016
1037
|
//nothing to walk
|
|
1017
1038
|
}
|
|
1018
1039
|
getTypedef(state) {
|
|
1019
|
-
var _a
|
|
1040
|
+
var _a;
|
|
1020
1041
|
const result = [];
|
|
1021
1042
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1022
1043
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1023
1044
|
}
|
|
1024
1045
|
result.push(this.tokens.name.text);
|
|
1025
|
-
if (
|
|
1026
|
-
result.push(' as ', this.
|
|
1046
|
+
if (this.tokens.as && this.type) {
|
|
1047
|
+
result.push(' as ', ...this.type.transpile(state));
|
|
1027
1048
|
}
|
|
1028
1049
|
return result;
|
|
1029
1050
|
}
|
|
1030
1051
|
}
|
|
1031
1052
|
exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
1032
1053
|
class InterfaceMethodStatement extends Statement {
|
|
1033
|
-
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken,
|
|
1054
|
+
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnType) {
|
|
1055
|
+
var _a;
|
|
1034
1056
|
super();
|
|
1035
1057
|
this.params = params;
|
|
1036
1058
|
this.returnType = returnType;
|
|
@@ -1040,20 +1062,16 @@ class InterfaceMethodStatement extends Statement {
|
|
|
1040
1062
|
this.tokens.leftParen = leftParen;
|
|
1041
1063
|
this.tokens.rightParen = rightParen;
|
|
1042
1064
|
this.tokens.as = asToken;
|
|
1043
|
-
this.tokens.returnType
|
|
1044
|
-
}
|
|
1045
|
-
transpile(state) {
|
|
1046
|
-
throw new Error('Method not implemented.');
|
|
1065
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.name, this.tokens.as, this.tokens.leftParen, ...this.params, this.tokens.rightParen, this.tokens.as, this.returnType)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1047
1066
|
}
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
return util_1.util.createRangeFromPositions(this.tokens.name.range.start, ((_h = (_g = (_f = (_c = (_b = (_a = this.tokens.returnType) !== null && _a !== void 0 ? _a : this.tokens.as) !== null && _b !== void 0 ? _b : this.tokens.rightParen) !== null && _c !== void 0 ? _c : (_d = this.params) === null || _d === void 0 ? void 0 : _d[((_e = this.params) === null || _e === void 0 ? void 0 : _e.length) - 1]) !== null && _f !== void 0 ? _f : this.tokens.leftParen) !== null && _g !== void 0 ? _g : this.tokens.name) !== null && _h !== void 0 ? _h : this.tokens.functionType).range.end);
|
|
1067
|
+
getReturnType() {
|
|
1068
|
+
return this.returnType.type;
|
|
1051
1069
|
}
|
|
1052
1070
|
walk(visitor, options) {
|
|
1053
1071
|
//nothing to walk
|
|
1054
1072
|
}
|
|
1055
1073
|
getTypedef(state) {
|
|
1056
|
-
var _a, _b
|
|
1074
|
+
var _a, _b;
|
|
1057
1075
|
const result = [];
|
|
1058
1076
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1059
1077
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
@@ -1066,16 +1084,19 @@ class InterfaceMethodStatement extends Statement {
|
|
|
1066
1084
|
}
|
|
1067
1085
|
const param = params[i];
|
|
1068
1086
|
result.push(param.name.text);
|
|
1069
|
-
if (
|
|
1070
|
-
result.push(' as ', param.
|
|
1087
|
+
if (param.asToken && param.type) {
|
|
1088
|
+
result.push(' as ', ...param.type.transpile(state));
|
|
1071
1089
|
}
|
|
1072
1090
|
}
|
|
1073
1091
|
result.push(')');
|
|
1074
|
-
if (
|
|
1075
|
-
result.push(' as ', this.
|
|
1092
|
+
if (this.returnType) {
|
|
1093
|
+
result.push(' as ', ...this.returnType.transpile(state));
|
|
1076
1094
|
}
|
|
1077
1095
|
return result;
|
|
1078
1096
|
}
|
|
1097
|
+
transpile(state) {
|
|
1098
|
+
throw new Error('Method not implemented.');
|
|
1099
|
+
}
|
|
1079
1100
|
}
|
|
1080
1101
|
exports.InterfaceMethodStatement = InterfaceMethodStatement;
|
|
1081
1102
|
class ClassStatement extends Statement {
|
|
@@ -1084,7 +1105,7 @@ class ClassStatement extends Statement {
|
|
|
1084
1105
|
* The name of the class (without namespace prefix)
|
|
1085
1106
|
*/
|
|
1086
1107
|
name, body, end, extendsKeyword, parentClassName, namespaceName, currentSymbolTable) {
|
|
1087
|
-
var _a, _b, _c;
|
|
1108
|
+
var _a, _b, _c, _d;
|
|
1088
1109
|
super();
|
|
1089
1110
|
this.classKeyword = classKeyword;
|
|
1090
1111
|
this.name = name;
|
|
@@ -1101,15 +1122,15 @@ class ClassStatement extends Statement {
|
|
|
1101
1122
|
this.fields = [];
|
|
1102
1123
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1103
1124
|
this.symbolTable.setParent(currentSymbolTable);
|
|
1104
|
-
this.range = util_1.util.
|
|
1125
|
+
this.range = (_b = util_1.util.createBoundingRange(this.classKeyword, this.name, this.extendsKeyword, this.parentClassName, ...this.body, this.end)) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
1105
1126
|
for (let statement of this.body) {
|
|
1106
1127
|
if ((0, reflection_1.isClassMethodStatement)(statement)) {
|
|
1107
1128
|
this.methods.push(statement);
|
|
1108
|
-
this.memberMap[(
|
|
1129
|
+
this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
|
|
1109
1130
|
}
|
|
1110
1131
|
else if ((0, reflection_1.isClassFieldStatement)(statement)) {
|
|
1111
1132
|
this.fields.push(statement);
|
|
1112
|
-
this.memberMap[(
|
|
1133
|
+
this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
|
|
1113
1134
|
}
|
|
1114
1135
|
}
|
|
1115
1136
|
}
|
|
@@ -1172,6 +1193,7 @@ class ClassStatement extends Statement {
|
|
|
1172
1193
|
}
|
|
1173
1194
|
getTypedef(state) {
|
|
1174
1195
|
var _a, _b;
|
|
1196
|
+
this.ensureConstructorFunctionExists();
|
|
1175
1197
|
const result = [];
|
|
1176
1198
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1177
1199
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
@@ -1275,14 +1297,16 @@ class ClassStatement extends Statement {
|
|
|
1275
1297
|
}
|
|
1276
1298
|
}
|
|
1277
1299
|
getEmptyNewFunction() {
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1300
|
+
return (0, creators_1.createClassMethodStatement)('new', TokenKind_1.TokenKind.Sub);
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* Create an empty `new` function if class is missing it (simplifies transpile logic)
|
|
1304
|
+
*/
|
|
1305
|
+
ensureConstructorFunctionExists() {
|
|
1306
|
+
if (!this.getConstructorFunction()) {
|
|
1307
|
+
this.memberMap.new = this.getEmptyNewFunction();
|
|
1308
|
+
this.body = [this.memberMap.new, ...this.body];
|
|
1309
|
+
}
|
|
1286
1310
|
}
|
|
1287
1311
|
/**
|
|
1288
1312
|
* Determine if the specified field was declared in one of the ancestor classes
|
|
@@ -1303,6 +1327,7 @@ class ClassStatement extends Statement {
|
|
|
1303
1327
|
*/
|
|
1304
1328
|
getTranspiledBuilder(state) {
|
|
1305
1329
|
var _a;
|
|
1330
|
+
this.ensureConstructorFunctionExists();
|
|
1306
1331
|
let result = [];
|
|
1307
1332
|
result.push(`function ${this.getBuilderName(this.getName(Parser_1.ParseMode.BrightScript))}()\n`);
|
|
1308
1333
|
state.blockDepth++;
|
|
@@ -1323,11 +1348,6 @@ class ClassStatement extends Statement {
|
|
|
1323
1348
|
}
|
|
1324
1349
|
result.push(state.newline, state.indent());
|
|
1325
1350
|
let parentClassIndex = this.getParentClassIndex(state);
|
|
1326
|
-
//create empty `new` function if class is missing it (simplifies transpile logic)
|
|
1327
|
-
if (!this.getConstructorFunction()) {
|
|
1328
|
-
this.memberMap.new = this.getEmptyNewFunction();
|
|
1329
|
-
this.body = [this.memberMap.new, ...this.body];
|
|
1330
|
-
}
|
|
1331
1351
|
for (let statement of this.body) {
|
|
1332
1352
|
//is field statement
|
|
1333
1353
|
if ((0, reflection_1.isClassFieldStatement)(statement)) {
|
|
@@ -1412,11 +1432,19 @@ class ClassStatement extends Statement {
|
|
|
1412
1432
|
exports.ClassStatement = ClassStatement;
|
|
1413
1433
|
class ClassMethodStatement extends FunctionStatement {
|
|
1414
1434
|
constructor(accessModifier, name, func, override) {
|
|
1415
|
-
var _a;
|
|
1416
1435
|
super(name, func, undefined);
|
|
1417
1436
|
this.accessModifier = accessModifier;
|
|
1418
1437
|
this.override = override;
|
|
1419
|
-
|
|
1438
|
+
}
|
|
1439
|
+
get range() {
|
|
1440
|
+
return this.cacheRange();
|
|
1441
|
+
}
|
|
1442
|
+
cacheRange() {
|
|
1443
|
+
var _a, _b;
|
|
1444
|
+
if (!this._range) {
|
|
1445
|
+
this._range = (_b = util_1.util.createBoundingRange(this.accessModifier, this.override, (_a = this.func) !== null && _a !== void 0 ? _a : this.name)) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
1446
|
+
}
|
|
1447
|
+
return this._range;
|
|
1420
1448
|
}
|
|
1421
1449
|
transpile(state) {
|
|
1422
1450
|
if (this.name.text.toLowerCase() === 'new') {
|
|
@@ -1532,7 +1560,7 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1532
1560
|
exports.ClassMethodStatement = ClassMethodStatement;
|
|
1533
1561
|
class ClassFieldStatement extends Statement {
|
|
1534
1562
|
constructor(accessModifier, name, as, type, equal, initialValue, namespaceName) {
|
|
1535
|
-
var _a
|
|
1563
|
+
var _a;
|
|
1536
1564
|
super();
|
|
1537
1565
|
this.accessModifier = accessModifier;
|
|
1538
1566
|
this.name = name;
|
|
@@ -1541,7 +1569,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1541
1569
|
this.equal = equal;
|
|
1542
1570
|
this.initialValue = initialValue;
|
|
1543
1571
|
this.namespaceName = namespaceName;
|
|
1544
|
-
this.range = util_1.util.
|
|
1572
|
+
this.range = (_a = util_1.util.createBoundingRange(this.accessModifier, this.name, this.as, this.type, this.equal, this.initialValue)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1545
1573
|
}
|
|
1546
1574
|
/**
|
|
1547
1575
|
* Derive a ValueKind from the type token, or the initial value.
|
|
@@ -1549,7 +1577,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1549
1577
|
*/
|
|
1550
1578
|
getType(parseMode = Parser_1.ParseMode.BrighterScript) {
|
|
1551
1579
|
if (this.type) {
|
|
1552
|
-
return
|
|
1580
|
+
return this.type.type;
|
|
1553
1581
|
}
|
|
1554
1582
|
else if ((0, reflection_1.isLiteralExpression)(this.initialValue)) {
|
|
1555
1583
|
return this.initialValue.type;
|
|
@@ -1577,7 +1605,8 @@ class ClassFieldStatement extends Statement {
|
|
|
1577
1605
|
return result;
|
|
1578
1606
|
}
|
|
1579
1607
|
walk(visitor, options) {
|
|
1580
|
-
if (
|
|
1608
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1609
|
+
(0, visitors_1.walk)(this, 'type', visitor, options);
|
|
1581
1610
|
(0, visitors_1.walk)(this, 'initialValue', visitor, options);
|
|
1582
1611
|
}
|
|
1583
1612
|
}
|
|
@@ -1585,6 +1614,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1585
1614
|
exports.ClassFieldStatement = ClassFieldStatement;
|
|
1586
1615
|
class TryCatchStatement extends Statement {
|
|
1587
1616
|
constructor(tryToken, tryBranch, catchToken, exceptionVariable, catchBranch, endTryToken) {
|
|
1617
|
+
var _a;
|
|
1588
1618
|
super();
|
|
1589
1619
|
this.tryToken = tryToken;
|
|
1590
1620
|
this.tryBranch = tryBranch;
|
|
@@ -1592,10 +1622,7 @@ class TryCatchStatement extends Statement {
|
|
|
1592
1622
|
this.exceptionVariable = exceptionVariable;
|
|
1593
1623
|
this.catchBranch = catchBranch;
|
|
1594
1624
|
this.endTryToken = endTryToken;
|
|
1595
|
-
|
|
1596
|
-
get range() {
|
|
1597
|
-
var _a, _b, _c, _d, _e;
|
|
1598
|
-
return util_1.util.createRangeFromPositions(this.tryToken.range.start, ((_e = (_d = (_c = (_b = (_a = this.endTryToken) !== null && _a !== void 0 ? _a : this.catchBranch) !== null && _b !== void 0 ? _b : this.exceptionVariable) !== null && _c !== void 0 ? _c : this.catchToken) !== null && _d !== void 0 ? _d : this.tryBranch) !== null && _e !== void 0 ? _e : this.tryToken).range.end);
|
|
1625
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tryToken, this.tryBranch, this.catchToken, this.exceptionVariable, this.catchBranch, this.endTryToken)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1599
1626
|
}
|
|
1600
1627
|
transpile(state) {
|
|
1601
1628
|
return [
|
|
@@ -1626,7 +1653,7 @@ class ThrowStatement extends Statement {
|
|
|
1626
1653
|
super();
|
|
1627
1654
|
this.throwToken = throwToken;
|
|
1628
1655
|
this.expression = expression;
|
|
1629
|
-
this.range = util_1.util.
|
|
1656
|
+
this.range = (_a = util_1.util.createBoundingRange(this.throwToken, this.expression)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1630
1657
|
}
|
|
1631
1658
|
transpile(state) {
|
|
1632
1659
|
const result = [
|
|
@@ -1650,4 +1677,152 @@ class ThrowStatement extends Statement {
|
|
|
1650
1677
|
}
|
|
1651
1678
|
}
|
|
1652
1679
|
exports.ThrowStatement = ThrowStatement;
|
|
1680
|
+
class EnumStatement extends Statement {
|
|
1681
|
+
constructor(tokens, body, namespaceName) {
|
|
1682
|
+
var _a, _b;
|
|
1683
|
+
super();
|
|
1684
|
+
this.tokens = tokens;
|
|
1685
|
+
this.body = body;
|
|
1686
|
+
this.namespaceName = namespaceName;
|
|
1687
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1688
|
+
this.body = (_b = this.body) !== null && _b !== void 0 ? _b : [];
|
|
1689
|
+
}
|
|
1690
|
+
getMembers() {
|
|
1691
|
+
const result = [];
|
|
1692
|
+
for (const statement of this.body) {
|
|
1693
|
+
if ((0, reflection_1.isEnumMemberStatement)(statement)) {
|
|
1694
|
+
result.push(statement);
|
|
1695
|
+
}
|
|
1696
|
+
}
|
|
1697
|
+
return result;
|
|
1698
|
+
}
|
|
1699
|
+
/**
|
|
1700
|
+
* Get a map of member names and their values.
|
|
1701
|
+
* All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
|
|
1702
|
+
*/
|
|
1703
|
+
getMemberValueMap() {
|
|
1704
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1705
|
+
const result = new Map();
|
|
1706
|
+
const members = this.getMembers();
|
|
1707
|
+
let currentIntValue = 0;
|
|
1708
|
+
for (const member of members) {
|
|
1709
|
+
//if there is no value, assume an integer and increment the int counter
|
|
1710
|
+
if (!member.value) {
|
|
1711
|
+
result.set((_a = member.name) === null || _a === void 0 ? void 0 : _a.toLowerCase(), currentIntValue.toString());
|
|
1712
|
+
currentIntValue++;
|
|
1713
|
+
//if explicit integer value, use it and increment the int counter
|
|
1714
|
+
}
|
|
1715
|
+
else if ((0, reflection_1.isLiteralExpression)(member.value) && member.value.token.kind === TokenKind_1.TokenKind.IntegerLiteral) {
|
|
1716
|
+
//try parsing as integer literal, then as hex integer literal.
|
|
1717
|
+
let tokenIntValue = (_b = util_1.util.parseInt(member.value.token.text)) !== null && _b !== void 0 ? _b : util_1.util.parseInt(member.value.token.text.replace(/&h/i, '0x'));
|
|
1718
|
+
if (tokenIntValue !== undefined) {
|
|
1719
|
+
currentIntValue = tokenIntValue;
|
|
1720
|
+
currentIntValue++;
|
|
1721
|
+
}
|
|
1722
|
+
result.set((_c = member.name) === null || _c === void 0 ? void 0 : _c.toLowerCase(), member.value.token.text);
|
|
1723
|
+
//all other values
|
|
1724
|
+
}
|
|
1725
|
+
else {
|
|
1726
|
+
result.set((_d = member.name) === null || _d === void 0 ? void 0 : _d.toLowerCase(), (_g = (_f = (_e = member.value) === null || _e === void 0 ? void 0 : _e.token) === null || _f === void 0 ? void 0 : _f.text) !== null && _g !== void 0 ? _g : 'invalid');
|
|
1727
|
+
}
|
|
1728
|
+
}
|
|
1729
|
+
return result;
|
|
1730
|
+
}
|
|
1731
|
+
getMemberValue(name) {
|
|
1732
|
+
return this.getMemberValueMap().get(name.toLowerCase());
|
|
1733
|
+
}
|
|
1734
|
+
/**
|
|
1735
|
+
* The name of the enum (without the namespace prefix)
|
|
1736
|
+
*/
|
|
1737
|
+
get name() {
|
|
1738
|
+
var _a;
|
|
1739
|
+
return (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1740
|
+
}
|
|
1741
|
+
/**
|
|
1742
|
+
* The name of the enum WITH its leading namespace (if applicable)
|
|
1743
|
+
*/
|
|
1744
|
+
get fullName() {
|
|
1745
|
+
var _a;
|
|
1746
|
+
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1747
|
+
if (name) {
|
|
1748
|
+
if (this.namespaceName) {
|
|
1749
|
+
let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
|
|
1750
|
+
return `${namespaceName}.${name}`;
|
|
1751
|
+
}
|
|
1752
|
+
else {
|
|
1753
|
+
return name;
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1756
|
+
else {
|
|
1757
|
+
//return undefined which will allow outside callers to know that this doesn't have a name
|
|
1758
|
+
return undefined;
|
|
1759
|
+
}
|
|
1760
|
+
}
|
|
1761
|
+
transpile(state) {
|
|
1762
|
+
//enum declarations do not exist at runtime, so don't transpile anything...
|
|
1763
|
+
return [];
|
|
1764
|
+
}
|
|
1765
|
+
getTypedef(state) {
|
|
1766
|
+
var _a, _b, _c;
|
|
1767
|
+
const result = [];
|
|
1768
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1769
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1770
|
+
}
|
|
1771
|
+
result.push((_b = this.tokens.enum.text) !== null && _b !== void 0 ? _b : 'enum', ' ', this.tokens.name.text);
|
|
1772
|
+
result.push(state.newline);
|
|
1773
|
+
state.blockDepth++;
|
|
1774
|
+
for (const member of this.body) {
|
|
1775
|
+
if ((0, reflection_1.isTypedefProvider)(member)) {
|
|
1776
|
+
result.push(state.indent(), ...member.getTypedef(state), state.newline);
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
state.blockDepth--;
|
|
1780
|
+
result.push(state.indent(), (_c = this.tokens.endEnum.text) !== null && _c !== void 0 ? _c : 'end enum');
|
|
1781
|
+
return result;
|
|
1782
|
+
}
|
|
1783
|
+
walk(visitor, options) {
|
|
1784
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1785
|
+
for (let i = 0; i < this.body.length; i++) {
|
|
1786
|
+
(0, visitors_1.walk)(this.body, i, visitor, options, this);
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
}
|
|
1790
|
+
}
|
|
1791
|
+
exports.EnumStatement = EnumStatement;
|
|
1792
|
+
class EnumMemberStatement extends Statement {
|
|
1793
|
+
constructor(tokens, value) {
|
|
1794
|
+
var _a;
|
|
1795
|
+
super();
|
|
1796
|
+
this.tokens = tokens;
|
|
1797
|
+
this.value = value;
|
|
1798
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1799
|
+
}
|
|
1800
|
+
/**
|
|
1801
|
+
* The name of the member
|
|
1802
|
+
*/
|
|
1803
|
+
get name() {
|
|
1804
|
+
return this.tokens.name.text;
|
|
1805
|
+
}
|
|
1806
|
+
transpile(state) {
|
|
1807
|
+
return [];
|
|
1808
|
+
}
|
|
1809
|
+
getTypedef(state) {
|
|
1810
|
+
const result = [
|
|
1811
|
+
this.tokens.name.text
|
|
1812
|
+
];
|
|
1813
|
+
if (this.tokens.equal) {
|
|
1814
|
+
result.push(' ', this.tokens.equal.text, ' ');
|
|
1815
|
+
if (this.value) {
|
|
1816
|
+
result.push(...this.value.transpile(state));
|
|
1817
|
+
}
|
|
1818
|
+
}
|
|
1819
|
+
return result;
|
|
1820
|
+
}
|
|
1821
|
+
walk(visitor, options) {
|
|
1822
|
+
if (this.value && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1823
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1824
|
+
}
|
|
1825
|
+
}
|
|
1826
|
+
}
|
|
1827
|
+
exports.EnumMemberStatement = EnumMemberStatement;
|
|
1653
1828
|
//# sourceMappingURL=Statement.js.map
|