brighterscript 1.0.0-alpha.26 → 1.0.0-alpha.28
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 +82 -5
- package/README.md +1 -1
- package/dist/AstValidationSegmenter.d.ts +1 -1
- package/dist/AstValidationSegmenter.js +4 -5
- package/dist/AstValidationSegmenter.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +7 -4
- package/dist/DiagnosticFilterer.js +67 -37
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +1 -3
- package/dist/DiagnosticMessages.js +5 -8
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/PluginInterface.js +1 -1
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +1 -1
- package/dist/Program.js +34 -31
- package/dist/Program.js.map +1 -1
- package/dist/Scope.d.ts +7 -34
- package/dist/Scope.js +45 -305
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +1 -8
- package/dist/SymbolTable.js +1 -10
- package/dist/SymbolTable.js.map +1 -1
- package/dist/SymbolTypeFlag.d.ts +8 -0
- package/dist/SymbolTypeFlag.js +13 -0
- package/dist/SymbolTypeFlag.js.map +1 -0
- package/dist/XmlScope.d.ts +0 -8
- package/dist/XmlScope.js +6 -84
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +1 -2
- package/dist/astUtils/CachedLookups.js +4 -19
- package/dist/astUtils/CachedLookups.js.map +1 -1
- package/dist/astUtils/creators.d.ts +1 -0
- package/dist/astUtils/creators.js +48 -8
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +0 -10
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +3 -2
- package/dist/astUtils/reflection.js +11 -7
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +11 -16
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +1 -2
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +1 -5
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +2 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/SignatureHelpUtil.js +4 -3
- package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js +46 -29
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +39 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.js +30 -10
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +125 -7
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
- package/dist/bscPlugin/references/ReferencesProvider.js +56 -0
- package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
- package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
- package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
- package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -3
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +25 -31
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +34 -1
- package/dist/bscPlugin/validation/ScopeValidator.js +435 -27
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +178 -10
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +1 -1
- package/dist/files/BrsFile.Class.spec.js +15 -7
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +14 -5
- package/dist/files/BrsFile.js +83 -150
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +429 -162
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +2 -3
- package/dist/files/XmlFile.js +1 -3
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +117 -85
- package/dist/interfaces.js +9 -9
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +9 -3
- package/dist/lexer/Lexer.js +36 -15
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +76 -38
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.js +1 -1
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +1 -0
- package/dist/lexer/TokenKind.js +4 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +1 -2
- package/dist/parser/AstNode.js +0 -1
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/BrsTranspileState.d.ts +1 -1
- package/dist/parser/Expression.d.ts +153 -135
- package/dist/parser/Expression.js +204 -114
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +15 -16
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +8 -4
- package/dist/parser/Parser.js +108 -149
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +48 -72
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.js +49 -35
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +36 -24
- package/dist/parser/SGTypes.js +31 -60
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +214 -207
- package/dist/parser/Statement.js +248 -169
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +0 -13
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +17 -8
- package/dist/parser/TranspileState.js +64 -6
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +1 -1
- package/dist/parser/tests/Parser.spec.js +1 -2
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +1 -3
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +44 -0
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +6 -6
- package/dist/parser/tests/expression/TernaryExpression.spec.js +47 -0
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TypeExpression.spec.js +8 -9
- package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +2 -2
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +8 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +25 -5
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +9 -2
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.js +1 -2
- package/dist/preprocessor/Chunk.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.js +2 -1
- package/dist/preprocessor/PreprocessorParser.js.map +1 -1
- package/dist/roku-types/data.json +70 -52
- package/dist/roku-types/index.d.ts +43 -21
- package/dist/types/ArrayType.js +1 -2
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +7 -8
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +3 -0
- package/dist/types/AssociativeArrayType.js +10 -2
- package/dist/types/AssociativeArrayType.js.map +1 -1
- package/dist/types/BscType.d.ts +1 -1
- package/dist/types/BscType.js +3 -3
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.js +7 -8
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.spec.js +31 -32
- package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -1
- package/dist/types/ClassType.spec.js +10 -11
- package/dist/types/ClassType.spec.js.map +1 -1
- package/dist/types/ComponentType.d.ts +2 -1
- package/dist/types/ComponentType.js.map +1 -1
- package/dist/types/EnumType.js +2 -3
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/InheritableType.js +3 -4
- package/dist/types/InheritableType.js.map +1 -1
- package/dist/types/InterfaceType.js +2 -3
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +3 -4
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/ObjectType.js +1 -2
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +1 -1
- package/dist/types/ReferenceType.spec.js +21 -22
- package/dist/types/ReferenceType.spec.js.map +1 -1
- package/dist/types/UnionType.js +3 -3
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/UnionType.spec.js +37 -38
- package/dist/types/UnionType.spec.js.map +1 -1
- package/dist/types/helper.spec.js +4 -5
- package/dist/types/helper.spec.js.map +1 -1
- package/dist/util.d.ts +21 -11
- package/dist/util.js +116 -37
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +0 -9
- package/dist/validators/ClassValidator.js +3 -46
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +6 -3
package/dist/parser/Statement.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = 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.
|
|
3
|
+
exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.FieldStatement = exports.MethodStatement = 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.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
|
|
4
4
|
const TokenKind_1 = require("../lexer/TokenKind");
|
|
5
5
|
const Expression_1 = require("./Expression");
|
|
6
6
|
const util_1 = require("../util");
|
|
@@ -8,10 +8,9 @@ const Parser_1 = require("./Parser");
|
|
|
8
8
|
const visitors_1 = require("../astUtils/visitors");
|
|
9
9
|
const reflection_1 = require("../astUtils/reflection");
|
|
10
10
|
const interfaces_1 = require("../interfaces");
|
|
11
|
-
const SymbolTable_1 = require("../SymbolTable");
|
|
12
11
|
const creators_1 = require("../astUtils/creators");
|
|
13
12
|
const DynamicType_1 = require("../types/DynamicType");
|
|
14
|
-
const
|
|
13
|
+
const SymbolTable_1 = require("../SymbolTable");
|
|
15
14
|
const AstNode_1 = require("./AstNode");
|
|
16
15
|
const AstNode_2 = require("./AstNode");
|
|
17
16
|
const ClassType_1 = require("../types/ClassType");
|
|
@@ -20,13 +19,12 @@ const NamespaceType_1 = require("../types/NamespaceType");
|
|
|
20
19
|
const InterfaceType_1 = require("../types/InterfaceType");
|
|
21
20
|
const VoidType_1 = require("../types/VoidType");
|
|
22
21
|
const TypedFunctionType_1 = require("../types/TypedFunctionType");
|
|
23
|
-
const
|
|
22
|
+
const ArrayType_1 = require("../types/ArrayType");
|
|
24
23
|
class EmptyStatement extends AstNode_2.Statement {
|
|
25
24
|
constructor(options) {
|
|
26
|
-
var _a;
|
|
27
25
|
super();
|
|
28
26
|
this.kind = AstNode_1.AstNodeKind.EmptyStatement;
|
|
29
|
-
this.range =
|
|
27
|
+
this.range = undefined;
|
|
30
28
|
}
|
|
31
29
|
transpile(state) {
|
|
32
30
|
return [];
|
|
@@ -45,7 +43,7 @@ class Body extends AstNode_2.Statement {
|
|
|
45
43
|
super();
|
|
46
44
|
this.statements = [];
|
|
47
45
|
this.kind = AstNode_1.AstNodeKind.Body;
|
|
48
|
-
this.symbolTable = new
|
|
46
|
+
this.symbolTable = new SymbolTable_1.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
49
47
|
this.statements = (_a = options === null || options === void 0 ? void 0 : options.statements) !== null && _a !== void 0 ? _a : [];
|
|
50
48
|
}
|
|
51
49
|
get range() {
|
|
@@ -54,6 +52,7 @@ class Body extends AstNode_2.Statement {
|
|
|
54
52
|
return util_1.util.createBoundingRange(...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
|
|
55
53
|
}
|
|
56
54
|
transpile(state) {
|
|
55
|
+
var _a, _b, _c, _d;
|
|
57
56
|
let result = [];
|
|
58
57
|
for (let i = 0; i < this.statements.length; i++) {
|
|
59
58
|
let statement = this.statements[i];
|
|
@@ -63,20 +62,20 @@ class Body extends AstNode_2.Statement {
|
|
|
63
62
|
//this is the first statement. do nothing related to spacing and newlines
|
|
64
63
|
//if comment is on same line as prior sibling
|
|
65
64
|
}
|
|
66
|
-
else if (
|
|
65
|
+
else if (util_1.util.hasLeadingComments(statement) && previousStatement && ((_c = (_b = (_a = util_1.util.getLeadingComments(statement)) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.range) === null || _c === void 0 ? void 0 : _c.start.line) === ((_d = previousStatement.range) === null || _d === void 0 ? void 0 : _d.end.line)) {
|
|
67
66
|
result.push(' ');
|
|
68
67
|
//add double newline if this is a comment, and next is a function
|
|
69
68
|
}
|
|
70
|
-
else if (
|
|
71
|
-
result.push(
|
|
69
|
+
else if (util_1.util.hasLeadingComments(statement) && nextStatement && (0, reflection_1.isFunctionStatement)(nextStatement)) {
|
|
70
|
+
result.push(state.newline, state.newline);
|
|
72
71
|
//add double newline if is function not preceeded by a comment
|
|
73
72
|
}
|
|
74
|
-
else if ((0, reflection_1.isFunctionStatement)(statement) && previousStatement && !
|
|
75
|
-
result.push(
|
|
73
|
+
else if ((0, reflection_1.isFunctionStatement)(statement) && previousStatement && !util_1.util.hasLeadingComments(statement)) {
|
|
74
|
+
result.push(state.newline, state.newline);
|
|
76
75
|
}
|
|
77
76
|
else {
|
|
78
77
|
//separate statements by a single newline
|
|
79
|
-
result.push(
|
|
78
|
+
result.push(state.newline);
|
|
80
79
|
}
|
|
81
80
|
result.push(...statement.transpile(state));
|
|
82
81
|
}
|
|
@@ -130,7 +129,7 @@ class AssignmentStatement extends AstNode_2.Statement {
|
|
|
130
129
|
}
|
|
131
130
|
walk(visitor, options) {
|
|
132
131
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
133
|
-
|
|
132
|
+
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
134
133
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
135
134
|
}
|
|
136
135
|
}
|
|
@@ -139,9 +138,13 @@ class AssignmentStatement extends AstNode_2.Statement {
|
|
|
139
138
|
const variableType = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }))) !== null && _b !== void 0 ? _b : this.value.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }));
|
|
140
139
|
// Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
|
|
141
140
|
// so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
|
|
142
|
-
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(this.tokens.name.text, variableType, options.data, this.tokens.name.range));
|
|
141
|
+
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry({ name: this.tokens.name.text, type: variableType, data: options.data, range: this.tokens.name.range, kind: this.kind }));
|
|
143
142
|
return variableType;
|
|
144
143
|
}
|
|
144
|
+
getLeadingTrivia() {
|
|
145
|
+
var _a;
|
|
146
|
+
return (_a = this.tokens.name.leadingTrivia) !== null && _a !== void 0 ? _a : [];
|
|
147
|
+
}
|
|
145
148
|
}
|
|
146
149
|
exports.AssignmentStatement = AssignmentStatement;
|
|
147
150
|
class Block extends AstNode_2.Statement {
|
|
@@ -151,7 +154,7 @@ class Block extends AstNode_2.Statement {
|
|
|
151
154
|
this.kind = AstNode_1.AstNodeKind.Block;
|
|
152
155
|
this.statements = options.statements;
|
|
153
156
|
this.startingRange = options.startingRange;
|
|
154
|
-
this.range = util_1.util.createBoundingRange(
|
|
157
|
+
this.range = util_1.util.createBoundingRange(this.startingRange, ...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
|
|
155
158
|
}
|
|
156
159
|
transpile(state) {
|
|
157
160
|
state.blockDepth++;
|
|
@@ -159,9 +162,10 @@ class Block extends AstNode_2.Statement {
|
|
|
159
162
|
for (let i = 0; i < this.statements.length; i++) {
|
|
160
163
|
let previousStatement = this.statements[i - 1];
|
|
161
164
|
let statement = this.statements[i];
|
|
165
|
+
//is not a comment
|
|
162
166
|
//if comment is on same line as parent
|
|
163
|
-
if ((0,
|
|
164
|
-
|
|
167
|
+
if (util_1.util.isLeadingCommentOnSameLine(state.lineage[0], statement) ||
|
|
168
|
+
util_1.util.isLeadingCommentOnSameLine(previousStatement, statement)) {
|
|
165
169
|
results.push(' ');
|
|
166
170
|
//is not a comment
|
|
167
171
|
}
|
|
@@ -199,47 +203,11 @@ class ExpressionStatement extends AstNode_2.Statement {
|
|
|
199
203
|
(0, visitors_1.walk)(this, 'expression', visitor, options);
|
|
200
204
|
}
|
|
201
205
|
}
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
class CommentStatement extends AstNode_2.Statement {
|
|
205
|
-
constructor(options) {
|
|
206
|
-
var _a;
|
|
207
|
-
super();
|
|
208
|
-
this.kind = AstNode_1.AstNodeKind.CommentStatement;
|
|
209
|
-
this.visitMode = visitors_1.InternalWalkMode.visitStatements | visitors_1.InternalWalkMode.visitExpressions;
|
|
210
|
-
this.tokens = {
|
|
211
|
-
comments: options.comments
|
|
212
|
-
};
|
|
213
|
-
if (((_a = this.tokens.comments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
214
|
-
this.range = util_1.util.createBoundingRange(...this.tokens.comments);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
get text() {
|
|
218
|
-
return this.tokens.comments.map(x => x.text).join('\n');
|
|
219
|
-
}
|
|
220
|
-
transpile(state) {
|
|
221
|
-
let result = [];
|
|
222
|
-
for (let i = 0; i < this.tokens.comments.length; i++) {
|
|
223
|
-
let comment = this.tokens.comments[i];
|
|
224
|
-
if (i > 0) {
|
|
225
|
-
result.push(state.indent());
|
|
226
|
-
}
|
|
227
|
-
result.push(state.transpileToken(comment));
|
|
228
|
-
//add newline for all except final comment
|
|
229
|
-
if (i < this.tokens.comments.length - 1) {
|
|
230
|
-
result.push('\n');
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
return result;
|
|
234
|
-
}
|
|
235
|
-
getTypedef(state) {
|
|
236
|
-
return this.transpile(state);
|
|
237
|
-
}
|
|
238
|
-
walk(visitor, options) {
|
|
239
|
-
//nothing to walk
|
|
206
|
+
getLeadingTrivia() {
|
|
207
|
+
return this.expression.getLeadingTrivia();
|
|
240
208
|
}
|
|
241
209
|
}
|
|
242
|
-
exports.
|
|
210
|
+
exports.ExpressionStatement = ExpressionStatement;
|
|
243
211
|
class ExitForStatement extends AstNode_2.Statement {
|
|
244
212
|
constructor(options) {
|
|
245
213
|
var _a;
|
|
@@ -251,13 +219,15 @@ class ExitForStatement extends AstNode_2.Statement {
|
|
|
251
219
|
this.range = (_a = this.tokens.exitFor) === null || _a === void 0 ? void 0 : _a.range;
|
|
252
220
|
}
|
|
253
221
|
transpile(state) {
|
|
254
|
-
return [
|
|
255
|
-
this.tokens.exitFor ? state.transpileToken(this.tokens.exitFor) : 'exit for'
|
|
256
|
-
];
|
|
222
|
+
return this.tokens.exitFor ? state.transpileToken(this.tokens.exitFor) : ['exit for'];
|
|
257
223
|
}
|
|
258
224
|
walk(visitor, options) {
|
|
259
225
|
//nothing to walk
|
|
260
226
|
}
|
|
227
|
+
getLeadingTrivia() {
|
|
228
|
+
var _a, _b;
|
|
229
|
+
return (_b = (_a = this.tokens.exitFor) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
230
|
+
}
|
|
261
231
|
}
|
|
262
232
|
exports.ExitForStatement = ExitForStatement;
|
|
263
233
|
class ExitWhileStatement extends AstNode_2.Statement {
|
|
@@ -271,23 +241,28 @@ class ExitWhileStatement extends AstNode_2.Statement {
|
|
|
271
241
|
this.range = (_a = this.tokens.exitWhile) === null || _a === void 0 ? void 0 : _a.range;
|
|
272
242
|
}
|
|
273
243
|
transpile(state) {
|
|
274
|
-
return [
|
|
275
|
-
this.tokens.exitWhile ? state.transpileToken(this.tokens.exitWhile) : 'exit while'
|
|
276
|
-
];
|
|
244
|
+
return this.tokens.exitWhile ? state.transpileToken(this.tokens.exitWhile) : ['exit while'];
|
|
277
245
|
}
|
|
278
246
|
walk(visitor, options) {
|
|
279
247
|
//nothing to walk
|
|
280
248
|
}
|
|
249
|
+
getLeadingTrivia() {
|
|
250
|
+
var _a, _b;
|
|
251
|
+
return (_b = (_a = this.tokens.exitWhile) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
252
|
+
}
|
|
281
253
|
}
|
|
282
254
|
exports.ExitWhileStatement = ExitWhileStatement;
|
|
283
255
|
class FunctionStatement extends AstNode_2.Statement {
|
|
284
256
|
constructor(options) {
|
|
257
|
+
var _a;
|
|
285
258
|
super();
|
|
286
259
|
this.kind = AstNode_1.AstNodeKind.FunctionStatement;
|
|
287
260
|
this.tokens = {
|
|
288
261
|
name: options.name
|
|
289
262
|
};
|
|
290
263
|
this.func = options.func;
|
|
264
|
+
this.func.symbolTable.name += `: '${(_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text}'`;
|
|
265
|
+
this.func.functionStatement = this;
|
|
291
266
|
this.range = this.func.range;
|
|
292
267
|
}
|
|
293
268
|
/**
|
|
@@ -314,9 +289,12 @@ class FunctionStatement extends AstNode_2.Statement {
|
|
|
314
289
|
return this.func.transpile(state, nameToken);
|
|
315
290
|
}
|
|
316
291
|
getTypedef(state) {
|
|
317
|
-
var _a;
|
|
292
|
+
var _a, _b;
|
|
318
293
|
let result = [];
|
|
319
|
-
for (let
|
|
294
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
295
|
+
result.push(comment.text, state.newline, state.indent());
|
|
296
|
+
}
|
|
297
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
320
298
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
321
299
|
}
|
|
322
300
|
result.push(...this.func.getTypedef(state));
|
|
@@ -352,7 +330,7 @@ class IfStatement extends AstNode_2.Statement {
|
|
|
352
330
|
this.range = util_1.util.createBoundingRange(util_1.util.createBoundingRangeFromTokens(this.tokens), this.condition, this.thenBranch, this.elseBranch);
|
|
353
331
|
}
|
|
354
332
|
transpile(state) {
|
|
355
|
-
var _a;
|
|
333
|
+
var _a, _b;
|
|
356
334
|
let results = [];
|
|
357
335
|
//if (already indented by block)
|
|
358
336
|
results.push(state.transpileToken((_a = this.tokens.if) !== null && _a !== void 0 ? _a : (0, creators_1.createToken)(TokenKind_1.TokenKind.If)));
|
|
@@ -371,13 +349,10 @@ class IfStatement extends AstNode_2.Statement {
|
|
|
371
349
|
if (thenNodes.length > 0) {
|
|
372
350
|
results.push(thenNodes);
|
|
373
351
|
}
|
|
374
|
-
results.push('\n');
|
|
375
352
|
//else branch
|
|
376
|
-
if (this.tokens.else) {
|
|
377
|
-
//else
|
|
378
|
-
results.push(state.indent(), state.transpileToken(this.tokens.else));
|
|
379
|
-
}
|
|
380
353
|
if (this.elseBranch) {
|
|
354
|
+
//else
|
|
355
|
+
results.push(...state.transpileEndBlockToken(this.thenBranch, this.tokens.else, 'else'));
|
|
381
356
|
if ((0, reflection_1.isIfStatement)(this.elseBranch)) {
|
|
382
357
|
//chained elseif
|
|
383
358
|
state.lineage.unshift(this.elseBranch);
|
|
@@ -402,17 +377,10 @@ class IfStatement extends AstNode_2.Statement {
|
|
|
402
377
|
if (body.length > 0) {
|
|
403
378
|
results.push(...body);
|
|
404
379
|
}
|
|
405
|
-
results.push('\n');
|
|
406
380
|
}
|
|
407
381
|
}
|
|
408
382
|
//end if
|
|
409
|
-
results.push(state.
|
|
410
|
-
if (this.tokens.endIf) {
|
|
411
|
-
results.push(state.transpileToken(this.tokens.endIf));
|
|
412
|
-
}
|
|
413
|
-
else {
|
|
414
|
-
results.push('end if');
|
|
415
|
-
}
|
|
383
|
+
results.push(...state.transpileEndBlockToken((_b = this.elseBranch) !== null && _b !== void 0 ? _b : this.thenBranch, this.tokens.endIf, 'end if'));
|
|
416
384
|
return results;
|
|
417
385
|
}
|
|
418
386
|
walk(visitor, options) {
|
|
@@ -426,6 +394,10 @@ class IfStatement extends AstNode_2.Statement {
|
|
|
426
394
|
(0, visitors_1.walk)(this, 'elseBranch', visitor, options);
|
|
427
395
|
}
|
|
428
396
|
}
|
|
397
|
+
getLeadingTrivia() {
|
|
398
|
+
var _a, _b;
|
|
399
|
+
return (_b = (_a = this.tokens.if) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
400
|
+
}
|
|
429
401
|
}
|
|
430
402
|
exports.IfStatement = IfStatement;
|
|
431
403
|
class IncrementStatement extends AstNode_2.Statement {
|
|
@@ -449,6 +421,10 @@ class IncrementStatement extends AstNode_2.Statement {
|
|
|
449
421
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
450
422
|
}
|
|
451
423
|
}
|
|
424
|
+
getLeadingTrivia() {
|
|
425
|
+
var _a, _b;
|
|
426
|
+
return (_b = (_a = this.value) === null || _a === void 0 ? void 0 : _a.getLeadingTrivia()) !== null && _b !== void 0 ? _b : [];
|
|
427
|
+
}
|
|
452
428
|
}
|
|
453
429
|
exports.IncrementStatement = IncrementStatement;
|
|
454
430
|
/**
|
|
@@ -498,6 +474,10 @@ class PrintStatement extends AstNode_2.Statement {
|
|
|
498
474
|
(0, visitors_1.walkArray)(this.expressions, visitor, options, this, (item) => (0, reflection_1.isExpression)(item));
|
|
499
475
|
}
|
|
500
476
|
}
|
|
477
|
+
getLeadingTrivia() {
|
|
478
|
+
var _a, _b;
|
|
479
|
+
return (_b = (_a = this.tokens.print) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
480
|
+
}
|
|
501
481
|
}
|
|
502
482
|
exports.PrintStatement = PrintStatement;
|
|
503
483
|
class DimStatement extends AstNode_2.Statement {
|
|
@@ -531,20 +511,24 @@ class DimStatement extends AstNode_2.Statement {
|
|
|
531
511
|
return result;
|
|
532
512
|
}
|
|
533
513
|
walk(visitor, options) {
|
|
534
|
-
var _a;
|
|
535
|
-
if (((_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) > 0 && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
514
|
+
var _a, _b;
|
|
515
|
+
if (((_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) !== undefined && ((_b = this.dimensions) === null || _b === void 0 ? void 0 : _b.length) > 0 && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
536
516
|
(0, visitors_1.walkArray)(this.dimensions, visitor, options, this);
|
|
537
517
|
}
|
|
538
518
|
}
|
|
539
519
|
getType(options) {
|
|
540
520
|
var _a, _b;
|
|
541
521
|
const numDimensions = (_b = (_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 1;
|
|
542
|
-
let type = new
|
|
522
|
+
let type = new ArrayType_1.ArrayType();
|
|
543
523
|
for (let i = 0; i < numDimensions - 1; i++) {
|
|
544
|
-
type = new
|
|
524
|
+
type = new ArrayType_1.ArrayType(type);
|
|
545
525
|
}
|
|
546
526
|
return type;
|
|
547
527
|
}
|
|
528
|
+
getLeadingTrivia() {
|
|
529
|
+
var _a, _b;
|
|
530
|
+
return (_b = (_a = this.tokens.dim) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
531
|
+
}
|
|
548
532
|
}
|
|
549
533
|
exports.DimStatement = DimStatement;
|
|
550
534
|
class GotoStatement extends AstNode_2.Statement {
|
|
@@ -567,6 +551,10 @@ class GotoStatement extends AstNode_2.Statement {
|
|
|
567
551
|
walk(visitor, options) {
|
|
568
552
|
//nothing to walk
|
|
569
553
|
}
|
|
554
|
+
getLeadingTrivia() {
|
|
555
|
+
var _a, _b;
|
|
556
|
+
return (_b = (_a = this.tokens.goto) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
557
|
+
}
|
|
570
558
|
}
|
|
571
559
|
exports.GotoStatement = GotoStatement;
|
|
572
560
|
class LabelStatement extends AstNode_2.Statement {
|
|
@@ -617,6 +605,10 @@ class ReturnStatement extends AstNode_2.Statement {
|
|
|
617
605
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
618
606
|
}
|
|
619
607
|
}
|
|
608
|
+
getLeadingTrivia() {
|
|
609
|
+
var _a, _b;
|
|
610
|
+
return (_b = (_a = this.tokens.return) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
611
|
+
}
|
|
620
612
|
}
|
|
621
613
|
exports.ReturnStatement = ReturnStatement;
|
|
622
614
|
class EndStatement extends AstNode_2.Statement {
|
|
@@ -637,6 +629,10 @@ class EndStatement extends AstNode_2.Statement {
|
|
|
637
629
|
walk(visitor, options) {
|
|
638
630
|
//nothing to walk
|
|
639
631
|
}
|
|
632
|
+
getLeadingTrivia() {
|
|
633
|
+
var _a, _b;
|
|
634
|
+
return (_b = (_a = this.tokens.end) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
635
|
+
}
|
|
640
636
|
}
|
|
641
637
|
exports.EndStatement = EndStatement;
|
|
642
638
|
class StopStatement extends AstNode_2.Statement {
|
|
@@ -655,6 +651,10 @@ class StopStatement extends AstNode_2.Statement {
|
|
|
655
651
|
walk(visitor, options) {
|
|
656
652
|
//nothing to walk
|
|
657
653
|
}
|
|
654
|
+
getLeadingTrivia() {
|
|
655
|
+
var _a, _b;
|
|
656
|
+
return (_b = (_a = this.tokens.stop) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
657
|
+
}
|
|
658
658
|
}
|
|
659
659
|
exports.StopStatement = StopStatement;
|
|
660
660
|
class ForStatement extends AstNode_2.Statement {
|
|
@@ -691,10 +691,8 @@ class ForStatement extends AstNode_2.Statement {
|
|
|
691
691
|
state.lineage.unshift(this);
|
|
692
692
|
result.push(...this.body.transpile(state));
|
|
693
693
|
state.lineage.shift();
|
|
694
|
-
// add new line before "end for"
|
|
695
|
-
result.push('\n');
|
|
696
694
|
//end for
|
|
697
|
-
result.push(state.
|
|
695
|
+
result.push(...state.transpileEndBlockToken(this.body, this.tokens.endFor, 'end for'));
|
|
698
696
|
return result;
|
|
699
697
|
}
|
|
700
698
|
walk(visitor, options) {
|
|
@@ -709,6 +707,10 @@ class ForStatement extends AstNode_2.Statement {
|
|
|
709
707
|
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
710
708
|
}
|
|
711
709
|
}
|
|
710
|
+
getLeadingTrivia() {
|
|
711
|
+
var _a, _b;
|
|
712
|
+
return (_b = (_a = this.tokens.for) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
713
|
+
}
|
|
712
714
|
}
|
|
713
715
|
exports.ForStatement = ForStatement;
|
|
714
716
|
class ForEachStatement extends AstNode_2.Statement {
|
|
@@ -739,10 +741,8 @@ class ForEachStatement extends AstNode_2.Statement {
|
|
|
739
741
|
state.lineage.unshift(this);
|
|
740
742
|
result.push(...this.body.transpile(state));
|
|
741
743
|
state.lineage.shift();
|
|
742
|
-
// add new line before "end for"
|
|
743
|
-
result.push('\n');
|
|
744
744
|
//end for
|
|
745
|
-
result.push(state.
|
|
745
|
+
result.push(...state.transpileEndBlockToken(this.body, this.tokens.endFor, 'end for'));
|
|
746
746
|
return result;
|
|
747
747
|
}
|
|
748
748
|
walk(visitor, options) {
|
|
@@ -753,6 +753,13 @@ class ForEachStatement extends AstNode_2.Statement {
|
|
|
753
753
|
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
754
754
|
}
|
|
755
755
|
}
|
|
756
|
+
getType(options) {
|
|
757
|
+
return this.getSymbolTable().getSymbolType(this.tokens.item.text, options);
|
|
758
|
+
}
|
|
759
|
+
getLeadingTrivia() {
|
|
760
|
+
var _a, _b;
|
|
761
|
+
return (_b = (_a = this.tokens.forEach) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
762
|
+
}
|
|
756
763
|
}
|
|
757
764
|
exports.ForEachStatement = ForEachStatement;
|
|
758
765
|
class WhileStatement extends AstNode_2.Statement {
|
|
@@ -777,10 +784,8 @@ class WhileStatement extends AstNode_2.Statement {
|
|
|
777
784
|
//body
|
|
778
785
|
result.push(...this.body.transpile(state));
|
|
779
786
|
state.lineage.shift();
|
|
780
|
-
//trailing newline only if we have body statements
|
|
781
|
-
result.push('\n');
|
|
782
787
|
//end while
|
|
783
|
-
result.push(state.
|
|
788
|
+
result.push(...state.transpileEndBlockToken(this.body, this.tokens.endWhile, 'end while'));
|
|
784
789
|
return result;
|
|
785
790
|
}
|
|
786
791
|
walk(visitor, options) {
|
|
@@ -791,6 +796,10 @@ class WhileStatement extends AstNode_2.Statement {
|
|
|
791
796
|
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
792
797
|
}
|
|
793
798
|
}
|
|
799
|
+
getLeadingTrivia() {
|
|
800
|
+
var _a, _b;
|
|
801
|
+
return (_b = (_a = this.tokens.while) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
802
|
+
}
|
|
794
803
|
}
|
|
795
804
|
exports.WhileStatement = WhileStatement;
|
|
796
805
|
class DottedSetStatement extends AstNode_2.Statement {
|
|
@@ -834,9 +843,17 @@ class DottedSetStatement extends AstNode_2.Statement {
|
|
|
834
843
|
var _a, _b, _c, _d, _e, _f;
|
|
835
844
|
const objType = (_a = this.obj) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
836
845
|
const result = objType === null || objType === void 0 ? void 0 : objType.getMemberType((_b = this.tokens.name) === null || _b === void 0 ? void 0 : _b.text, options);
|
|
837
|
-
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(
|
|
846
|
+
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry({
|
|
847
|
+
name: (_d = this.tokens.name) === null || _d === void 0 ? void 0 : _d.text,
|
|
848
|
+
type: result, data: options.data,
|
|
849
|
+
range: (_f = (_e = this.tokens.name) === null || _e === void 0 ? void 0 : _e.range) !== null && _f !== void 0 ? _f : this.range,
|
|
850
|
+
kind: this.kind
|
|
851
|
+
}));
|
|
838
852
|
return result;
|
|
839
853
|
}
|
|
854
|
+
getLeadingTrivia() {
|
|
855
|
+
return this.obj.getLeadingTrivia();
|
|
856
|
+
}
|
|
840
857
|
}
|
|
841
858
|
exports.DottedSetStatement = DottedSetStatement;
|
|
842
859
|
class IndexedSetStatement extends AstNode_2.Statement {
|
|
@@ -884,6 +901,9 @@ class IndexedSetStatement extends AstNode_2.Statement {
|
|
|
884
901
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
885
902
|
}
|
|
886
903
|
}
|
|
904
|
+
getLeadingTrivia() {
|
|
905
|
+
return this.obj.getLeadingTrivia();
|
|
906
|
+
}
|
|
887
907
|
}
|
|
888
908
|
exports.IndexedSetStatement = IndexedSetStatement;
|
|
889
909
|
class LibraryStatement extends AstNode_2.Statement {
|
|
@@ -911,6 +931,10 @@ class LibraryStatement extends AstNode_2.Statement {
|
|
|
911
931
|
walk(visitor, options) {
|
|
912
932
|
//nothing to walk
|
|
913
933
|
}
|
|
934
|
+
getLeadingTrivia() {
|
|
935
|
+
var _a, _b;
|
|
936
|
+
return (_b = (_a = this.tokens.library) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
937
|
+
}
|
|
914
938
|
}
|
|
915
939
|
exports.LibraryStatement = LibraryStatement;
|
|
916
940
|
class NamespaceStatement extends AstNode_2.Statement {
|
|
@@ -924,15 +948,14 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
924
948
|
this.nameExpression = options.nameExpression;
|
|
925
949
|
this.body = options.body;
|
|
926
950
|
this.name = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
927
|
-
this.symbolTable = new
|
|
951
|
+
this.symbolTable = new SymbolTable_1.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
928
952
|
}
|
|
929
953
|
get range() {
|
|
930
954
|
return this.cacheRange();
|
|
931
955
|
}
|
|
932
956
|
cacheRange() {
|
|
933
|
-
var _a;
|
|
934
957
|
if (!this._range) {
|
|
935
|
-
this._range =
|
|
958
|
+
this._range = util_1.util.createBoundingRange(this.tokens.namespace, this.nameExpression, this.body, this.tokens.endNamespace);
|
|
936
959
|
}
|
|
937
960
|
return this._range;
|
|
938
961
|
}
|
|
@@ -962,11 +985,12 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
962
985
|
return this.body.transpile(state);
|
|
963
986
|
}
|
|
964
987
|
getTypedef(state) {
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
state.newline
|
|
969
|
-
|
|
988
|
+
var _a;
|
|
989
|
+
let result = [];
|
|
990
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
991
|
+
result.push(comment.text, state.newline, state.indent());
|
|
992
|
+
}
|
|
993
|
+
result.push('namespace ', ...this.getName(Parser_1.ParseMode.BrighterScript), state.newline);
|
|
970
994
|
state.blockDepth++;
|
|
971
995
|
result.push(...this.body.getTypedef(state));
|
|
972
996
|
state.blockDepth--;
|
|
@@ -989,18 +1013,21 @@ class NamespaceStatement extends AstNode_2.Statement {
|
|
|
989
1013
|
exports.NamespaceStatement = NamespaceStatement;
|
|
990
1014
|
class ImportStatement extends AstNode_2.Statement {
|
|
991
1015
|
constructor(options) {
|
|
1016
|
+
var _a;
|
|
992
1017
|
super();
|
|
993
1018
|
this.kind = AstNode_1.AstNodeKind.ImportStatement;
|
|
994
1019
|
this.tokens = {
|
|
995
1020
|
import: options.import,
|
|
996
|
-
|
|
1021
|
+
path: options.path
|
|
997
1022
|
};
|
|
998
|
-
this.range = util_1.util.createBoundingRange(this.tokens.import, this.tokens.
|
|
999
|
-
if (this.tokens.
|
|
1023
|
+
this.range = util_1.util.createBoundingRange(this.tokens.import, this.tokens.path);
|
|
1024
|
+
if (this.tokens.path) {
|
|
1000
1025
|
//remove quotes
|
|
1001
|
-
this.filePath = this.tokens.
|
|
1002
|
-
|
|
1003
|
-
|
|
1026
|
+
this.filePath = this.tokens.path.text.replace(/"/g, '');
|
|
1027
|
+
if ((_a = this.tokens.path) === null || _a === void 0 ? void 0 : _a.range) {
|
|
1028
|
+
//adjust the range to exclude the quotes
|
|
1029
|
+
this.tokens.path.range = util_1.util.createRange(this.tokens.path.range.start.line, this.tokens.path.range.start.character + 1, this.tokens.path.range.end.line, this.tokens.path.range.end.character - 1);
|
|
1030
|
+
}
|
|
1004
1031
|
}
|
|
1005
1032
|
}
|
|
1006
1033
|
transpile(state) {
|
|
@@ -1010,7 +1037,7 @@ class ImportStatement extends AstNode_2.Statement {
|
|
|
1010
1037
|
`'`,
|
|
1011
1038
|
state.transpileToken(this.tokens.import, 'import'),
|
|
1012
1039
|
' ',
|
|
1013
|
-
state.transpileToken(this.tokens.
|
|
1040
|
+
state.transpileToken(this.tokens.path)
|
|
1014
1041
|
];
|
|
1015
1042
|
}
|
|
1016
1043
|
/**
|
|
@@ -1022,12 +1049,16 @@ class ImportStatement extends AstNode_2.Statement {
|
|
|
1022
1049
|
(_b = (_a = this.tokens.import) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : 'import',
|
|
1023
1050
|
' ',
|
|
1024
1051
|
//replace any `.bs` extension with `.brs`
|
|
1025
|
-
this.tokens.
|
|
1052
|
+
this.tokens.path.text.replace(/\.bs"?$/i, '.brs"')
|
|
1026
1053
|
];
|
|
1027
1054
|
}
|
|
1028
1055
|
walk(visitor, options) {
|
|
1029
1056
|
//nothing to walk
|
|
1030
1057
|
}
|
|
1058
|
+
getLeadingTrivia() {
|
|
1059
|
+
var _a, _b;
|
|
1060
|
+
return (_b = (_a = this.tokens.import) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
1061
|
+
}
|
|
1031
1062
|
}
|
|
1032
1063
|
exports.ImportStatement = ImportStatement;
|
|
1033
1064
|
class InterfaceStatement extends AstNode_2.Statement {
|
|
@@ -1104,17 +1135,20 @@ class InterfaceStatement extends AstNode_2.Statement {
|
|
|
1104
1135
|
return [];
|
|
1105
1136
|
}
|
|
1106
1137
|
getTypedef(state) {
|
|
1107
|
-
var _a, _b, _c;
|
|
1138
|
+
var _a, _b, _c, _d;
|
|
1108
1139
|
const result = [];
|
|
1109
|
-
for (let
|
|
1140
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1141
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1142
|
+
}
|
|
1143
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1110
1144
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1111
1145
|
}
|
|
1112
1146
|
result.push(this.tokens.interface.text, ' ', this.tokens.name.text);
|
|
1113
|
-
const parentInterfaceName = (
|
|
1147
|
+
const parentInterfaceName = (_c = this.parentInterfaceName) === null || _c === void 0 ? void 0 : _c.getName();
|
|
1114
1148
|
if (parentInterfaceName) {
|
|
1115
1149
|
result.push(' extends ', parentInterfaceName);
|
|
1116
1150
|
}
|
|
1117
|
-
const body = (
|
|
1151
|
+
const body = (_d = this.body) !== null && _d !== void 0 ? _d : [];
|
|
1118
1152
|
if (body.length > 0) {
|
|
1119
1153
|
state.blockDepth++;
|
|
1120
1154
|
}
|
|
@@ -1145,15 +1179,21 @@ class InterfaceStatement extends AstNode_2.Statement {
|
|
|
1145
1179
|
const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
|
|
1146
1180
|
for (const statement of this.methods) {
|
|
1147
1181
|
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1148
|
-
const flag = statement.isOptional ?
|
|
1182
|
+
const flag = statement.isOptional ? 1 /* SymbolTypeFlag.runtime */ | 4 /* SymbolTypeFlag.optional */ : 1 /* SymbolTypeFlag.runtime */;
|
|
1149
1183
|
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, flag);
|
|
1150
1184
|
}
|
|
1151
1185
|
for (const statement of this.fields) {
|
|
1152
1186
|
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1153
|
-
const flag = statement.isOptional ?
|
|
1187
|
+
const flag = statement.isOptional ? 1 /* SymbolTypeFlag.runtime */ | 4 /* SymbolTypeFlag.optional */ : 1 /* SymbolTypeFlag.runtime */;
|
|
1154
1188
|
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, flag);
|
|
1155
1189
|
}
|
|
1156
|
-
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(
|
|
1190
|
+
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry({
|
|
1191
|
+
name: this.getName(Parser_1.ParseMode.BrighterScript),
|
|
1192
|
+
type: resultType,
|
|
1193
|
+
data: options.data,
|
|
1194
|
+
range: this.range,
|
|
1195
|
+
kind: this.kind
|
|
1196
|
+
}));
|
|
1157
1197
|
return resultType;
|
|
1158
1198
|
}
|
|
1159
1199
|
}
|
|
@@ -1189,9 +1229,12 @@ class InterfaceFieldStatement extends AstNode_2.Statement {
|
|
|
1189
1229
|
}
|
|
1190
1230
|
}
|
|
1191
1231
|
getTypedef(state) {
|
|
1192
|
-
var _a;
|
|
1232
|
+
var _a, _b;
|
|
1193
1233
|
const result = [];
|
|
1194
|
-
for (let
|
|
1234
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1235
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1236
|
+
}
|
|
1237
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1195
1238
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1196
1239
|
}
|
|
1197
1240
|
if (this.isOptional) {
|
|
@@ -1253,16 +1296,19 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1253
1296
|
}
|
|
1254
1297
|
}
|
|
1255
1298
|
getTypedef(state) {
|
|
1256
|
-
var _a, _b, _c, _d;
|
|
1299
|
+
var _a, _b, _c, _d, _e;
|
|
1257
1300
|
const result = [];
|
|
1258
|
-
for (let
|
|
1301
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1302
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1303
|
+
}
|
|
1304
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1259
1305
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1260
1306
|
}
|
|
1261
1307
|
if (this.isOptional) {
|
|
1262
1308
|
result.push(this.tokens.optional.text, ' ');
|
|
1263
1309
|
}
|
|
1264
|
-
result.push((
|
|
1265
|
-
const params = (
|
|
1310
|
+
result.push((_d = (_c = this.tokens.functionType) === null || _c === void 0 ? void 0 : _c.text) !== null && _d !== void 0 ? _d : 'function', ' ', this.tokens.name.text, '(');
|
|
1311
|
+
const params = (_e = this.params) !== null && _e !== void 0 ? _e : [];
|
|
1266
1312
|
for (let i = 0; i < params.length; i++) {
|
|
1267
1313
|
if (i > 0) {
|
|
1268
1314
|
result.push(', ');
|
|
@@ -1299,7 +1345,7 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
|
1299
1345
|
}
|
|
1300
1346
|
let funcName = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
1301
1347
|
resultType.setName(funcName);
|
|
1302
|
-
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
|
|
1348
|
+
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry({ name: resultType.name, type: resultType, data: options.data, range: this.range, kind: this.kind }));
|
|
1303
1349
|
return resultType;
|
|
1304
1350
|
}
|
|
1305
1351
|
}
|
|
@@ -1320,7 +1366,7 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1320
1366
|
extends: options.extends
|
|
1321
1367
|
};
|
|
1322
1368
|
this.parentClassName = options.parentClassName;
|
|
1323
|
-
this.symbolTable = new
|
|
1369
|
+
this.symbolTable = new SymbolTable_1.SymbolTable(`ClassStatement: '${(_b = this.tokens.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
1324
1370
|
for (let statement of this.body) {
|
|
1325
1371
|
if ((0, reflection_1.isMethodStatement)(statement)) {
|
|
1326
1372
|
this.methods.push(statement);
|
|
@@ -1366,9 +1412,12 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1366
1412
|
return result;
|
|
1367
1413
|
}
|
|
1368
1414
|
getTypedef(state) {
|
|
1369
|
-
var _a;
|
|
1415
|
+
var _a, _b;
|
|
1370
1416
|
const result = [];
|
|
1371
|
-
for (let
|
|
1417
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1418
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1419
|
+
}
|
|
1420
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1372
1421
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1373
1422
|
}
|
|
1374
1423
|
result.push('class ', this.tokens.name.text);
|
|
@@ -1459,8 +1508,8 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1459
1508
|
}
|
|
1460
1509
|
getConstructorType() {
|
|
1461
1510
|
var _a, _b;
|
|
1462
|
-
const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags:
|
|
1463
|
-
constructorType.returnType = this.getType({ flags:
|
|
1511
|
+
const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags: 1 /* SymbolTypeFlag.runtime */ })) !== null && _b !== void 0 ? _b : new TypedFunctionType_1.TypedFunctionType(null);
|
|
1512
|
+
constructorType.returnType = this.getType({ flags: 1 /* SymbolTypeFlag.runtime */ });
|
|
1464
1513
|
return constructorType;
|
|
1465
1514
|
}
|
|
1466
1515
|
/**
|
|
@@ -1560,7 +1609,7 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1560
1609
|
let result = [];
|
|
1561
1610
|
const constructorFunction = this.getConstructorFunction();
|
|
1562
1611
|
const constructorParams = constructorFunction ? constructorFunction.func.parameters : [];
|
|
1563
|
-
result.push(state.sourceNode(this, 'function'), state.sourceNode(this, ' '), state.sourceNode(this.tokens.name, this.getName(Parser_1.ParseMode.BrightScript)), `(`);
|
|
1612
|
+
result.push(state.sourceNode(this.tokens.class, 'function'), state.sourceNode(this.tokens.class, ' '), state.sourceNode(this.tokens.name, this.getName(Parser_1.ParseMode.BrightScript)), `(`);
|
|
1564
1613
|
let i = 0;
|
|
1565
1614
|
for (let param of constructorParams) {
|
|
1566
1615
|
if (i > 0) {
|
|
@@ -1605,30 +1654,30 @@ class ClassStatement extends AstNode_2.Statement {
|
|
|
1605
1654
|
const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
|
|
1606
1655
|
for (const statement of this.methods) {
|
|
1607
1656
|
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1608
|
-
let flag =
|
|
1657
|
+
let flag = 1 /* SymbolTypeFlag.runtime */;
|
|
1609
1658
|
if (((_b = statement.accessModifier) === null || _b === void 0 ? void 0 : _b.kind) === TokenKind_1.TokenKind.Private) {
|
|
1610
|
-
flag |=
|
|
1659
|
+
flag |= 8 /* SymbolTypeFlag.private */;
|
|
1611
1660
|
}
|
|
1612
1661
|
if (((_c = statement.accessModifier) === null || _c === void 0 ? void 0 : _c.kind) === TokenKind_1.TokenKind.Protected) {
|
|
1613
|
-
flag |=
|
|
1662
|
+
flag |= 16 /* SymbolTypeFlag.protected */;
|
|
1614
1663
|
}
|
|
1615
1664
|
resultType.addMember((_d = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _d === void 0 ? void 0 : _d.text, { definingNode: statement }, funcType, flag);
|
|
1616
1665
|
}
|
|
1617
1666
|
for (const statement of this.fields) {
|
|
1618
1667
|
const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1619
|
-
let flag =
|
|
1668
|
+
let flag = 1 /* SymbolTypeFlag.runtime */;
|
|
1620
1669
|
if (statement.isOptional) {
|
|
1621
|
-
flag |=
|
|
1670
|
+
flag |= 4 /* SymbolTypeFlag.optional */;
|
|
1622
1671
|
}
|
|
1623
1672
|
if (((_e = statement.tokens.accessModifier) === null || _e === void 0 ? void 0 : _e.kind) === TokenKind_1.TokenKind.Private) {
|
|
1624
|
-
flag |=
|
|
1673
|
+
flag |= 8 /* SymbolTypeFlag.private */;
|
|
1625
1674
|
}
|
|
1626
1675
|
if (((_f = statement.tokens.accessModifier) === null || _f === void 0 ? void 0 : _f.kind) === TokenKind_1.TokenKind.Protected) {
|
|
1627
|
-
flag |=
|
|
1676
|
+
flag |= 16 /* SymbolTypeFlag.protected */;
|
|
1628
1677
|
}
|
|
1629
1678
|
resultType.addMember((_g = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _g === void 0 ? void 0 : _g.text, { definingNode: statement }, fieldType, flag);
|
|
1630
1679
|
}
|
|
1631
|
-
(_h = options.typeChain) === null || _h === void 0 ? void 0 : _h.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
|
|
1680
|
+
(_h = options.typeChain) === null || _h === void 0 ? void 0 : _h.push(new interfaces_1.TypeChainEntry({ name: resultType.name, type: resultType, data: options.data, range: this.range, kind: this.kind }));
|
|
1632
1681
|
return resultType;
|
|
1633
1682
|
}
|
|
1634
1683
|
}
|
|
@@ -1698,9 +1747,12 @@ class MethodStatement extends FunctionStatement {
|
|
|
1698
1747
|
return this.func.transpile(state);
|
|
1699
1748
|
}
|
|
1700
1749
|
getTypedef(state) {
|
|
1701
|
-
var _a;
|
|
1750
|
+
var _a, _b;
|
|
1702
1751
|
const result = [];
|
|
1703
|
-
for (let
|
|
1752
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1753
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1754
|
+
}
|
|
1755
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1704
1756
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1705
1757
|
}
|
|
1706
1758
|
if (this.accessModifier) {
|
|
@@ -1723,10 +1775,11 @@ class MethodStatement extends FunctionStatement {
|
|
|
1723
1775
|
}
|
|
1724
1776
|
//check whether any calls to super exist
|
|
1725
1777
|
let containsSuperCall = this.func.body.statements.findIndex((x) => {
|
|
1778
|
+
var _a;
|
|
1726
1779
|
//is a call statement
|
|
1727
1780
|
return (0, reflection_1.isExpressionStatement)(x) && (0, reflection_1.isCallExpression)(x.expression) &&
|
|
1728
1781
|
//is a call to super
|
|
1729
|
-
util_1.util.findBeginningVariableExpression(x.expression.callee).tokens.name.text.toLowerCase() === 'super';
|
|
1782
|
+
((_a = util_1.util.findBeginningVariableExpression(x.expression.callee).tokens.name) === null || _a === void 0 ? void 0 : _a.text.toLowerCase()) === 'super';
|
|
1730
1783
|
}) !== -1;
|
|
1731
1784
|
//if a call to super exists, quit here
|
|
1732
1785
|
if (containsSuperCall) {
|
|
@@ -1770,12 +1823,13 @@ class MethodStatement extends FunctionStatement {
|
|
|
1770
1823
|
* Inject field initializers at the top of the `new` function (after any present `super()` call)
|
|
1771
1824
|
*/
|
|
1772
1825
|
injectFieldInitializersForConstructor(state) {
|
|
1826
|
+
var _a;
|
|
1773
1827
|
let startingIndex = state.classStatement.hasParentClass() ? 1 : 0;
|
|
1774
1828
|
let newStatements = [];
|
|
1775
1829
|
//insert the field initializers in order
|
|
1776
1830
|
for (let field of state.classStatement.fields) {
|
|
1777
1831
|
let thisQualifiedName = Object.assign({}, field.tokens.name);
|
|
1778
|
-
thisQualifiedName.text = 'm.' + field.tokens.name.text;
|
|
1832
|
+
thisQualifiedName.text = 'm.' + ((_a = field.tokens.name) === null || _a === void 0 ? void 0 : _a.text);
|
|
1779
1833
|
const fieldAssignment = field.initialValue
|
|
1780
1834
|
? new AssignmentStatement({
|
|
1781
1835
|
equals: field.tokens.equals,
|
|
@@ -1822,7 +1876,7 @@ class FieldStatement extends AstNode_2.Statement {
|
|
|
1822
1876
|
*/
|
|
1823
1877
|
getType(options) {
|
|
1824
1878
|
var _a, _b, _c, _d;
|
|
1825
|
-
return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags:
|
|
1879
|
+
return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: 2 /* SymbolTypeFlag.typetime */ }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: 1 /* SymbolTypeFlag.runtime */ }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
|
|
1826
1880
|
}
|
|
1827
1881
|
getLeadingTrivia() {
|
|
1828
1882
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -1835,21 +1889,24 @@ class FieldStatement extends AstNode_2.Statement {
|
|
|
1835
1889
|
throw new Error('transpile not implemented for ' + Object.getPrototypeOf(this).constructor.name);
|
|
1836
1890
|
}
|
|
1837
1891
|
getTypedef(state) {
|
|
1838
|
-
var _a, _b, _c, _d;
|
|
1892
|
+
var _a, _b, _c, _d, _e;
|
|
1839
1893
|
const result = [];
|
|
1840
1894
|
if (this.tokens.name) {
|
|
1841
|
-
for (let
|
|
1895
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
1896
|
+
result.push(comment.text, state.newline, state.indent());
|
|
1897
|
+
}
|
|
1898
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
1842
1899
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1843
1900
|
}
|
|
1844
|
-
let type = this.getType({ flags:
|
|
1901
|
+
let type = this.getType({ flags: 2 /* SymbolTypeFlag.typetime */ });
|
|
1845
1902
|
if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
|
|
1846
1903
|
type = new DynamicType_1.DynamicType();
|
|
1847
1904
|
}
|
|
1848
|
-
result.push((
|
|
1905
|
+
result.push((_d = (_c = this.tokens.accessModifier) === null || _c === void 0 ? void 0 : _c.text) !== null && _d !== void 0 ? _d : 'public', ' ');
|
|
1849
1906
|
if (this.isOptional) {
|
|
1850
1907
|
result.push(this.tokens.optional.text, ' ');
|
|
1851
1908
|
}
|
|
1852
|
-
result.push((
|
|
1909
|
+
result.push((_e = this.tokens.name) === null || _e === void 0 ? void 0 : _e.text, ' as ', type.toTypeString());
|
|
1853
1910
|
}
|
|
1854
1911
|
return result;
|
|
1855
1912
|
}
|
|
@@ -1892,6 +1949,10 @@ class TryCatchStatement extends AstNode_2.Statement {
|
|
|
1892
1949
|
(0, visitors_1.walk)(this, 'catchStatement', visitor, options);
|
|
1893
1950
|
}
|
|
1894
1951
|
}
|
|
1952
|
+
getLeadingTrivia() {
|
|
1953
|
+
var _a, _b;
|
|
1954
|
+
return (_b = (_a = this.tokens.try) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
1955
|
+
}
|
|
1895
1956
|
}
|
|
1896
1957
|
exports.TryCatchStatement = TryCatchStatement;
|
|
1897
1958
|
class CatchStatement extends AstNode_2.Statement {
|
|
@@ -1919,6 +1980,10 @@ class CatchStatement extends AstNode_2.Statement {
|
|
|
1919
1980
|
(0, visitors_1.walk)(this, 'catchBranch', visitor, options);
|
|
1920
1981
|
}
|
|
1921
1982
|
}
|
|
1983
|
+
getLeadingTrivia() {
|
|
1984
|
+
var _a, _b;
|
|
1985
|
+
return (_b = (_a = this.tokens.catch) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
1986
|
+
}
|
|
1922
1987
|
}
|
|
1923
1988
|
exports.CatchStatement = CatchStatement;
|
|
1924
1989
|
class ThrowStatement extends AstNode_2.Statement {
|
|
@@ -1942,7 +2007,7 @@ class ThrowStatement extends AstNode_2.Statement {
|
|
|
1942
2007
|
//no expression found. Rather than emit syntax errors, provide a generic error message
|
|
1943
2008
|
}
|
|
1944
2009
|
else {
|
|
1945
|
-
result.push('"
|
|
2010
|
+
result.push('"User-specified exception"');
|
|
1946
2011
|
}
|
|
1947
2012
|
return result;
|
|
1948
2013
|
}
|
|
@@ -1951,6 +2016,10 @@ class ThrowStatement extends AstNode_2.Statement {
|
|
|
1951
2016
|
(0, visitors_1.walk)(this, 'expression', visitor, options);
|
|
1952
2017
|
}
|
|
1953
2018
|
}
|
|
2019
|
+
getLeadingTrivia() {
|
|
2020
|
+
var _a, _b;
|
|
2021
|
+
return (_b = (_a = this.tokens.throw) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
2022
|
+
}
|
|
1954
2023
|
}
|
|
1955
2024
|
exports.ThrowStatement = ThrowStatement;
|
|
1956
2025
|
class EnumStatement extends AstNode_2.Statement {
|
|
@@ -1958,13 +2027,13 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
1958
2027
|
var _a;
|
|
1959
2028
|
super();
|
|
1960
2029
|
this.kind = AstNode_1.AstNodeKind.EnumStatement;
|
|
1961
|
-
this.symbolTable = new SymbolTable_2.SymbolTable('Enum');
|
|
1962
2030
|
this.tokens = {
|
|
1963
2031
|
enum: options.enum,
|
|
1964
2032
|
name: options.name,
|
|
1965
2033
|
endEnum: options.endEnum
|
|
1966
2034
|
};
|
|
1967
|
-
this.
|
|
2035
|
+
this.symbolTable = new SymbolTable_1.SymbolTable('Enum');
|
|
2036
|
+
this.body = (_a = options.body) !== null && _a !== void 0 ? _a : [];
|
|
1968
2037
|
}
|
|
1969
2038
|
get range() {
|
|
1970
2039
|
return util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum);
|
|
@@ -1979,7 +2048,8 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
1979
2048
|
return result;
|
|
1980
2049
|
}
|
|
1981
2050
|
getLeadingTrivia() {
|
|
1982
|
-
|
|
2051
|
+
var _a;
|
|
2052
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_a = this.tokens.enum) === null || _a === void 0 ? void 0 : _a.leadingTrivia);
|
|
1983
2053
|
}
|
|
1984
2054
|
/**
|
|
1985
2055
|
* Get a map of member names and their values.
|
|
@@ -2053,12 +2123,15 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
2053
2123
|
return [];
|
|
2054
2124
|
}
|
|
2055
2125
|
getTypedef(state) {
|
|
2056
|
-
var _a, _b, _c, _d, _e;
|
|
2126
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2057
2127
|
const result = [];
|
|
2058
|
-
for (let
|
|
2128
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
2129
|
+
result.push(comment.text, state.newline, state.indent());
|
|
2130
|
+
}
|
|
2131
|
+
for (let annotation of (_b = this.annotations) !== null && _b !== void 0 ? _b : []) {
|
|
2059
2132
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
2060
2133
|
}
|
|
2061
|
-
result.push((
|
|
2134
|
+
result.push((_d = (_c = this.tokens.enum) === null || _c === void 0 ? void 0 : _c.text) !== null && _d !== void 0 ? _d : 'enum', ' ', this.tokens.name.text);
|
|
2062
2135
|
result.push(state.newline);
|
|
2063
2136
|
state.blockDepth++;
|
|
2064
2137
|
for (const member of this.body) {
|
|
@@ -2067,7 +2140,7 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
2067
2140
|
}
|
|
2068
2141
|
}
|
|
2069
2142
|
state.blockDepth--;
|
|
2070
|
-
result.push(state.indent(), (
|
|
2143
|
+
result.push(state.indent(), (_f = (_e = this.tokens.endEnum) === null || _e === void 0 ? void 0 : _e.text) !== null && _f !== void 0 ? _f : 'end enum');
|
|
2071
2144
|
return result;
|
|
2072
2145
|
}
|
|
2073
2146
|
walk(visitor, options) {
|
|
@@ -2081,7 +2154,7 @@ class EnumStatement extends AstNode_2.Statement {
|
|
|
2081
2154
|
const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
|
|
2082
2155
|
resultType.pushMemberProvider(() => this.getSymbolTable());
|
|
2083
2156
|
for (const statement of members) {
|
|
2084
|
-
resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options),
|
|
2157
|
+
resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), 1 /* SymbolTypeFlag.runtime */);
|
|
2085
2158
|
}
|
|
2086
2159
|
return resultType;
|
|
2087
2160
|
}
|
|
@@ -2113,9 +2186,12 @@ class EnumMemberStatement extends AstNode_2.Statement {
|
|
|
2113
2186
|
return [];
|
|
2114
2187
|
}
|
|
2115
2188
|
getTypedef(state) {
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
]
|
|
2189
|
+
var _a;
|
|
2190
|
+
const result = [];
|
|
2191
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
2192
|
+
result.push(comment.text, state.newline, state.indent());
|
|
2193
|
+
}
|
|
2194
|
+
result.push(this.tokens.name.text);
|
|
2119
2195
|
if (this.tokens.equals) {
|
|
2120
2196
|
result.push(' ', this.tokens.equals.text, ' ');
|
|
2121
2197
|
if (this.value) {
|
|
@@ -2151,7 +2227,8 @@ class ConstStatement extends AstNode_2.Statement {
|
|
|
2151
2227
|
return this.tokens.name.text;
|
|
2152
2228
|
}
|
|
2153
2229
|
getLeadingTrivia() {
|
|
2154
|
-
|
|
2230
|
+
var _a;
|
|
2231
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_a = this.tokens.const) === null || _a === void 0 ? void 0 : _a.leadingTrivia);
|
|
2155
2232
|
}
|
|
2156
2233
|
/**
|
|
2157
2234
|
* The name of the statement WITH its leading namespace (if applicable)
|
|
@@ -2179,15 +2256,13 @@ class ConstStatement extends AstNode_2.Statement {
|
|
|
2179
2256
|
return [];
|
|
2180
2257
|
}
|
|
2181
2258
|
getTypedef(state) {
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
...this.value.transpile(state)
|
|
2190
|
-
];
|
|
2259
|
+
var _a;
|
|
2260
|
+
const result = [];
|
|
2261
|
+
for (let comment of (_a = util_1.util.getLeadingComments(this)) !== null && _a !== void 0 ? _a : []) {
|
|
2262
|
+
result.push(comment.text, state.newline, state.indent());
|
|
2263
|
+
}
|
|
2264
|
+
result.push(this.tokens.const ? state.tokenToSourceNode(this.tokens.const) : 'const', ' ', state.tokenToSourceNode(this.tokens.name), ' ', this.tokens.equals ? state.tokenToSourceNode(this.tokens.equals) : '=', ' ', ...this.value.transpile(state));
|
|
2265
|
+
return result;
|
|
2191
2266
|
}
|
|
2192
2267
|
walk(visitor, options) {
|
|
2193
2268
|
if (this.value && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
@@ -2220,6 +2295,10 @@ class ContinueStatement extends AstNode_2.Statement {
|
|
|
2220
2295
|
walk(visitor, options) {
|
|
2221
2296
|
//nothing to walk
|
|
2222
2297
|
}
|
|
2298
|
+
getLeadingTrivia() {
|
|
2299
|
+
var _a, _b;
|
|
2300
|
+
return (_b = (_a = this.tokens.continue) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : [];
|
|
2301
|
+
}
|
|
2223
2302
|
}
|
|
2224
2303
|
exports.ContinueStatement = ContinueStatement;
|
|
2225
2304
|
//# sourceMappingURL=Statement.js.map
|