brighterscript 0.65.1 → 0.66.0-alpha.0
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 +6 -0
- package/README.md +8 -0
- package/dist/BsConfig.d.ts +5 -11
- package/dist/CacheVerifier.d.ts +8 -0
- package/dist/CacheVerifier.js +20 -0
- package/dist/CacheVerifier.js.map +1 -0
- package/dist/DiagnosticMessages.d.ts +9 -4
- package/dist/DiagnosticMessages.js +8 -3
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/FunctionScope.d.ts +1 -0
- package/dist/FunctionScope.js +3 -0
- package/dist/FunctionScope.js.map +1 -1
- package/dist/PluginInterface.d.ts +0 -4
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +6 -39
- package/dist/Program.js +42 -44
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +4 -0
- package/dist/ProgramBuilder.js +12 -7
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +1 -5
- package/dist/Scope.js +3 -28
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +44 -6
- package/dist/SymbolTable.js +151 -25
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.js +11 -12
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/creators.d.ts +16 -6
- package/dist/astUtils/creators.js +39 -16
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +46 -37
- package/dist/astUtils/reflection.js +145 -147
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +1 -6
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +4 -11
- package/dist/astUtils/visitors.js +0 -7
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +4 -2
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -9
- package/dist/astUtils/xml.js +6 -6
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.js +4 -0
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +2 -2
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js +71 -59
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +110 -10
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +6 -5
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +11 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +53 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +4 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +72 -16
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +72 -18
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +9 -10
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +8 -10
- package/dist/files/BrsFile.js +72 -52
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +56 -14
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +19 -19
- package/dist/files/XmlFile.js +24 -42
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +61 -9
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +8 -11
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/globalCallables.js +2 -1
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +20 -1
- package/dist/interfaces.js +13 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +2 -0
- package/dist/lexer/TokenKind.js +5 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +78 -1
- package/dist/parser/AstNode.js +80 -1
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +87 -53
- package/dist/parser/Expression.js +243 -139
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +10 -7
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +9 -5
- package/dist/parser/Parser.js +125 -78
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +2 -0
- package/dist/parser/Parser.spec.js +117 -5
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +42 -4
- package/dist/parser/SGParser.js +191 -195
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +13 -10
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +279 -51
- package/dist/parser/SGTypes.js +562 -185
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +88 -70
- package/dist/parser/Statement.js +212 -136
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +5 -2
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
- package/dist/types/ArrayType.d.ts +6 -4
- package/dist/types/ArrayType.js +30 -22
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +8 -8
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BooleanType.d.ts +7 -4
- package/dist/types/BooleanType.js +13 -8
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +9 -3
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +25 -2
- package/dist/types/BscType.js +64 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +22 -0
- package/dist/types/BscTypeKind.js +27 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/ClassType.d.ts +11 -0
- package/dist/types/ClassType.js +31 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ClassType.spec.d.ts +1 -0
- package/dist/types/ClassType.spec.js +75 -0
- package/dist/types/ClassType.spec.js.map +1 -0
- package/dist/types/DoubleType.d.ts +7 -4
- package/dist/types/DoubleType.js +16 -20
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +11 -3
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.d.ts +9 -3
- package/dist/types/DynamicType.js +16 -2
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +15 -4
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/EnumType.d.ts +22 -0
- package/dist/types/EnumType.js +59 -0
- package/dist/types/EnumType.js.map +1 -0
- package/dist/types/EnumType.spec.d.ts +1 -0
- package/dist/types/EnumType.spec.js +33 -0
- package/dist/types/EnumType.spec.js.map +1 -0
- package/dist/types/FloatType.d.ts +7 -4
- package/dist/types/FloatType.js +16 -20
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +3 -3
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +6 -4
- package/dist/types/FunctionType.js +22 -19
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +5 -5
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/InheritableType.d.ts +25 -0
- package/dist/types/InheritableType.js +88 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +7 -4
- package/dist/types/IntegerType.js +16 -20
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +7 -3
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +10 -10
- package/dist/types/InterfaceType.js +24 -45
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +59 -45
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/InvalidType.d.ts +6 -4
- package/dist/types/InvalidType.js +12 -8
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +7 -3
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +7 -4
- package/dist/types/LongIntegerType.js +16 -20
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +9 -3
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +11 -0
- package/dist/types/NamespaceType.js +25 -0
- package/dist/types/NamespaceType.js.map +1 -0
- package/dist/types/ObjectType.d.ts +8 -4
- package/dist/types/ObjectType.js +26 -7
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +2 -2
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +51 -0
- package/dist/types/ReferenceType.js +274 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/ReferenceType.spec.d.ts +1 -0
- package/dist/types/ReferenceType.spec.js +122 -0
- package/dist/types/ReferenceType.spec.js.map +1 -0
- package/dist/types/StringType.d.ts +10 -4
- package/dist/types/StringType.js +16 -8
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +2 -2
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +6 -3
- package/dist/types/UninitializedType.js +14 -3
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +18 -0
- package/dist/types/UnionType.js +91 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/UnionType.spec.d.ts +1 -0
- package/dist/types/UnionType.spec.js +103 -0
- package/dist/types/UnionType.spec.js.map +1 -0
- package/dist/types/VoidType.d.ts +7 -4
- package/dist/types/VoidType.js +13 -8
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +2 -2
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helper.spec.d.ts +1 -0
- package/dist/types/helper.spec.js +130 -0
- package/dist/types/helper.spec.js.map +1 -0
- package/dist/types/helpers.d.ts +19 -0
- package/dist/types/helpers.js +131 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.js +39 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util.d.ts +9 -8
- package/dist/util.js +78 -32
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +0 -4
- package/dist/validators/ClassValidator.js +6 -30
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -1
- package/dist/types/CustomType.d.ts +0 -9
- package/dist/types/CustomType.js +0 -32
- package/dist/types/CustomType.js.map +0 -1
package/dist/parser/Statement.js
CHANGED
|
@@ -1,17 +1,25 @@
|
|
|
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.
|
|
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.CommentStatement = 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");
|
|
7
7
|
const Parser_1 = require("./Parser");
|
|
8
8
|
const visitors_1 = require("../astUtils/visitors");
|
|
9
9
|
const reflection_1 = require("../astUtils/reflection");
|
|
10
|
+
const SymbolTable_1 = require("../SymbolTable");
|
|
10
11
|
const creators_1 = require("../astUtils/creators");
|
|
11
12
|
const DynamicType_1 = require("../types/DynamicType");
|
|
12
|
-
const
|
|
13
|
+
const SymbolTable_2 = require("../SymbolTable");
|
|
13
14
|
const AstNode_1 = require("./AstNode");
|
|
14
|
-
|
|
15
|
+
const AstNode_2 = require("./AstNode");
|
|
16
|
+
const ClassType_1 = require("../types/ClassType");
|
|
17
|
+
const EnumType_1 = require("../types/EnumType");
|
|
18
|
+
const NamespaceType_1 = require("../types/NamespaceType");
|
|
19
|
+
const InterfaceType_1 = require("../types/InterfaceType");
|
|
20
|
+
const VoidType_1 = require("../types/VoidType");
|
|
21
|
+
const FunctionType_1 = require("../types/FunctionType");
|
|
22
|
+
class EmptyStatement extends AstNode_2.Statement {
|
|
15
23
|
constructor(
|
|
16
24
|
/**
|
|
17
25
|
* Create a negative range to indicate this is an interpolated location
|
|
@@ -19,6 +27,7 @@ class EmptyStatement extends AstNode_1.Statement {
|
|
|
19
27
|
range = creators_1.interpolatedRange) {
|
|
20
28
|
super();
|
|
21
29
|
this.range = range;
|
|
30
|
+
this.kind = AstNode_1.AstNodeKind.EmptyStatement;
|
|
22
31
|
}
|
|
23
32
|
transpile(state) {
|
|
24
33
|
return [];
|
|
@@ -31,11 +40,12 @@ exports.EmptyStatement = EmptyStatement;
|
|
|
31
40
|
/**
|
|
32
41
|
* This is a top-level statement. Consider this the root of the AST
|
|
33
42
|
*/
|
|
34
|
-
class Body extends
|
|
43
|
+
class Body extends AstNode_2.Statement {
|
|
35
44
|
constructor(statements = []) {
|
|
36
45
|
super();
|
|
37
46
|
this.statements = statements;
|
|
38
|
-
this.
|
|
47
|
+
this.kind = AstNode_1.AstNodeKind.Body;
|
|
48
|
+
this.symbolTable = new SymbolTable_2.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
39
49
|
}
|
|
40
50
|
get range() {
|
|
41
51
|
var _a;
|
|
@@ -88,21 +98,17 @@ class Body extends AstNode_1.Statement {
|
|
|
88
98
|
}
|
|
89
99
|
}
|
|
90
100
|
exports.Body = Body;
|
|
91
|
-
class AssignmentStatement extends
|
|
92
|
-
constructor(equals, name, value) {
|
|
101
|
+
class AssignmentStatement extends AstNode_2.Statement {
|
|
102
|
+
constructor(equals, name, value, asToken, typeExpression) {
|
|
93
103
|
super();
|
|
94
104
|
this.equals = equals;
|
|
95
105
|
this.name = name;
|
|
96
106
|
this.value = value;
|
|
107
|
+
this.asToken = asToken;
|
|
108
|
+
this.typeExpression = typeExpression;
|
|
109
|
+
this.kind = AstNode_1.AstNodeKind.AssignmentStatement;
|
|
97
110
|
this.range = util_1.util.createBoundingRange(name, equals, value);
|
|
98
111
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Get the name of the wrapping namespace (if it exists)
|
|
101
|
-
* @deprecated use `.findAncestor(isFunctionExpression)` instead.
|
|
102
|
-
*/
|
|
103
|
-
get containingFunction() {
|
|
104
|
-
return this.findAncestor(reflection_1.isFunctionExpression);
|
|
105
|
-
}
|
|
106
112
|
transpile(state) {
|
|
107
113
|
var _a, _b;
|
|
108
114
|
//if the value is a compound assignment, just transpile the expression itself
|
|
@@ -121,16 +127,22 @@ class AssignmentStatement extends AstNode_1.Statement {
|
|
|
121
127
|
}
|
|
122
128
|
walk(visitor, options) {
|
|
123
129
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
130
|
+
//TODO: Walk TypeExpression. We need to decide how to implement types on assignments
|
|
124
131
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
125
132
|
}
|
|
126
133
|
}
|
|
134
|
+
getType(options) {
|
|
135
|
+
const rhs = this.value.getType(options);
|
|
136
|
+
return rhs;
|
|
137
|
+
}
|
|
127
138
|
}
|
|
128
139
|
exports.AssignmentStatement = AssignmentStatement;
|
|
129
|
-
class Block extends
|
|
140
|
+
class Block extends AstNode_2.Statement {
|
|
130
141
|
constructor(statements, startingRange) {
|
|
131
142
|
super();
|
|
132
143
|
this.statements = statements;
|
|
133
144
|
this.startingRange = startingRange;
|
|
145
|
+
this.kind = AstNode_1.AstNodeKind.Block;
|
|
134
146
|
this.range = util_1.util.createBoundingRange({ range: this.startingRange }, ...(statements !== null && statements !== void 0 ? statements : []));
|
|
135
147
|
}
|
|
136
148
|
transpile(state) {
|
|
@@ -164,10 +176,11 @@ class Block extends AstNode_1.Statement {
|
|
|
164
176
|
}
|
|
165
177
|
}
|
|
166
178
|
exports.Block = Block;
|
|
167
|
-
class ExpressionStatement extends
|
|
179
|
+
class ExpressionStatement extends AstNode_2.Statement {
|
|
168
180
|
constructor(expression) {
|
|
169
181
|
super();
|
|
170
182
|
this.expression = expression;
|
|
183
|
+
this.kind = AstNode_1.AstNodeKind.ExpressionStatement;
|
|
171
184
|
this.range = this.expression.range;
|
|
172
185
|
}
|
|
173
186
|
transpile(state) {
|
|
@@ -180,11 +193,12 @@ class ExpressionStatement extends AstNode_1.Statement {
|
|
|
180
193
|
}
|
|
181
194
|
}
|
|
182
195
|
exports.ExpressionStatement = ExpressionStatement;
|
|
183
|
-
class CommentStatement extends
|
|
196
|
+
class CommentStatement extends AstNode_2.Statement {
|
|
184
197
|
constructor(comments) {
|
|
185
198
|
var _a;
|
|
186
199
|
super();
|
|
187
200
|
this.comments = comments;
|
|
201
|
+
this.kind = AstNode_1.AstNodeKind.CommentStatement;
|
|
188
202
|
this.visitMode = visitors_1.InternalWalkMode.visitStatements | visitors_1.InternalWalkMode.visitExpressions;
|
|
189
203
|
if (((_a = this.comments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
190
204
|
this.range = util_1.util.createBoundingRange(...this.comments);
|
|
@@ -216,10 +230,11 @@ class CommentStatement extends AstNode_1.Statement {
|
|
|
216
230
|
}
|
|
217
231
|
}
|
|
218
232
|
exports.CommentStatement = CommentStatement;
|
|
219
|
-
class ExitForStatement extends
|
|
233
|
+
class ExitForStatement extends AstNode_2.Statement {
|
|
220
234
|
constructor(tokens) {
|
|
221
235
|
super();
|
|
222
236
|
this.tokens = tokens;
|
|
237
|
+
this.kind = AstNode_1.AstNodeKind.ExitForStatement;
|
|
223
238
|
this.range = this.tokens.exitFor.range;
|
|
224
239
|
}
|
|
225
240
|
transpile(state) {
|
|
@@ -232,10 +247,11 @@ class ExitForStatement extends AstNode_1.Statement {
|
|
|
232
247
|
}
|
|
233
248
|
}
|
|
234
249
|
exports.ExitForStatement = ExitForStatement;
|
|
235
|
-
class ExitWhileStatement extends
|
|
250
|
+
class ExitWhileStatement extends AstNode_2.Statement {
|
|
236
251
|
constructor(tokens) {
|
|
237
252
|
super();
|
|
238
253
|
this.tokens = tokens;
|
|
254
|
+
this.kind = AstNode_1.AstNodeKind.ExitWhileStatement;
|
|
239
255
|
this.range = this.tokens.exitWhile.range;
|
|
240
256
|
}
|
|
241
257
|
transpile(state) {
|
|
@@ -248,11 +264,12 @@ class ExitWhileStatement extends AstNode_1.Statement {
|
|
|
248
264
|
}
|
|
249
265
|
}
|
|
250
266
|
exports.ExitWhileStatement = ExitWhileStatement;
|
|
251
|
-
class FunctionStatement extends
|
|
267
|
+
class FunctionStatement extends AstNode_2.Statement {
|
|
252
268
|
constructor(name, func) {
|
|
253
269
|
super();
|
|
254
270
|
this.name = name;
|
|
255
271
|
this.func = func;
|
|
272
|
+
this.kind = AstNode_1.AstNodeKind.FunctionStatement;
|
|
256
273
|
this.range = this.func.range;
|
|
257
274
|
}
|
|
258
275
|
/**
|
|
@@ -270,14 +287,6 @@ class FunctionStatement extends AstNode_1.Statement {
|
|
|
270
287
|
return this.name.text;
|
|
271
288
|
}
|
|
272
289
|
}
|
|
273
|
-
/**
|
|
274
|
-
* Get the name of the wrapping namespace (if it exists)
|
|
275
|
-
* @deprecated use `.findAncestor(isNamespaceStatement)` instead.
|
|
276
|
-
*/
|
|
277
|
-
get namespaceName() {
|
|
278
|
-
var _a;
|
|
279
|
-
return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
|
|
280
|
-
}
|
|
281
290
|
transpile(state) {
|
|
282
291
|
//create a fake token using the full transpiled name
|
|
283
292
|
let nameToken = Object.assign(Object.assign({}, this.name), { text: this.getName(Parser_1.ParseMode.BrightScript) });
|
|
@@ -297,9 +306,14 @@ class FunctionStatement extends AstNode_1.Statement {
|
|
|
297
306
|
(0, visitors_1.walk)(this, 'func', visitor, options);
|
|
298
307
|
}
|
|
299
308
|
}
|
|
309
|
+
getType(options) {
|
|
310
|
+
const funcExprType = this.func.getType(options);
|
|
311
|
+
funcExprType.setName(this.name.text);
|
|
312
|
+
return funcExprType;
|
|
313
|
+
}
|
|
300
314
|
}
|
|
301
315
|
exports.FunctionStatement = FunctionStatement;
|
|
302
|
-
class IfStatement extends
|
|
316
|
+
class IfStatement extends AstNode_2.Statement {
|
|
303
317
|
constructor(tokens, condition, thenBranch, elseBranch, isInline) {
|
|
304
318
|
super();
|
|
305
319
|
this.tokens = tokens;
|
|
@@ -307,6 +321,7 @@ class IfStatement extends AstNode_1.Statement {
|
|
|
307
321
|
this.thenBranch = thenBranch;
|
|
308
322
|
this.elseBranch = elseBranch;
|
|
309
323
|
this.isInline = isInline;
|
|
324
|
+
this.kind = AstNode_1.AstNodeKind.IfStatement;
|
|
310
325
|
this.range = util_1.util.createBoundingRange(tokens.if, condition, tokens.then, thenBranch, tokens.else, elseBranch, tokens.endIf);
|
|
311
326
|
}
|
|
312
327
|
transpile(state) {
|
|
@@ -385,11 +400,12 @@ class IfStatement extends AstNode_1.Statement {
|
|
|
385
400
|
}
|
|
386
401
|
}
|
|
387
402
|
exports.IfStatement = IfStatement;
|
|
388
|
-
class IncrementStatement extends
|
|
403
|
+
class IncrementStatement extends AstNode_2.Statement {
|
|
389
404
|
constructor(value, operator) {
|
|
390
405
|
super();
|
|
391
406
|
this.value = value;
|
|
392
407
|
this.operator = operator;
|
|
408
|
+
this.kind = AstNode_1.AstNodeKind.IncrementStatement;
|
|
393
409
|
this.range = util_1.util.createBoundingRange(value, operator);
|
|
394
410
|
}
|
|
395
411
|
transpile(state) {
|
|
@@ -408,7 +424,7 @@ exports.IncrementStatement = IncrementStatement;
|
|
|
408
424
|
/**
|
|
409
425
|
* Represents a `print` statement within BrightScript.
|
|
410
426
|
*/
|
|
411
|
-
class PrintStatement extends
|
|
427
|
+
class PrintStatement extends AstNode_2.Statement {
|
|
412
428
|
/**
|
|
413
429
|
* Creates a new internal representation of a BrightScript `print` statement.
|
|
414
430
|
* @param tokens the tokens for this statement
|
|
@@ -419,6 +435,7 @@ class PrintStatement extends AstNode_1.Statement {
|
|
|
419
435
|
super();
|
|
420
436
|
this.tokens = tokens;
|
|
421
437
|
this.expressions = expressions;
|
|
438
|
+
this.kind = AstNode_1.AstNodeKind.PrintStatement;
|
|
422
439
|
this.range = util_1.util.createBoundingRange(tokens.print, ...(expressions !== null && expressions !== void 0 ? expressions : []));
|
|
423
440
|
}
|
|
424
441
|
transpile(state) {
|
|
@@ -450,7 +467,7 @@ class PrintStatement extends AstNode_1.Statement {
|
|
|
450
467
|
}
|
|
451
468
|
}
|
|
452
469
|
exports.PrintStatement = PrintStatement;
|
|
453
|
-
class DimStatement extends
|
|
470
|
+
class DimStatement extends AstNode_2.Statement {
|
|
454
471
|
constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
|
|
455
472
|
super();
|
|
456
473
|
this.dimToken = dimToken;
|
|
@@ -458,6 +475,7 @@ class DimStatement extends AstNode_1.Statement {
|
|
|
458
475
|
this.openingSquare = openingSquare;
|
|
459
476
|
this.dimensions = dimensions;
|
|
460
477
|
this.closingSquare = closingSquare;
|
|
478
|
+
this.kind = AstNode_1.AstNodeKind.DimStatement;
|
|
461
479
|
this.range = util_1.util.createBoundingRange(dimToken, identifier, openingSquare, ...(dimensions !== null && dimensions !== void 0 ? dimensions : []), closingSquare);
|
|
462
480
|
}
|
|
463
481
|
transpile(state) {
|
|
@@ -484,10 +502,11 @@ class DimStatement extends AstNode_1.Statement {
|
|
|
484
502
|
}
|
|
485
503
|
}
|
|
486
504
|
exports.DimStatement = DimStatement;
|
|
487
|
-
class GotoStatement extends
|
|
505
|
+
class GotoStatement extends AstNode_2.Statement {
|
|
488
506
|
constructor(tokens) {
|
|
489
507
|
super();
|
|
490
508
|
this.tokens = tokens;
|
|
509
|
+
this.kind = AstNode_1.AstNodeKind.GotoStatement;
|
|
491
510
|
this.range = util_1.util.createBoundingRange(tokens.goto, tokens.label);
|
|
492
511
|
}
|
|
493
512
|
transpile(state) {
|
|
@@ -502,10 +521,11 @@ class GotoStatement extends AstNode_1.Statement {
|
|
|
502
521
|
}
|
|
503
522
|
}
|
|
504
523
|
exports.GotoStatement = GotoStatement;
|
|
505
|
-
class LabelStatement extends
|
|
524
|
+
class LabelStatement extends AstNode_2.Statement {
|
|
506
525
|
constructor(tokens) {
|
|
507
526
|
super();
|
|
508
527
|
this.tokens = tokens;
|
|
528
|
+
this.kind = AstNode_1.AstNodeKind.LabelStatement;
|
|
509
529
|
this.range = util_1.util.createBoundingRange(tokens.identifier, tokens.colon);
|
|
510
530
|
}
|
|
511
531
|
transpile(state) {
|
|
@@ -519,11 +539,12 @@ class LabelStatement extends AstNode_1.Statement {
|
|
|
519
539
|
}
|
|
520
540
|
}
|
|
521
541
|
exports.LabelStatement = LabelStatement;
|
|
522
|
-
class ReturnStatement extends
|
|
542
|
+
class ReturnStatement extends AstNode_2.Statement {
|
|
523
543
|
constructor(tokens, value) {
|
|
524
544
|
super();
|
|
525
545
|
this.tokens = tokens;
|
|
526
546
|
this.value = value;
|
|
547
|
+
this.kind = AstNode_1.AstNodeKind.ReturnStatement;
|
|
527
548
|
this.range = util_1.util.createBoundingRange(tokens.return, value);
|
|
528
549
|
}
|
|
529
550
|
transpile(state) {
|
|
@@ -542,10 +563,11 @@ class ReturnStatement extends AstNode_1.Statement {
|
|
|
542
563
|
}
|
|
543
564
|
}
|
|
544
565
|
exports.ReturnStatement = ReturnStatement;
|
|
545
|
-
class EndStatement extends
|
|
566
|
+
class EndStatement extends AstNode_2.Statement {
|
|
546
567
|
constructor(tokens) {
|
|
547
568
|
super();
|
|
548
569
|
this.tokens = tokens;
|
|
570
|
+
this.kind = AstNode_1.AstNodeKind.EndStatement;
|
|
549
571
|
this.range = tokens.end.range;
|
|
550
572
|
}
|
|
551
573
|
transpile(state) {
|
|
@@ -558,11 +580,12 @@ class EndStatement extends AstNode_1.Statement {
|
|
|
558
580
|
}
|
|
559
581
|
}
|
|
560
582
|
exports.EndStatement = EndStatement;
|
|
561
|
-
class StopStatement extends
|
|
583
|
+
class StopStatement extends AstNode_2.Statement {
|
|
562
584
|
constructor(tokens) {
|
|
563
585
|
var _a;
|
|
564
586
|
super();
|
|
565
587
|
this.tokens = tokens;
|
|
588
|
+
this.kind = AstNode_1.AstNodeKind.StopStatement;
|
|
566
589
|
this.range = (_a = tokens === null || tokens === void 0 ? void 0 : tokens.stop) === null || _a === void 0 ? void 0 : _a.range;
|
|
567
590
|
}
|
|
568
591
|
transpile(state) {
|
|
@@ -575,7 +598,7 @@ class StopStatement extends AstNode_1.Statement {
|
|
|
575
598
|
}
|
|
576
599
|
}
|
|
577
600
|
exports.StopStatement = StopStatement;
|
|
578
|
-
class ForStatement extends
|
|
601
|
+
class ForStatement extends AstNode_2.Statement {
|
|
579
602
|
constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
|
|
580
603
|
super();
|
|
581
604
|
this.forToken = forToken;
|
|
@@ -586,6 +609,7 @@ class ForStatement extends AstNode_1.Statement {
|
|
|
586
609
|
this.endForToken = endForToken;
|
|
587
610
|
this.stepToken = stepToken;
|
|
588
611
|
this.increment = increment;
|
|
612
|
+
this.kind = AstNode_1.AstNodeKind.ForStatement;
|
|
589
613
|
this.range = util_1.util.createBoundingRange(forToken, counterDeclaration, toToken, finalValue, stepToken, increment, body, endForToken);
|
|
590
614
|
}
|
|
591
615
|
transpile(state) {
|
|
@@ -626,13 +650,14 @@ class ForStatement extends AstNode_1.Statement {
|
|
|
626
650
|
}
|
|
627
651
|
}
|
|
628
652
|
exports.ForStatement = ForStatement;
|
|
629
|
-
class ForEachStatement extends
|
|
653
|
+
class ForEachStatement extends AstNode_2.Statement {
|
|
630
654
|
constructor(tokens, item, target, body) {
|
|
631
655
|
super();
|
|
632
656
|
this.tokens = tokens;
|
|
633
657
|
this.item = item;
|
|
634
658
|
this.target = target;
|
|
635
659
|
this.body = body;
|
|
660
|
+
this.kind = AstNode_1.AstNodeKind.ForEachStatement;
|
|
636
661
|
this.range = util_1.util.createBoundingRange(tokens.forEach, item, tokens.in, target, body, tokens.endFor);
|
|
637
662
|
}
|
|
638
663
|
transpile(state) {
|
|
@@ -665,12 +690,13 @@ class ForEachStatement extends AstNode_1.Statement {
|
|
|
665
690
|
}
|
|
666
691
|
}
|
|
667
692
|
exports.ForEachStatement = ForEachStatement;
|
|
668
|
-
class WhileStatement extends
|
|
693
|
+
class WhileStatement extends AstNode_2.Statement {
|
|
669
694
|
constructor(tokens, condition, body) {
|
|
670
695
|
super();
|
|
671
696
|
this.tokens = tokens;
|
|
672
697
|
this.condition = condition;
|
|
673
698
|
this.body = body;
|
|
699
|
+
this.kind = AstNode_1.AstNodeKind.WhileStatement;
|
|
674
700
|
this.range = util_1.util.createBoundingRange(tokens.while, condition, body, tokens.endWhile);
|
|
675
701
|
}
|
|
676
702
|
transpile(state) {
|
|
@@ -699,13 +725,14 @@ class WhileStatement extends AstNode_1.Statement {
|
|
|
699
725
|
}
|
|
700
726
|
}
|
|
701
727
|
exports.WhileStatement = WhileStatement;
|
|
702
|
-
class DottedSetStatement extends
|
|
728
|
+
class DottedSetStatement extends AstNode_2.Statement {
|
|
703
729
|
constructor(obj, name, value, dot) {
|
|
704
730
|
super();
|
|
705
731
|
this.obj = obj;
|
|
706
732
|
this.name = name;
|
|
707
733
|
this.value = value;
|
|
708
734
|
this.dot = dot;
|
|
735
|
+
this.kind = AstNode_1.AstNodeKind.DottedSetStatement;
|
|
709
736
|
this.range = util_1.util.createBoundingRange(obj, dot, name, value);
|
|
710
737
|
}
|
|
711
738
|
transpile(state) {
|
|
@@ -735,7 +762,7 @@ class DottedSetStatement extends AstNode_1.Statement {
|
|
|
735
762
|
}
|
|
736
763
|
}
|
|
737
764
|
exports.DottedSetStatement = DottedSetStatement;
|
|
738
|
-
class IndexedSetStatement extends
|
|
765
|
+
class IndexedSetStatement extends AstNode_2.Statement {
|
|
739
766
|
constructor(obj, index, value, openingSquare, closingSquare) {
|
|
740
767
|
super();
|
|
741
768
|
this.obj = obj;
|
|
@@ -743,6 +770,7 @@ class IndexedSetStatement extends AstNode_1.Statement {
|
|
|
743
770
|
this.value = value;
|
|
744
771
|
this.openingSquare = openingSquare;
|
|
745
772
|
this.closingSquare = closingSquare;
|
|
773
|
+
this.kind = AstNode_1.AstNodeKind.IndexedSetStatement;
|
|
746
774
|
this.range = util_1.util.createBoundingRange(obj, openingSquare, index, closingSquare, value);
|
|
747
775
|
}
|
|
748
776
|
transpile(state) {
|
|
@@ -777,10 +805,11 @@ class IndexedSetStatement extends AstNode_1.Statement {
|
|
|
777
805
|
}
|
|
778
806
|
}
|
|
779
807
|
exports.IndexedSetStatement = IndexedSetStatement;
|
|
780
|
-
class LibraryStatement extends
|
|
808
|
+
class LibraryStatement extends AstNode_2.Statement {
|
|
781
809
|
constructor(tokens) {
|
|
782
810
|
super();
|
|
783
811
|
this.tokens = tokens;
|
|
812
|
+
this.kind = AstNode_1.AstNodeKind.LibraryStatement;
|
|
784
813
|
this.range = util_1.util.createBoundingRange(this.tokens.library, this.tokens.filePath);
|
|
785
814
|
}
|
|
786
815
|
transpile(state) {
|
|
@@ -800,7 +829,7 @@ class LibraryStatement extends AstNode_1.Statement {
|
|
|
800
829
|
}
|
|
801
830
|
}
|
|
802
831
|
exports.LibraryStatement = LibraryStatement;
|
|
803
|
-
class NamespaceStatement extends
|
|
832
|
+
class NamespaceStatement extends AstNode_2.Statement {
|
|
804
833
|
constructor(keyword,
|
|
805
834
|
// this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
|
|
806
835
|
nameExpression, body, endKeyword) {
|
|
@@ -809,8 +838,9 @@ class NamespaceStatement extends AstNode_1.Statement {
|
|
|
809
838
|
this.nameExpression = nameExpression;
|
|
810
839
|
this.body = body;
|
|
811
840
|
this.endKeyword = endKeyword;
|
|
841
|
+
this.kind = AstNode_1.AstNodeKind.NamespaceStatement;
|
|
812
842
|
this.name = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
813
|
-
this.symbolTable = new
|
|
843
|
+
this.symbolTable = new SymbolTable_2.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
814
844
|
}
|
|
815
845
|
get range() {
|
|
816
846
|
return this.cacheRange();
|
|
@@ -824,9 +854,9 @@ class NamespaceStatement extends AstNode_1.Statement {
|
|
|
824
854
|
}
|
|
825
855
|
getName(parseMode) {
|
|
826
856
|
const parentNamespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
827
|
-
|
|
857
|
+
const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
858
|
+
let name = util_1.util.getAllDottedGetPartsAsString(this.nameExpression, parseMode);
|
|
828
859
|
if (parentNamespace) {
|
|
829
|
-
const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
830
860
|
name = parentNamespace.getName(parseMode) + sep + name;
|
|
831
861
|
}
|
|
832
862
|
return name;
|
|
@@ -855,13 +885,19 @@ class NamespaceStatement extends AstNode_1.Statement {
|
|
|
855
885
|
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
856
886
|
}
|
|
857
887
|
}
|
|
888
|
+
getType(options) {
|
|
889
|
+
const resultType = new NamespaceType_1.NamespaceType(this.name);
|
|
890
|
+
resultType.pushMemberProvider(() => this.body.getSymbolTable());
|
|
891
|
+
return resultType;
|
|
892
|
+
}
|
|
858
893
|
}
|
|
859
894
|
exports.NamespaceStatement = NamespaceStatement;
|
|
860
|
-
class ImportStatement extends
|
|
895
|
+
class ImportStatement extends AstNode_2.Statement {
|
|
861
896
|
constructor(importToken, filePathToken) {
|
|
862
897
|
super();
|
|
863
898
|
this.importToken = importToken;
|
|
864
899
|
this.filePathToken = filePathToken;
|
|
900
|
+
this.kind = AstNode_1.AstNodeKind.ImportStatement;
|
|
865
901
|
this.range = util_1.util.createBoundingRange(importToken, filePathToken);
|
|
866
902
|
if (this.filePathToken) {
|
|
867
903
|
//remove quotes
|
|
@@ -896,11 +932,12 @@ class ImportStatement extends AstNode_1.Statement {
|
|
|
896
932
|
}
|
|
897
933
|
}
|
|
898
934
|
exports.ImportStatement = ImportStatement;
|
|
899
|
-
class InterfaceStatement extends
|
|
935
|
+
class InterfaceStatement extends AstNode_2.Statement {
|
|
900
936
|
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken) {
|
|
901
937
|
super();
|
|
902
938
|
this.parentInterfaceName = parentInterfaceName;
|
|
903
939
|
this.body = body;
|
|
940
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceStatement;
|
|
904
941
|
this.tokens = {};
|
|
905
942
|
this.tokens.interface = interfaceToken;
|
|
906
943
|
this.tokens.name = name;
|
|
@@ -908,20 +945,15 @@ class InterfaceStatement extends AstNode_1.Statement {
|
|
|
908
945
|
this.tokens.endInterface = endInterfaceToken;
|
|
909
946
|
this.range = util_1.util.createBoundingRange(this.tokens.interface, this.tokens.name, this.tokens.extends, this.parentInterfaceName, ...this.body, this.tokens.endInterface);
|
|
910
947
|
}
|
|
911
|
-
/**
|
|
912
|
-
* Get the name of the wrapping namespace (if it exists)
|
|
913
|
-
* @deprecated use `.findAncestor(isNamespaceStatement)` instead.
|
|
914
|
-
*/
|
|
915
|
-
get namespaceName() {
|
|
916
|
-
var _a;
|
|
917
|
-
return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
|
|
918
|
-
}
|
|
919
948
|
get fields() {
|
|
920
949
|
return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
|
|
921
950
|
}
|
|
922
951
|
get methods() {
|
|
923
952
|
return this.body.filter(x => (0, reflection_1.isInterfaceMethodStatement)(x));
|
|
924
953
|
}
|
|
954
|
+
hasParentInterface() {
|
|
955
|
+
return !!this.parentInterfaceName;
|
|
956
|
+
}
|
|
925
957
|
/**
|
|
926
958
|
* The name of the interface WITH its leading namespace (if applicable)
|
|
927
959
|
*/
|
|
@@ -975,7 +1007,7 @@ class InterfaceStatement extends AstNode_1.Statement {
|
|
|
975
1007
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
976
1008
|
}
|
|
977
1009
|
result.push(this.tokens.interface.text, ' ', this.tokens.name.text);
|
|
978
|
-
const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName(
|
|
1010
|
+
const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName();
|
|
979
1011
|
if (parentInterfaceName) {
|
|
980
1012
|
result.push(' extends ', parentInterfaceName);
|
|
981
1013
|
}
|
|
@@ -1004,17 +1036,29 @@ class InterfaceStatement extends AstNode_1.Statement {
|
|
|
1004
1036
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1005
1037
|
}
|
|
1006
1038
|
}
|
|
1039
|
+
getType(options) {
|
|
1040
|
+
var _a, _b, _c;
|
|
1041
|
+
const superIface = (_a = this.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1042
|
+
const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
|
|
1043
|
+
for (const statement of this.methods) {
|
|
1044
|
+
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, statement === null || statement === void 0 ? void 0 : statement.range, statement === null || statement === void 0 ? void 0 : statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1045
|
+
}
|
|
1046
|
+
for (const statement of this.fields) {
|
|
1047
|
+
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, statement === null || statement === void 0 ? void 0 : statement.range, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1048
|
+
}
|
|
1049
|
+
return resultType;
|
|
1050
|
+
}
|
|
1007
1051
|
}
|
|
1008
1052
|
exports.InterfaceStatement = InterfaceStatement;
|
|
1009
|
-
class InterfaceFieldStatement extends
|
|
1010
|
-
constructor(nameToken, asToken,
|
|
1053
|
+
class InterfaceFieldStatement extends AstNode_2.Statement {
|
|
1054
|
+
constructor(nameToken, asToken, typeExpression) {
|
|
1011
1055
|
super();
|
|
1012
|
-
this.
|
|
1056
|
+
this.typeExpression = typeExpression;
|
|
1057
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceFieldStatement;
|
|
1013
1058
|
this.tokens = {};
|
|
1014
1059
|
this.tokens.name = nameToken;
|
|
1015
1060
|
this.tokens.as = asToken;
|
|
1016
|
-
this.tokens.
|
|
1017
|
-
this.range = util_1.util.createBoundingRange(nameToken, asToken, typeToken);
|
|
1061
|
+
this.range = util_1.util.createBoundingRange(this.tokens.name, this.tokens.as, this.typeExpression);
|
|
1018
1062
|
}
|
|
1019
1063
|
transpile(state) {
|
|
1020
1064
|
throw new Error('Method not implemented.');
|
|
@@ -1023,47 +1067,57 @@ class InterfaceFieldStatement extends AstNode_1.Statement {
|
|
|
1023
1067
|
return this.tokens.name.text;
|
|
1024
1068
|
}
|
|
1025
1069
|
walk(visitor, options) {
|
|
1026
|
-
|
|
1070
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1071
|
+
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
1072
|
+
}
|
|
1027
1073
|
}
|
|
1028
1074
|
getTypedef(state) {
|
|
1029
|
-
var _a
|
|
1075
|
+
var _a;
|
|
1030
1076
|
const result = [];
|
|
1031
1077
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1032
1078
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1033
1079
|
}
|
|
1034
1080
|
result.push(this.tokens.name.text);
|
|
1035
|
-
if (
|
|
1036
|
-
result.push(' as ', this.
|
|
1081
|
+
if (this.typeExpression) {
|
|
1082
|
+
result.push(' as ', ...this.typeExpression.getTypedef(state));
|
|
1037
1083
|
}
|
|
1038
1084
|
return result;
|
|
1039
1085
|
}
|
|
1086
|
+
getType(options) {
|
|
1087
|
+
var _a, _b;
|
|
1088
|
+
return (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(options)) !== null && _b !== void 0 ? _b : DynamicType_1.DynamicType.instance;
|
|
1089
|
+
}
|
|
1040
1090
|
}
|
|
1041
1091
|
exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
1042
|
-
|
|
1043
|
-
|
|
1092
|
+
//TODO: there is much that is similar with this and FunctionExpression.
|
|
1093
|
+
//It would be nice to refactor this so there is less duplicated code
|
|
1094
|
+
class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
1095
|
+
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeExpression) {
|
|
1044
1096
|
super();
|
|
1045
1097
|
this.params = params;
|
|
1046
|
-
this.
|
|
1098
|
+
this.returnTypeExpression = returnTypeExpression;
|
|
1099
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceMethodStatement;
|
|
1047
1100
|
this.tokens = {};
|
|
1048
1101
|
this.tokens.functionType = functionTypeToken;
|
|
1049
1102
|
this.tokens.name = nameToken;
|
|
1050
1103
|
this.tokens.leftParen = leftParen;
|
|
1051
1104
|
this.tokens.rightParen = rightParen;
|
|
1052
1105
|
this.tokens.as = asToken;
|
|
1053
|
-
this.tokens.returnType = returnTypeToken;
|
|
1054
1106
|
}
|
|
1055
1107
|
transpile(state) {
|
|
1056
1108
|
throw new Error('Method not implemented.');
|
|
1057
1109
|
}
|
|
1058
1110
|
get range() {
|
|
1059
1111
|
var _a;
|
|
1060
|
-
return util_1.util.createBoundingRange(this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.
|
|
1112
|
+
return util_1.util.createBoundingRange(this.tokens.functionType, this.tokens.name, this.tokens.leftParen, ...((_a = this.params) !== null && _a !== void 0 ? _a : []), this.tokens.rightParen, this.tokens.as, this.returnTypeExpression);
|
|
1061
1113
|
}
|
|
1062
1114
|
walk(visitor, options) {
|
|
1063
|
-
|
|
1115
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1116
|
+
(0, visitors_1.walk)(this, 'returnTypeExpression', visitor, options);
|
|
1117
|
+
}
|
|
1064
1118
|
}
|
|
1065
1119
|
getTypedef(state) {
|
|
1066
|
-
var _a, _b
|
|
1120
|
+
var _a, _b;
|
|
1067
1121
|
const result = [];
|
|
1068
1122
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1069
1123
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
@@ -1076,19 +1130,35 @@ class InterfaceMethodStatement extends AstNode_1.Statement {
|
|
|
1076
1130
|
}
|
|
1077
1131
|
const param = params[i];
|
|
1078
1132
|
result.push(param.name.text);
|
|
1079
|
-
if (
|
|
1080
|
-
result.push(' as ', param.
|
|
1133
|
+
if (param.typeExpression) {
|
|
1134
|
+
result.push(' as ', ...param.typeExpression.getTypedef(state));
|
|
1081
1135
|
}
|
|
1082
1136
|
}
|
|
1083
1137
|
result.push(')');
|
|
1084
|
-
if (
|
|
1085
|
-
result.push(' as ', this.
|
|
1138
|
+
if (this.returnTypeExpression) {
|
|
1139
|
+
result.push(' as ', ...this.returnTypeExpression.getTypedef(state));
|
|
1086
1140
|
}
|
|
1087
1141
|
return result;
|
|
1088
1142
|
}
|
|
1143
|
+
getType(options) {
|
|
1144
|
+
var _a;
|
|
1145
|
+
//if there's a defined return type, use that
|
|
1146
|
+
let returnType = (_a = this.returnTypeExpression) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1147
|
+
const isSub = this.tokens.functionType.kind === TokenKind_1.TokenKind.Sub;
|
|
1148
|
+
//if we don't have a return type and this is a sub, set the return type to `void`. else use `dynamic`
|
|
1149
|
+
if (!returnType) {
|
|
1150
|
+
returnType = isSub ? VoidType_1.VoidType.instance : DynamicType_1.DynamicType.instance;
|
|
1151
|
+
}
|
|
1152
|
+
const resultType = new FunctionType_1.FunctionType(returnType);
|
|
1153
|
+
resultType.isSub = isSub;
|
|
1154
|
+
for (let param of this.params) {
|
|
1155
|
+
resultType.addParameter(param.name.text, param.getType(options), !!param.defaultValue);
|
|
1156
|
+
}
|
|
1157
|
+
return resultType;
|
|
1158
|
+
}
|
|
1089
1159
|
}
|
|
1090
1160
|
exports.InterfaceMethodStatement = InterfaceMethodStatement;
|
|
1091
|
-
class ClassStatement extends
|
|
1161
|
+
class ClassStatement extends AstNode_2.Statement {
|
|
1092
1162
|
constructor(classKeyword,
|
|
1093
1163
|
/**
|
|
1094
1164
|
* The name of the class (without namespace prefix)
|
|
@@ -1102,6 +1172,7 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1102
1172
|
this.end = end;
|
|
1103
1173
|
this.extendsKeyword = extendsKeyword;
|
|
1104
1174
|
this.parentClassName = parentClassName;
|
|
1175
|
+
this.kind = AstNode_1.AstNodeKind.ClassStatement;
|
|
1105
1176
|
this.memberMap = {};
|
|
1106
1177
|
this.methods = [];
|
|
1107
1178
|
this.fields = [];
|
|
@@ -1118,14 +1189,6 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1118
1189
|
}
|
|
1119
1190
|
this.range = util_1.util.createBoundingRange(classKeyword, name, extendsKeyword, parentClassName, ...(body !== null && body !== void 0 ? body : []), end);
|
|
1120
1191
|
}
|
|
1121
|
-
/**
|
|
1122
|
-
* Get the name of the wrapping namespace (if it exists)
|
|
1123
|
-
* @deprecated use `.findAncestor(isNamespaceStatement)` instead.
|
|
1124
|
-
*/
|
|
1125
|
-
get namespaceName() {
|
|
1126
|
-
var _a;
|
|
1127
|
-
return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
|
|
1128
|
-
}
|
|
1129
1192
|
getName(parseMode) {
|
|
1130
1193
|
var _a;
|
|
1131
1194
|
const name = (_a = this.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
@@ -1163,7 +1226,7 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1163
1226
|
result.push('class ', this.name.text);
|
|
1164
1227
|
if (this.extendsKeyword && this.parentClassName) {
|
|
1165
1228
|
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1166
|
-
const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(
|
|
1229
|
+
const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript));
|
|
1167
1230
|
result.push(` extends ${fqName}`);
|
|
1168
1231
|
}
|
|
1169
1232
|
result.push(state.newline);
|
|
@@ -1202,7 +1265,7 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1202
1265
|
if (stmt.parentClassName) {
|
|
1203
1266
|
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1204
1267
|
//find the parent class
|
|
1205
|
-
stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(
|
|
1268
|
+
stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
|
|
1206
1269
|
myIndex++;
|
|
1207
1270
|
}
|
|
1208
1271
|
else {
|
|
@@ -1231,7 +1294,7 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1231
1294
|
while (stmt) {
|
|
1232
1295
|
if (stmt.parentClassName) {
|
|
1233
1296
|
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1234
|
-
stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(
|
|
1297
|
+
stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
|
|
1235
1298
|
ancestors.push(stmt);
|
|
1236
1299
|
}
|
|
1237
1300
|
else {
|
|
@@ -1382,6 +1445,19 @@ class ClassStatement extends AstNode_1.Statement {
|
|
|
1382
1445
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1383
1446
|
}
|
|
1384
1447
|
}
|
|
1448
|
+
getType(options) {
|
|
1449
|
+
var _a, _b, _c;
|
|
1450
|
+
const superClass = (_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1451
|
+
const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
|
|
1452
|
+
for (const statement of this.methods) {
|
|
1453
|
+
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(options);
|
|
1454
|
+
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text, statement === null || statement === void 0 ? void 0 : statement.range, funcType, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1455
|
+
}
|
|
1456
|
+
for (const statement of this.fields) {
|
|
1457
|
+
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text, statement === null || statement === void 0 ? void 0 : statement.range, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1458
|
+
}
|
|
1459
|
+
return resultType;
|
|
1460
|
+
}
|
|
1385
1461
|
}
|
|
1386
1462
|
exports.ClassStatement = ClassStatement;
|
|
1387
1463
|
const accessModifiers = [
|
|
@@ -1393,6 +1469,7 @@ class MethodStatement extends FunctionStatement {
|
|
|
1393
1469
|
constructor(modifiers, name, func, override) {
|
|
1394
1470
|
super(name, func);
|
|
1395
1471
|
this.override = override;
|
|
1472
|
+
this.kind = AstNode_1.AstNodeKind.MethodStatement;
|
|
1396
1473
|
this.modifiers = [];
|
|
1397
1474
|
if (modifiers) {
|
|
1398
1475
|
if (Array.isArray(modifiers)) {
|
|
@@ -1528,37 +1605,25 @@ class MethodStatement extends FunctionStatement {
|
|
|
1528
1605
|
}
|
|
1529
1606
|
}
|
|
1530
1607
|
exports.MethodStatement = MethodStatement;
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
*/
|
|
1534
|
-
class ClassMethodStatement extends MethodStatement {
|
|
1535
|
-
}
|
|
1536
|
-
exports.ClassMethodStatement = ClassMethodStatement;
|
|
1537
|
-
class FieldStatement extends AstNode_1.Statement {
|
|
1538
|
-
constructor(accessModifier, name, as, type, equal, initialValue) {
|
|
1608
|
+
class FieldStatement extends AstNode_2.Statement {
|
|
1609
|
+
constructor(accessModifier, name, as, typeExpression, equal, initialValue) {
|
|
1539
1610
|
super();
|
|
1540
1611
|
this.accessModifier = accessModifier;
|
|
1541
1612
|
this.name = name;
|
|
1542
1613
|
this.as = as;
|
|
1543
|
-
this.
|
|
1614
|
+
this.typeExpression = typeExpression;
|
|
1544
1615
|
this.equal = equal;
|
|
1545
1616
|
this.initialValue = initialValue;
|
|
1546
|
-
this.
|
|
1617
|
+
this.kind = AstNode_1.AstNodeKind.FieldStatement;
|
|
1618
|
+
this.range = util_1.util.createBoundingRange(accessModifier, name, as, typeExpression, equal, initialValue);
|
|
1547
1619
|
}
|
|
1548
1620
|
/**
|
|
1549
1621
|
* Derive a ValueKind from the type token, or the initial value.
|
|
1550
1622
|
* Defaults to `DynamicType`
|
|
1551
1623
|
*/
|
|
1552
|
-
getType() {
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
}
|
|
1556
|
-
else if ((0, reflection_1.isLiteralExpression)(this.initialValue)) {
|
|
1557
|
-
return this.initialValue.type;
|
|
1558
|
-
}
|
|
1559
|
-
else {
|
|
1560
|
-
return new DynamicType_1.DynamicType();
|
|
1561
|
-
}
|
|
1624
|
+
getType(options) {
|
|
1625
|
+
var _a, _b, _c, _d;
|
|
1626
|
+
return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.typetime }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.runtime }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
|
|
1562
1627
|
}
|
|
1563
1628
|
transpile(state) {
|
|
1564
1629
|
throw new Error('transpile not implemented for ' + Object.getPrototypeOf(this).constructor.name);
|
|
@@ -1570,7 +1635,7 @@ class FieldStatement extends AstNode_1.Statement {
|
|
|
1570
1635
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1571
1636
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1572
1637
|
}
|
|
1573
|
-
let type = this.getType();
|
|
1638
|
+
let type = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
|
|
1574
1639
|
if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
|
|
1575
1640
|
type = new DynamicType_1.DynamicType();
|
|
1576
1641
|
}
|
|
@@ -1579,24 +1644,20 @@ class FieldStatement extends AstNode_1.Statement {
|
|
|
1579
1644
|
return result;
|
|
1580
1645
|
}
|
|
1581
1646
|
walk(visitor, options) {
|
|
1582
|
-
if (
|
|
1647
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1648
|
+
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
1583
1649
|
(0, visitors_1.walk)(this, 'initialValue', visitor, options);
|
|
1584
1650
|
}
|
|
1585
1651
|
}
|
|
1586
1652
|
}
|
|
1587
1653
|
exports.FieldStatement = FieldStatement;
|
|
1588
|
-
|
|
1589
|
-
* @deprecated use `FieldStatement`
|
|
1590
|
-
*/
|
|
1591
|
-
class ClassFieldStatement extends FieldStatement {
|
|
1592
|
-
}
|
|
1593
|
-
exports.ClassFieldStatement = ClassFieldStatement;
|
|
1594
|
-
class TryCatchStatement extends AstNode_1.Statement {
|
|
1654
|
+
class TryCatchStatement extends AstNode_2.Statement {
|
|
1595
1655
|
constructor(tokens, tryBranch, catchStatement) {
|
|
1596
1656
|
super();
|
|
1597
1657
|
this.tokens = tokens;
|
|
1598
1658
|
this.tryBranch = tryBranch;
|
|
1599
1659
|
this.catchStatement = catchStatement;
|
|
1660
|
+
this.kind = AstNode_1.AstNodeKind.TryCatchStatement;
|
|
1600
1661
|
this.range = util_1.util.createBoundingRange(tokens.try, tryBranch, catchStatement, tokens.endTry);
|
|
1601
1662
|
}
|
|
1602
1663
|
transpile(state) {
|
|
@@ -1620,12 +1681,13 @@ class TryCatchStatement extends AstNode_1.Statement {
|
|
|
1620
1681
|
}
|
|
1621
1682
|
}
|
|
1622
1683
|
exports.TryCatchStatement = TryCatchStatement;
|
|
1623
|
-
class CatchStatement extends
|
|
1684
|
+
class CatchStatement extends AstNode_2.Statement {
|
|
1624
1685
|
constructor(tokens, exceptionVariable, catchBranch) {
|
|
1625
1686
|
super();
|
|
1626
1687
|
this.tokens = tokens;
|
|
1627
1688
|
this.exceptionVariable = exceptionVariable;
|
|
1628
1689
|
this.catchBranch = catchBranch;
|
|
1690
|
+
this.kind = AstNode_1.AstNodeKind.CatchStatement;
|
|
1629
1691
|
this.range = util_1.util.createBoundingRange(tokens.catch, exceptionVariable, catchBranch);
|
|
1630
1692
|
}
|
|
1631
1693
|
transpile(state) {
|
|
@@ -1644,11 +1706,12 @@ class CatchStatement extends AstNode_1.Statement {
|
|
|
1644
1706
|
}
|
|
1645
1707
|
}
|
|
1646
1708
|
exports.CatchStatement = CatchStatement;
|
|
1647
|
-
class ThrowStatement extends
|
|
1709
|
+
class ThrowStatement extends AstNode_2.Statement {
|
|
1648
1710
|
constructor(throwToken, expression) {
|
|
1649
1711
|
super();
|
|
1650
1712
|
this.throwToken = throwToken;
|
|
1651
1713
|
this.expression = expression;
|
|
1714
|
+
this.kind = AstNode_1.AstNodeKind.ThrowStatement;
|
|
1652
1715
|
this.range = util_1.util.createBoundingRange(throwToken, expression);
|
|
1653
1716
|
}
|
|
1654
1717
|
transpile(state) {
|
|
@@ -1673,25 +1736,19 @@ class ThrowStatement extends AstNode_1.Statement {
|
|
|
1673
1736
|
}
|
|
1674
1737
|
}
|
|
1675
1738
|
exports.ThrowStatement = ThrowStatement;
|
|
1676
|
-
class EnumStatement extends
|
|
1739
|
+
class EnumStatement extends AstNode_2.Statement {
|
|
1677
1740
|
constructor(tokens, body) {
|
|
1678
1741
|
var _a;
|
|
1679
1742
|
super();
|
|
1680
1743
|
this.tokens = tokens;
|
|
1681
1744
|
this.body = body;
|
|
1745
|
+
this.kind = AstNode_1.AstNodeKind.EnumStatement;
|
|
1746
|
+
this.symbolTable = new SymbolTable_2.SymbolTable('Enum');
|
|
1682
1747
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1683
1748
|
}
|
|
1684
1749
|
get range() {
|
|
1685
1750
|
return util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum);
|
|
1686
1751
|
}
|
|
1687
|
-
/**
|
|
1688
|
-
* Get the name of the wrapping namespace (if it exists)
|
|
1689
|
-
* @deprecated use `.findAncestor(isNamespaceStatement)` instead.
|
|
1690
|
-
*/
|
|
1691
|
-
get namespaceName() {
|
|
1692
|
-
var _a;
|
|
1693
|
-
return (_a = this.findAncestor(reflection_1.isNamespaceStatement)) === null || _a === void 0 ? void 0 : _a.nameExpression;
|
|
1694
|
-
}
|
|
1695
1752
|
getMembers() {
|
|
1696
1753
|
const result = [];
|
|
1697
1754
|
for (const statement of this.body) {
|
|
@@ -1795,13 +1852,26 @@ class EnumStatement extends AstNode_1.Statement {
|
|
|
1795
1852
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1796
1853
|
}
|
|
1797
1854
|
}
|
|
1855
|
+
getType() {
|
|
1856
|
+
var _a, _b;
|
|
1857
|
+
const resultType = new EnumType_1.EnumType(this.fullName);
|
|
1858
|
+
resultType.pushMemberProvider(() => this.getSymbolTable());
|
|
1859
|
+
for (const statement of this.getMembers()) {
|
|
1860
|
+
resultType.addMember((_b = (_a = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _a === void 0 ? void 0 : _a.name) === null || _b === void 0 ? void 0 : _b.text, statement === null || statement === void 0 ? void 0 : statement.range, statement.getType(), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1861
|
+
}
|
|
1862
|
+
return resultType;
|
|
1863
|
+
}
|
|
1798
1864
|
}
|
|
1799
1865
|
exports.EnumStatement = EnumStatement;
|
|
1800
|
-
class EnumMemberStatement extends
|
|
1866
|
+
class EnumMemberStatement extends AstNode_2.Statement {
|
|
1801
1867
|
constructor(tokens, value) {
|
|
1802
1868
|
super();
|
|
1803
1869
|
this.tokens = tokens;
|
|
1804
1870
|
this.value = value;
|
|
1871
|
+
this.kind = AstNode_1.AstNodeKind.EnumMemberStatement;
|
|
1872
|
+
}
|
|
1873
|
+
get range() {
|
|
1874
|
+
return util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value);
|
|
1805
1875
|
}
|
|
1806
1876
|
/**
|
|
1807
1877
|
* The name of the member
|
|
@@ -1809,9 +1879,6 @@ class EnumMemberStatement extends AstNode_1.Statement {
|
|
|
1809
1879
|
get name() {
|
|
1810
1880
|
return this.tokens.name.text;
|
|
1811
1881
|
}
|
|
1812
|
-
get range() {
|
|
1813
|
-
return util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value);
|
|
1814
|
-
}
|
|
1815
1882
|
transpile(state) {
|
|
1816
1883
|
return [];
|
|
1817
1884
|
}
|
|
@@ -1832,13 +1899,18 @@ class EnumMemberStatement extends AstNode_1.Statement {
|
|
|
1832
1899
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1833
1900
|
}
|
|
1834
1901
|
}
|
|
1902
|
+
getType() {
|
|
1903
|
+
var _a, _b, _c;
|
|
1904
|
+
return new EnumType_1.EnumMemberType((_a = this.parent) === null || _a === void 0 ? void 0 : _a.fullName, (_c = (_b = this.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text);
|
|
1905
|
+
}
|
|
1835
1906
|
}
|
|
1836
1907
|
exports.EnumMemberStatement = EnumMemberStatement;
|
|
1837
|
-
class ConstStatement extends
|
|
1908
|
+
class ConstStatement extends AstNode_2.Statement {
|
|
1838
1909
|
constructor(tokens, value) {
|
|
1839
1910
|
super();
|
|
1840
1911
|
this.tokens = tokens;
|
|
1841
1912
|
this.value = value;
|
|
1913
|
+
this.kind = AstNode_1.AstNodeKind.ConstStatement;
|
|
1842
1914
|
this.range = util_1.util.createBoundingRange(this.tokens.const, this.tokens.name, this.tokens.equals, this.value);
|
|
1843
1915
|
}
|
|
1844
1916
|
get name() {
|
|
@@ -1885,12 +1957,16 @@ class ConstStatement extends AstNode_1.Statement {
|
|
|
1885
1957
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1886
1958
|
}
|
|
1887
1959
|
}
|
|
1960
|
+
getType(options) {
|
|
1961
|
+
return this.value.getType(options);
|
|
1962
|
+
}
|
|
1888
1963
|
}
|
|
1889
1964
|
exports.ConstStatement = ConstStatement;
|
|
1890
|
-
class ContinueStatement extends
|
|
1965
|
+
class ContinueStatement extends AstNode_2.Statement {
|
|
1891
1966
|
constructor(tokens) {
|
|
1892
1967
|
super();
|
|
1893
1968
|
this.tokens = tokens;
|
|
1969
|
+
this.kind = AstNode_1.AstNodeKind.ContinueStatement;
|
|
1894
1970
|
this.range = util_1.util.createBoundingRange(tokens.continue, tokens.loopType);
|
|
1895
1971
|
}
|
|
1896
1972
|
transpile(state) {
|