brighterscript 1.0.0-alpha.13 → 1.0.0-alpha.16
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 +87 -2
- package/dist/Cache.d.ts +3 -8
- package/dist/Cache.js +9 -14
- 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/LanguageServer.d.ts +1 -6
- package/dist/LanguageServer.js +0 -9
- package/dist/LanguageServer.js.map +1 -1
- package/dist/PluginInterface.d.ts +3 -3
- package/dist/PluginInterface.js +3 -0
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +30 -16
- package/dist/Program.js +108 -43
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +3 -3
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +29 -15
- package/dist/Scope.js +68 -28
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +1 -1
- package/dist/XmlScope.d.ts +3 -3
- 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 +8 -4
- package/dist/astUtils/creators.js +87 -6
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +5 -1
- package/dist/astUtils/reflection.js +15 -3
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +11 -10
- 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 +8 -8
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +4 -1
- package/dist/bscPlugin/BscPlugin.js +21 -2
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +3 -3
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +9 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +97 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.d.ts → BrsFileSemanticTokensProcessor.spec.d.ts} +0 -0
- package/dist/bscPlugin/semanticTokens/{SemanticTokensProcessor.spec.js → BrsFileSemanticTokensProcessor.spec.js} +30 -2
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +8 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +36 -0
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.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/files/BrsFile.Class.spec.js +382 -232
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +26 -12
- package/dist/files/BrsFile.js +268 -119
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +570 -168
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +11 -10
- package/dist/files/XmlFile.js +16 -11
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +60 -58
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +8 -6
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/index.d.ts +12 -3
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +63 -35
- package/dist/lexer/Lexer.js +1 -2
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +470 -462
- 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 +18 -16
- package/dist/parser/Expression.js +57 -48
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +33 -32
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +28 -7
- package/dist/parser/Parser.js +508 -296
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +157 -35
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGTypes.spec.js +9 -9
- package/dist/parser/SGTypes.spec.js.map +1 -1
- package/dist/parser/Statement.d.ts +80 -20
- package/dist/parser/Statement.js +257 -92
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +3 -3
- package/dist/parser/tests/Parser.spec.js +4 -4
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +40 -40
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +22 -21
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +100 -99
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +25 -25
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +21 -21
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +91 -91
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +102 -102
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +15 -15
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +22 -21
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +11 -11
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +171 -171
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +50 -50
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +25 -25
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +16 -16
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +26 -26
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +27 -27
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +3 -2
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/Relational.spec.js +25 -25
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +7 -7
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +6 -6
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +20 -20
- package/dist/parser/tests/statement/Declaration.spec.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/parser/tests/statement/Function.spec.js +121 -120
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +9 -8
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +22 -22
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +12 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +7 -7
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +71 -70
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +17 -17
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +33 -33
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +53 -53
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +7 -6
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +7 -7
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/types/ArrayType.d.ts +8 -5
- package/dist/types/ArrayType.js +45 -9
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +62 -3
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +1 -1
- package/dist/types/CustomType.d.ts +1 -1
- package/dist/types/CustomType.js +4 -2
- package/dist/types/CustomType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +7 -6
- package/dist/types/FunctionType.js +21 -18
- 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/LazyType.d.ts +1 -2
- package/dist/types/LazyType.js +1 -5
- package/dist/types/LazyType.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/helpers.js +1 -1
- package/dist/types/helpers.js.map +1 -1
- package/dist/util.d.ts +26 -10
- package/dist/util.js +145 -61
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.js +17 -24
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +3 -3
- package/dist/astUtils/index.d.ts +0 -7
- package/dist/astUtils/index.js +0 -26
- package/dist/astUtils/index.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
- package/dist/lexer/index.d.ts +0 -3
- package/dist/lexer/index.js +0 -18
- package/dist/lexer/index.js.map +0 -1
- package/dist/parser/index.d.ts +0 -3
- package/dist/parser/index.js +0 -16
- package/dist/parser/index.js.map +0 -1
- package/dist/preprocessor/index.d.ts +0 -3
- package/dist/preprocessor/index.js +0 -16
- package/dist/preprocessor/index.js.map +0 -1
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;
|
|
4
|
-
const
|
|
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
|
+
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,17 +100,18 @@ 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;
|
|
115
113
|
//if the value is a compound assignment, just transpile the expression itself
|
|
116
|
-
if (
|
|
114
|
+
if (TokenKind_1.CompoundAssignmentOperators.includes((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.operator) === null || _b === void 0 ? void 0 : _b.kind)) {
|
|
117
115
|
return this.value.transpile(state);
|
|
118
116
|
}
|
|
119
117
|
else {
|
|
@@ -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 = [];
|
|
@@ -392,10 +399,11 @@ class IfStatement extends Statement {
|
|
|
392
399
|
exports.IfStatement = IfStatement;
|
|
393
400
|
class IncrementStatement extends Statement {
|
|
394
401
|
constructor(value, operator) {
|
|
402
|
+
var _a;
|
|
395
403
|
super();
|
|
396
404
|
this.value = value;
|
|
397
405
|
this.operator = operator;
|
|
398
|
-
this.range = util_1.util.
|
|
406
|
+
this.range = (_a = util_1.util.createBoundingRange(this.value, this.operator)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
399
407
|
}
|
|
400
408
|
transpile(state) {
|
|
401
409
|
return [
|
|
@@ -420,12 +428,11 @@ class PrintStatement extends Statement {
|
|
|
420
428
|
* evaluated and printed.
|
|
421
429
|
*/
|
|
422
430
|
constructor(tokens, expressions) {
|
|
431
|
+
var _a;
|
|
423
432
|
super();
|
|
424
433
|
this.tokens = tokens;
|
|
425
434
|
this.expressions = expressions;
|
|
426
|
-
this.range = util_1.util.
|
|
427
|
-
? this.expressions[this.expressions.length - 1].range.end
|
|
428
|
-
: this.tokens.print.range.end);
|
|
435
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.print, ...this.expressions)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
429
436
|
}
|
|
430
437
|
transpile(state) {
|
|
431
438
|
var _a;
|
|
@@ -462,14 +469,14 @@ class PrintStatement extends Statement {
|
|
|
462
469
|
exports.PrintStatement = PrintStatement;
|
|
463
470
|
class DimStatement extends Statement {
|
|
464
471
|
constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
|
|
465
|
-
var _a
|
|
472
|
+
var _a;
|
|
466
473
|
super();
|
|
467
474
|
this.dimToken = dimToken;
|
|
468
475
|
this.identifier = identifier;
|
|
469
476
|
this.openingSquare = openingSquare;
|
|
470
477
|
this.dimensions = dimensions;
|
|
471
478
|
this.closingSquare = closingSquare;
|
|
472
|
-
this.range = util_1.util.
|
|
479
|
+
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
480
|
}
|
|
474
481
|
transpile(state) {
|
|
475
482
|
let result = [
|
|
@@ -499,9 +506,10 @@ class DimStatement extends Statement {
|
|
|
499
506
|
exports.DimStatement = DimStatement;
|
|
500
507
|
class GotoStatement extends Statement {
|
|
501
508
|
constructor(tokens) {
|
|
509
|
+
var _a;
|
|
502
510
|
super();
|
|
503
511
|
this.tokens = tokens;
|
|
504
|
-
this.range = util_1.util.
|
|
512
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.goto, this.tokens.label)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
505
513
|
}
|
|
506
514
|
transpile(state) {
|
|
507
515
|
return [
|
|
@@ -517,9 +525,10 @@ class GotoStatement extends Statement {
|
|
|
517
525
|
exports.GotoStatement = GotoStatement;
|
|
518
526
|
class LabelStatement extends Statement {
|
|
519
527
|
constructor(tokens) {
|
|
528
|
+
var _a;
|
|
520
529
|
super();
|
|
521
530
|
this.tokens = tokens;
|
|
522
|
-
this.range = util_1.util.
|
|
531
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.identifier, this.tokens.colon)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
523
532
|
}
|
|
524
533
|
transpile(state) {
|
|
525
534
|
return [
|
|
@@ -538,7 +547,7 @@ class ReturnStatement extends Statement {
|
|
|
538
547
|
super();
|
|
539
548
|
this.tokens = tokens;
|
|
540
549
|
this.value = value;
|
|
541
|
-
this.range = util_1.util.
|
|
550
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.return, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
542
551
|
}
|
|
543
552
|
transpile(state) {
|
|
544
553
|
let result = [];
|
|
@@ -558,9 +567,10 @@ class ReturnStatement extends Statement {
|
|
|
558
567
|
exports.ReturnStatement = ReturnStatement;
|
|
559
568
|
class EndStatement extends Statement {
|
|
560
569
|
constructor(tokens) {
|
|
570
|
+
var _a, _b;
|
|
561
571
|
super();
|
|
562
572
|
this.tokens = tokens;
|
|
563
|
-
this.range =
|
|
573
|
+
this.range = (_b = (_a = this.tokens.end) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
564
574
|
}
|
|
565
575
|
transpile(state) {
|
|
566
576
|
return [
|
|
@@ -574,9 +584,10 @@ class EndStatement extends Statement {
|
|
|
574
584
|
exports.EndStatement = EndStatement;
|
|
575
585
|
class StopStatement extends Statement {
|
|
576
586
|
constructor(tokens) {
|
|
587
|
+
var _a, _b;
|
|
577
588
|
super();
|
|
578
589
|
this.tokens = tokens;
|
|
579
|
-
this.range =
|
|
590
|
+
this.range = (_b = (_a = this.tokens.stop) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
580
591
|
}
|
|
581
592
|
transpile(state) {
|
|
582
593
|
return [
|
|
@@ -590,7 +601,7 @@ class StopStatement extends Statement {
|
|
|
590
601
|
exports.StopStatement = StopStatement;
|
|
591
602
|
class ForStatement extends Statement {
|
|
592
603
|
constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
|
|
593
|
-
var _a
|
|
604
|
+
var _a;
|
|
594
605
|
super();
|
|
595
606
|
this.forToken = forToken;
|
|
596
607
|
this.counterDeclaration = counterDeclaration;
|
|
@@ -600,8 +611,7 @@ class ForStatement extends Statement {
|
|
|
600
611
|
this.endForToken = endForToken;
|
|
601
612
|
this.stepToken = stepToken;
|
|
602
613
|
this.increment = increment;
|
|
603
|
-
|
|
604
|
-
this.range = util_1.util.createRangeFromPositions(this.forToken.range.start, lastRange.end);
|
|
614
|
+
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
615
|
}
|
|
606
616
|
transpile(state) {
|
|
607
617
|
let result = [];
|
|
@@ -621,9 +631,8 @@ class ForStatement extends Statement {
|
|
|
621
631
|
state.lineage.unshift(this);
|
|
622
632
|
result.push(...this.body.transpile(state));
|
|
623
633
|
state.lineage.shift();
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
}
|
|
634
|
+
// add new line before "end for"
|
|
635
|
+
result.push('\n');
|
|
627
636
|
//end for
|
|
628
637
|
result.push(state.indent(), state.transpileToken(this.endForToken));
|
|
629
638
|
return result;
|
|
@@ -644,7 +653,7 @@ class ForStatement extends Statement {
|
|
|
644
653
|
exports.ForStatement = ForStatement;
|
|
645
654
|
class ForEachStatement extends Statement {
|
|
646
655
|
constructor(forEachToken, item, inToken, target, body, endForToken) {
|
|
647
|
-
var _a
|
|
656
|
+
var _a;
|
|
648
657
|
super();
|
|
649
658
|
this.forEachToken = forEachToken;
|
|
650
659
|
this.item = item;
|
|
@@ -652,7 +661,7 @@ class ForEachStatement extends Statement {
|
|
|
652
661
|
this.target = target;
|
|
653
662
|
this.body = body;
|
|
654
663
|
this.endForToken = endForToken;
|
|
655
|
-
this.range = util_1.util.
|
|
664
|
+
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
665
|
}
|
|
657
666
|
transpile(state) {
|
|
658
667
|
let result = [];
|
|
@@ -668,9 +677,8 @@ class ForEachStatement extends Statement {
|
|
|
668
677
|
state.lineage.unshift(this);
|
|
669
678
|
result.push(...this.body.transpile(state));
|
|
670
679
|
state.lineage.shift();
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
}
|
|
680
|
+
// add new line before "end for"
|
|
681
|
+
result.push('\n');
|
|
674
682
|
//end for
|
|
675
683
|
result.push(state.indent(), state.transpileToken(this.endForToken));
|
|
676
684
|
return result;
|
|
@@ -687,13 +695,12 @@ class ForEachStatement extends Statement {
|
|
|
687
695
|
exports.ForEachStatement = ForEachStatement;
|
|
688
696
|
class WhileStatement extends Statement {
|
|
689
697
|
constructor(tokens, condition, body) {
|
|
690
|
-
var _a
|
|
698
|
+
var _a;
|
|
691
699
|
super();
|
|
692
700
|
this.tokens = tokens;
|
|
693
701
|
this.condition = condition;
|
|
694
702
|
this.body = body;
|
|
695
|
-
|
|
696
|
-
this.range = util_1.util.createRangeFromPositions(this.tokens.while.range.start, lastRange.end);
|
|
703
|
+
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
704
|
}
|
|
698
705
|
transpile(state) {
|
|
699
706
|
let result = [];
|
|
@@ -722,17 +729,20 @@ class WhileStatement extends Statement {
|
|
|
722
729
|
}
|
|
723
730
|
exports.WhileStatement = WhileStatement;
|
|
724
731
|
class DottedSetStatement extends Statement {
|
|
725
|
-
constructor(obj, name, value) {
|
|
732
|
+
constructor(obj, name, value, dot, operator) {
|
|
733
|
+
var _a;
|
|
726
734
|
super();
|
|
727
735
|
this.obj = obj;
|
|
728
736
|
this.name = name;
|
|
729
737
|
this.value = value;
|
|
730
|
-
this.
|
|
738
|
+
this.dot = dot;
|
|
739
|
+
this.operator = operator;
|
|
740
|
+
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
741
|
}
|
|
732
742
|
transpile(state) {
|
|
733
743
|
var _a, _b;
|
|
734
744
|
//if the value is a compound assignment, don't add the obj, dot, name, or operator...the expression will handle that
|
|
735
|
-
if (
|
|
745
|
+
if (TokenKind_1.CompoundAssignmentOperators.includes((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.operator) === null || _b === void 0 ? void 0 : _b.kind)) {
|
|
736
746
|
return this.value.transpile(state);
|
|
737
747
|
}
|
|
738
748
|
else {
|
|
@@ -757,19 +767,21 @@ class DottedSetStatement extends Statement {
|
|
|
757
767
|
}
|
|
758
768
|
exports.DottedSetStatement = DottedSetStatement;
|
|
759
769
|
class IndexedSetStatement extends Statement {
|
|
760
|
-
constructor(obj, index, value, openingSquare, closingSquare) {
|
|
770
|
+
constructor(obj, index, value, openingSquare, closingSquare, operator) {
|
|
771
|
+
var _a;
|
|
761
772
|
super();
|
|
762
773
|
this.obj = obj;
|
|
763
774
|
this.index = index;
|
|
764
775
|
this.value = value;
|
|
765
776
|
this.openingSquare = openingSquare;
|
|
766
777
|
this.closingSquare = closingSquare;
|
|
767
|
-
this.
|
|
778
|
+
this.operator = operator;
|
|
779
|
+
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
780
|
}
|
|
769
781
|
transpile(state) {
|
|
770
782
|
var _a, _b;
|
|
771
783
|
//if the value is a component assignment, don't add the obj, index or operator...the expression will handle that
|
|
772
|
-
if (
|
|
784
|
+
if (TokenKind_1.CompoundAssignmentOperators.includes((_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.operator) === null || _b === void 0 ? void 0 : _b.kind)) {
|
|
773
785
|
return this.value.transpile(state);
|
|
774
786
|
}
|
|
775
787
|
else {
|
|
@@ -800,9 +812,10 @@ class IndexedSetStatement extends Statement {
|
|
|
800
812
|
exports.IndexedSetStatement = IndexedSetStatement;
|
|
801
813
|
class LibraryStatement extends Statement {
|
|
802
814
|
constructor(tokens) {
|
|
815
|
+
var _a;
|
|
803
816
|
super();
|
|
804
817
|
this.tokens = tokens;
|
|
805
|
-
this.range = util_1.util.
|
|
818
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.library, this.tokens.filePath)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
806
819
|
}
|
|
807
820
|
transpile(state) {
|
|
808
821
|
let result = [];
|
|
@@ -835,8 +848,14 @@ class NamespaceStatement extends Statement {
|
|
|
835
848
|
this.symbolTable = new SymbolTable_1.SymbolTable(parentSymbolTable);
|
|
836
849
|
}
|
|
837
850
|
get range() {
|
|
838
|
-
|
|
839
|
-
|
|
851
|
+
return this.cacheRange();
|
|
852
|
+
}
|
|
853
|
+
cacheRange() {
|
|
854
|
+
var _a;
|
|
855
|
+
if (!this._range) {
|
|
856
|
+
this._range = (_a = util_1.util.createBoundingRange(this.keyword, this.nameExpression, this.body, this.endKeyword)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
857
|
+
}
|
|
858
|
+
return this._range;
|
|
840
859
|
}
|
|
841
860
|
getName(parseMode) {
|
|
842
861
|
return this.nameExpression.getName(parseMode);
|
|
@@ -869,10 +888,11 @@ class NamespaceStatement extends Statement {
|
|
|
869
888
|
exports.NamespaceStatement = NamespaceStatement;
|
|
870
889
|
class ImportStatement extends Statement {
|
|
871
890
|
constructor(importToken, filePathToken) {
|
|
891
|
+
var _a;
|
|
872
892
|
super();
|
|
873
893
|
this.importToken = importToken;
|
|
874
894
|
this.filePathToken = filePathToken;
|
|
875
|
-
this.range = util_1.util.
|
|
895
|
+
this.range = (_a = util_1.util.createBoundingRange(this.importToken, this.filePathToken)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
876
896
|
if (this.filePathToken) {
|
|
877
897
|
//remove quotes
|
|
878
898
|
this.filePath = this.filePathToken.text.replace(/"/g, '');
|
|
@@ -908,6 +928,7 @@ class ImportStatement extends Statement {
|
|
|
908
928
|
exports.ImportStatement = ImportStatement;
|
|
909
929
|
class InterfaceStatement extends Statement {
|
|
910
930
|
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken, namespaceName) {
|
|
931
|
+
var _a;
|
|
911
932
|
super();
|
|
912
933
|
this.parentInterfaceName = parentInterfaceName;
|
|
913
934
|
this.body = body;
|
|
@@ -917,6 +938,7 @@ class InterfaceStatement extends Statement {
|
|
|
917
938
|
this.tokens.name = name;
|
|
918
939
|
this.tokens.extends = extendsToken;
|
|
919
940
|
this.tokens.endInterface = endInterfaceToken;
|
|
941
|
+
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
942
|
}
|
|
921
943
|
get fields() {
|
|
922
944
|
return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
|
|
@@ -995,20 +1017,18 @@ class InterfaceStatement extends Statement {
|
|
|
995
1017
|
exports.InterfaceStatement = InterfaceStatement;
|
|
996
1018
|
class InterfaceFieldStatement extends Statement {
|
|
997
1019
|
constructor(nameToken, asToken, typeToken, type) {
|
|
1020
|
+
var _a;
|
|
998
1021
|
super();
|
|
999
1022
|
this.type = type;
|
|
1000
1023
|
this.tokens = {};
|
|
1001
1024
|
this.tokens.name = nameToken;
|
|
1002
1025
|
this.tokens.as = asToken;
|
|
1003
1026
|
this.tokens.type = typeToken;
|
|
1027
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.name, this.tokens.as, this.tokens.type)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1004
1028
|
}
|
|
1005
1029
|
transpile(state) {
|
|
1006
1030
|
throw new Error('Method not implemented.');
|
|
1007
1031
|
}
|
|
1008
|
-
get range() {
|
|
1009
|
-
var _a, _b;
|
|
1010
|
-
return util_1.util.createRangeFromPositions(this.tokens.name.range.start, ((_b = (_a = this.tokens.type) !== null && _a !== void 0 ? _a : this.tokens.as) !== null && _b !== void 0 ? _b : this.tokens.name).range.end);
|
|
1011
|
-
}
|
|
1012
1032
|
get name() {
|
|
1013
1033
|
return this.tokens.name.text;
|
|
1014
1034
|
}
|
|
@@ -1031,6 +1051,7 @@ class InterfaceFieldStatement extends Statement {
|
|
|
1031
1051
|
exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
1032
1052
|
class InterfaceMethodStatement extends Statement {
|
|
1033
1053
|
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeToken, returnType) {
|
|
1054
|
+
var _a;
|
|
1034
1055
|
super();
|
|
1035
1056
|
this.params = params;
|
|
1036
1057
|
this.returnType = returnType;
|
|
@@ -1041,13 +1062,7 @@ class InterfaceMethodStatement extends Statement {
|
|
|
1041
1062
|
this.tokens.rightParen = rightParen;
|
|
1042
1063
|
this.tokens.as = asToken;
|
|
1043
1064
|
this.tokens.returnType = returnTypeToken;
|
|
1044
|
-
|
|
1045
|
-
transpile(state) {
|
|
1046
|
-
throw new Error('Method not implemented.');
|
|
1047
|
-
}
|
|
1048
|
-
get range() {
|
|
1049
|
-
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
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);
|
|
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.tokens.returnType)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1051
1066
|
}
|
|
1052
1067
|
walk(visitor, options) {
|
|
1053
1068
|
//nothing to walk
|
|
@@ -1076,6 +1091,9 @@ class InterfaceMethodStatement extends Statement {
|
|
|
1076
1091
|
}
|
|
1077
1092
|
return result;
|
|
1078
1093
|
}
|
|
1094
|
+
transpile(state) {
|
|
1095
|
+
throw new Error('Method not implemented.');
|
|
1096
|
+
}
|
|
1079
1097
|
}
|
|
1080
1098
|
exports.InterfaceMethodStatement = InterfaceMethodStatement;
|
|
1081
1099
|
class ClassStatement extends Statement {
|
|
@@ -1084,7 +1102,7 @@ class ClassStatement extends Statement {
|
|
|
1084
1102
|
* The name of the class (without namespace prefix)
|
|
1085
1103
|
*/
|
|
1086
1104
|
name, body, end, extendsKeyword, parentClassName, namespaceName, currentSymbolTable) {
|
|
1087
|
-
var _a, _b, _c;
|
|
1105
|
+
var _a, _b, _c, _d;
|
|
1088
1106
|
super();
|
|
1089
1107
|
this.classKeyword = classKeyword;
|
|
1090
1108
|
this.name = name;
|
|
@@ -1101,15 +1119,15 @@ class ClassStatement extends Statement {
|
|
|
1101
1119
|
this.fields = [];
|
|
1102
1120
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1103
1121
|
this.symbolTable.setParent(currentSymbolTable);
|
|
1104
|
-
this.range = util_1.util.
|
|
1122
|
+
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
1123
|
for (let statement of this.body) {
|
|
1106
1124
|
if ((0, reflection_1.isClassMethodStatement)(statement)) {
|
|
1107
1125
|
this.methods.push(statement);
|
|
1108
|
-
this.memberMap[(
|
|
1126
|
+
this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
|
|
1109
1127
|
}
|
|
1110
1128
|
else if ((0, reflection_1.isClassFieldStatement)(statement)) {
|
|
1111
1129
|
this.fields.push(statement);
|
|
1112
|
-
this.memberMap[(
|
|
1130
|
+
this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
|
|
1113
1131
|
}
|
|
1114
1132
|
}
|
|
1115
1133
|
}
|
|
@@ -1275,14 +1293,7 @@ class ClassStatement extends Statement {
|
|
|
1275
1293
|
}
|
|
1276
1294
|
}
|
|
1277
1295
|
getEmptyNewFunction() {
|
|
1278
|
-
|
|
1279
|
-
class UtilClass
|
|
1280
|
-
sub new()
|
|
1281
|
-
end sub
|
|
1282
|
-
end class
|
|
1283
|
-
`, { mode: Parser_1.ParseMode.BrighterScript }).statements[0].memberMap.new;
|
|
1284
|
-
//TODO make locations point to 0,0 (might not matter?)
|
|
1285
|
-
return stmt;
|
|
1296
|
+
return (0, creators_1.createClassMethodStatement)('new', TokenKind_1.TokenKind.Sub);
|
|
1286
1297
|
}
|
|
1287
1298
|
/**
|
|
1288
1299
|
* Determine if the specified field was declared in one of the ancestor classes
|
|
@@ -1412,11 +1423,19 @@ class ClassStatement extends Statement {
|
|
|
1412
1423
|
exports.ClassStatement = ClassStatement;
|
|
1413
1424
|
class ClassMethodStatement extends FunctionStatement {
|
|
1414
1425
|
constructor(accessModifier, name, func, override) {
|
|
1415
|
-
var _a;
|
|
1416
1426
|
super(name, func, undefined);
|
|
1417
1427
|
this.accessModifier = accessModifier;
|
|
1418
1428
|
this.override = override;
|
|
1419
|
-
|
|
1429
|
+
}
|
|
1430
|
+
get range() {
|
|
1431
|
+
return this.cacheRange();
|
|
1432
|
+
}
|
|
1433
|
+
cacheRange() {
|
|
1434
|
+
var _a, _b;
|
|
1435
|
+
if (!this._range) {
|
|
1436
|
+
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;
|
|
1437
|
+
}
|
|
1438
|
+
return this._range;
|
|
1420
1439
|
}
|
|
1421
1440
|
transpile(state) {
|
|
1422
1441
|
if (this.name.text.toLowerCase() === 'new') {
|
|
@@ -1484,19 +1503,19 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1484
1503
|
}
|
|
1485
1504
|
//this is a child class, and the first statement isn't a call to super. Inject one
|
|
1486
1505
|
this.func.body.statements.unshift(new ExpressionStatement(new Expression_1.CallExpression(new Expression_1.VariableExpression({
|
|
1487
|
-
kind:
|
|
1506
|
+
kind: TokenKind_1.TokenKind.Identifier,
|
|
1488
1507
|
text: 'super',
|
|
1489
1508
|
isReserved: false,
|
|
1490
1509
|
range: state.classStatement.name.range,
|
|
1491
1510
|
leadingWhitespace: ''
|
|
1492
1511
|
}, null), {
|
|
1493
|
-
kind:
|
|
1512
|
+
kind: TokenKind_1.TokenKind.LeftParen,
|
|
1494
1513
|
text: '(',
|
|
1495
1514
|
isReserved: false,
|
|
1496
1515
|
range: state.classStatement.name.range,
|
|
1497
1516
|
leadingWhitespace: ''
|
|
1498
1517
|
}, {
|
|
1499
|
-
kind:
|
|
1518
|
+
kind: TokenKind_1.TokenKind.RightParen,
|
|
1500
1519
|
text: ')',
|
|
1501
1520
|
isReserved: false,
|
|
1502
1521
|
range: state.classStatement.name.range,
|
|
@@ -1518,7 +1537,7 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1518
1537
|
}
|
|
1519
1538
|
else {
|
|
1520
1539
|
//if there is no initial value, set the initial value to `invalid`
|
|
1521
|
-
newStatements.push(new AssignmentStatement(thisQualifiedName, (0, creators_1.createToken)(
|
|
1540
|
+
newStatements.push(new AssignmentStatement(thisQualifiedName, (0, creators_1.createToken)(TokenKind_1.TokenKind.Equal, '=', field.name.range), (0, creators_1.createInvalidLiteral)('invalid', field.name.range), this.func));
|
|
1522
1541
|
}
|
|
1523
1542
|
}
|
|
1524
1543
|
this.func.body.statements.splice(startingIndex, 0, ...newStatements);
|
|
@@ -1532,7 +1551,7 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1532
1551
|
exports.ClassMethodStatement = ClassMethodStatement;
|
|
1533
1552
|
class ClassFieldStatement extends Statement {
|
|
1534
1553
|
constructor(accessModifier, name, as, type, equal, initialValue, namespaceName) {
|
|
1535
|
-
var _a
|
|
1554
|
+
var _a;
|
|
1536
1555
|
super();
|
|
1537
1556
|
this.accessModifier = accessModifier;
|
|
1538
1557
|
this.name = name;
|
|
@@ -1541,7 +1560,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1541
1560
|
this.equal = equal;
|
|
1542
1561
|
this.initialValue = initialValue;
|
|
1543
1562
|
this.namespaceName = namespaceName;
|
|
1544
|
-
this.range = util_1.util.
|
|
1563
|
+
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
1564
|
}
|
|
1546
1565
|
/**
|
|
1547
1566
|
* Derive a ValueKind from the type token, or the initial value.
|
|
@@ -1585,6 +1604,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1585
1604
|
exports.ClassFieldStatement = ClassFieldStatement;
|
|
1586
1605
|
class TryCatchStatement extends Statement {
|
|
1587
1606
|
constructor(tryToken, tryBranch, catchToken, exceptionVariable, catchBranch, endTryToken) {
|
|
1607
|
+
var _a;
|
|
1588
1608
|
super();
|
|
1589
1609
|
this.tryToken = tryToken;
|
|
1590
1610
|
this.tryBranch = tryBranch;
|
|
@@ -1592,10 +1612,7 @@ class TryCatchStatement extends Statement {
|
|
|
1592
1612
|
this.exceptionVariable = exceptionVariable;
|
|
1593
1613
|
this.catchBranch = catchBranch;
|
|
1594
1614
|
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);
|
|
1615
|
+
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
1616
|
}
|
|
1600
1617
|
transpile(state) {
|
|
1601
1618
|
return [
|
|
@@ -1626,7 +1643,7 @@ class ThrowStatement extends Statement {
|
|
|
1626
1643
|
super();
|
|
1627
1644
|
this.throwToken = throwToken;
|
|
1628
1645
|
this.expression = expression;
|
|
1629
|
-
this.range = util_1.util.
|
|
1646
|
+
this.range = (_a = util_1.util.createBoundingRange(this.throwToken, this.expression)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1630
1647
|
}
|
|
1631
1648
|
transpile(state) {
|
|
1632
1649
|
const result = [
|
|
@@ -1650,4 +1667,152 @@ class ThrowStatement extends Statement {
|
|
|
1650
1667
|
}
|
|
1651
1668
|
}
|
|
1652
1669
|
exports.ThrowStatement = ThrowStatement;
|
|
1670
|
+
class EnumStatement extends Statement {
|
|
1671
|
+
constructor(tokens, body, namespaceName) {
|
|
1672
|
+
var _a, _b;
|
|
1673
|
+
super();
|
|
1674
|
+
this.tokens = tokens;
|
|
1675
|
+
this.body = body;
|
|
1676
|
+
this.namespaceName = namespaceName;
|
|
1677
|
+
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;
|
|
1678
|
+
this.body = (_b = this.body) !== null && _b !== void 0 ? _b : [];
|
|
1679
|
+
}
|
|
1680
|
+
getMembers() {
|
|
1681
|
+
const result = [];
|
|
1682
|
+
for (const statement of this.body) {
|
|
1683
|
+
if ((0, reflection_1.isEnumMemberStatement)(statement)) {
|
|
1684
|
+
result.push(statement);
|
|
1685
|
+
}
|
|
1686
|
+
}
|
|
1687
|
+
return result;
|
|
1688
|
+
}
|
|
1689
|
+
/**
|
|
1690
|
+
* Get a map of member names and their values.
|
|
1691
|
+
* All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
|
|
1692
|
+
*/
|
|
1693
|
+
getMemberValueMap() {
|
|
1694
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
1695
|
+
const result = new Map();
|
|
1696
|
+
const members = this.getMembers();
|
|
1697
|
+
let currentIntValue = 0;
|
|
1698
|
+
for (const member of members) {
|
|
1699
|
+
//if there is no value, assume an integer and increment the int counter
|
|
1700
|
+
if (!member.value) {
|
|
1701
|
+
result.set((_a = member.name) === null || _a === void 0 ? void 0 : _a.toLowerCase(), currentIntValue.toString());
|
|
1702
|
+
currentIntValue++;
|
|
1703
|
+
//if explicit integer value, use it and increment the int counter
|
|
1704
|
+
}
|
|
1705
|
+
else if ((0, reflection_1.isLiteralExpression)(member.value) && member.value.token.kind === TokenKind_1.TokenKind.IntegerLiteral) {
|
|
1706
|
+
//try parsing as integer literal, then as hex integer literal.
|
|
1707
|
+
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'));
|
|
1708
|
+
if (tokenIntValue !== undefined) {
|
|
1709
|
+
currentIntValue = tokenIntValue;
|
|
1710
|
+
currentIntValue++;
|
|
1711
|
+
}
|
|
1712
|
+
result.set((_c = member.name) === null || _c === void 0 ? void 0 : _c.toLowerCase(), member.value.token.text);
|
|
1713
|
+
//all other values
|
|
1714
|
+
}
|
|
1715
|
+
else {
|
|
1716
|
+
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');
|
|
1717
|
+
}
|
|
1718
|
+
}
|
|
1719
|
+
return result;
|
|
1720
|
+
}
|
|
1721
|
+
getMemberValue(name) {
|
|
1722
|
+
return this.getMemberValueMap().get(name.toLowerCase());
|
|
1723
|
+
}
|
|
1724
|
+
/**
|
|
1725
|
+
* The name of the enum (without the namespace prefix)
|
|
1726
|
+
*/
|
|
1727
|
+
get name() {
|
|
1728
|
+
var _a;
|
|
1729
|
+
return (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1730
|
+
}
|
|
1731
|
+
/**
|
|
1732
|
+
* The name of the enum WITH its leading namespace (if applicable)
|
|
1733
|
+
*/
|
|
1734
|
+
get fullName() {
|
|
1735
|
+
var _a;
|
|
1736
|
+
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1737
|
+
if (name) {
|
|
1738
|
+
if (this.namespaceName) {
|
|
1739
|
+
let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
|
|
1740
|
+
return `${namespaceName}.${name}`;
|
|
1741
|
+
}
|
|
1742
|
+
else {
|
|
1743
|
+
return name;
|
|
1744
|
+
}
|
|
1745
|
+
}
|
|
1746
|
+
else {
|
|
1747
|
+
//return undefined which will allow outside callers to know that this doesn't have a name
|
|
1748
|
+
return undefined;
|
|
1749
|
+
}
|
|
1750
|
+
}
|
|
1751
|
+
transpile(state) {
|
|
1752
|
+
//enum declarations do not exist at runtime, so don't transpile anything...
|
|
1753
|
+
return [];
|
|
1754
|
+
}
|
|
1755
|
+
getTypedef(state) {
|
|
1756
|
+
var _a, _b, _c;
|
|
1757
|
+
const result = [];
|
|
1758
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1759
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1760
|
+
}
|
|
1761
|
+
result.push((_b = this.tokens.enum.text) !== null && _b !== void 0 ? _b : 'enum', ' ', this.tokens.name.text);
|
|
1762
|
+
result.push(state.newline);
|
|
1763
|
+
state.blockDepth++;
|
|
1764
|
+
for (const member of this.body) {
|
|
1765
|
+
if ((0, reflection_1.isTypedefProvider)(member)) {
|
|
1766
|
+
result.push(state.indent(), ...member.getTypedef(state), state.newline);
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
state.blockDepth--;
|
|
1770
|
+
result.push(state.indent(), (_c = this.tokens.endEnum.text) !== null && _c !== void 0 ? _c : 'end enum');
|
|
1771
|
+
return result;
|
|
1772
|
+
}
|
|
1773
|
+
walk(visitor, options) {
|
|
1774
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1775
|
+
for (let i = 0; i < this.body.length; i++) {
|
|
1776
|
+
(0, visitors_1.walk)(this.body, i, visitor, options, this);
|
|
1777
|
+
}
|
|
1778
|
+
}
|
|
1779
|
+
}
|
|
1780
|
+
}
|
|
1781
|
+
exports.EnumStatement = EnumStatement;
|
|
1782
|
+
class EnumMemberStatement extends Statement {
|
|
1783
|
+
constructor(tokens, value) {
|
|
1784
|
+
var _a;
|
|
1785
|
+
super();
|
|
1786
|
+
this.tokens = tokens;
|
|
1787
|
+
this.value = value;
|
|
1788
|
+
this.range = (_a = util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value)) !== null && _a !== void 0 ? _a : creators_1.interpolatedRange;
|
|
1789
|
+
}
|
|
1790
|
+
/**
|
|
1791
|
+
* The name of the member
|
|
1792
|
+
*/
|
|
1793
|
+
get name() {
|
|
1794
|
+
return this.tokens.name.text;
|
|
1795
|
+
}
|
|
1796
|
+
transpile(state) {
|
|
1797
|
+
return [];
|
|
1798
|
+
}
|
|
1799
|
+
getTypedef(state) {
|
|
1800
|
+
const result = [
|
|
1801
|
+
this.tokens.name.text
|
|
1802
|
+
];
|
|
1803
|
+
if (this.tokens.equal) {
|
|
1804
|
+
result.push(' ', this.tokens.equal.text, ' ');
|
|
1805
|
+
if (this.value) {
|
|
1806
|
+
result.push(...this.value.transpile(state));
|
|
1807
|
+
}
|
|
1808
|
+
}
|
|
1809
|
+
return result;
|
|
1810
|
+
}
|
|
1811
|
+
walk(visitor, options) {
|
|
1812
|
+
if (this.value && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1813
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1814
|
+
}
|
|
1815
|
+
}
|
|
1816
|
+
}
|
|
1817
|
+
exports.EnumMemberStatement = EnumMemberStatement;
|
|
1653
1818
|
//# sourceMappingURL=Statement.js.map
|