brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13
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 +362 -248
- package/README.md +2 -2
- package/bsconfig.schema.json +1 -1
- package/dist/CodeActionUtil.d.ts +11 -2
- package/dist/CodeActionUtil.js +17 -3
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +4 -4
- package/dist/CommentFlagProcessor.js +5 -3
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.js +2 -2
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.js +3 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +15 -5
- package/dist/DiagnosticMessages.js +19 -9
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +11 -10
- package/dist/LanguageServer.js +87 -58
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +2 -0
- package/dist/Logger.js +5 -3
- package/dist/Logger.js.map +1 -1
- package/dist/Program.d.ts +76 -46
- package/dist/Program.js +254 -180
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +7 -7
- package/dist/ProgramBuilder.js +37 -43
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +33 -23
- package/dist/Scope.js +222 -147
- package/dist/Scope.js.map +1 -1
- package/dist/SemanticTokenUtils.d.ts +14 -0
- package/dist/SemanticTokenUtils.js +81 -0
- package/dist/SemanticTokenUtils.js.map +1 -0
- package/dist/SymbolTable.d.ts +9 -3
- package/dist/SymbolTable.js +40 -13
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.d.ts +7 -2
- package/dist/XmlScope.js +67 -29
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/AstEditor.d.ts +27 -0
- package/dist/astUtils/AstEditor.js +97 -0
- package/dist/astUtils/AstEditor.js.map +1 -0
- package/dist/astUtils/AstEditor.spec.d.ts +1 -0
- package/dist/astUtils/AstEditor.spec.js +133 -0
- package/dist/astUtils/AstEditor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +15 -1
- package/dist/astUtils/creators.js +39 -9
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +4 -4
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/index.js +1 -1
- package/dist/astUtils/reflection.d.ts +20 -8
- package/dist/astUtils/reflection.js +42 -1
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +115 -115
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/stackedVisitor.js.map +1 -1
- package/dist/astUtils/stackedVisitor.spec.js +13 -13
- package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
- package/dist/astUtils/visitors.js +1 -1
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +28 -28
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +4 -3
- package/dist/astUtils/xml.js +8 -3
- package/dist/astUtils/xml.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/codeActions/CodeActionsProcessor.js +5 -6
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +30 -30
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +7 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +63 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +45 -0
- package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +1 -0
- package/dist/diagnosticUtils.d.ts +1 -0
- package/dist/diagnosticUtils.js +14 -7
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +2 -2
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +486 -71
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +48 -23
- package/dist/files/BrsFile.js +403 -233
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +367 -316
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +13 -6
- package/dist/files/XmlFile.js +27 -21
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +274 -228
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +49 -49
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/globalCallables.d.ts +3 -1
- package/dist/globalCallables.js +359 -87
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +51 -14
- package/dist/lexer/Lexer.d.ts +14 -1
- package/dist/lexer/Lexer.js +91 -21
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +187 -132
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +2 -2
- package/dist/lexer/TokenKind.d.ts +7 -1
- package/dist/lexer/TokenKind.js +51 -3
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/lexer/index.js +2 -1
- package/dist/lexer/index.js.map +1 -1
- package/dist/parser/BrsTranspileState.d.ts +7 -0
- package/dist/parser/BrsTranspileState.js +10 -1
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +23 -5
- package/dist/parser/Expression.js +124 -75
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +159 -60
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +114 -26
- package/dist/parser/Parser.js +471 -126
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +396 -235
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +41 -4
- package/dist/parser/SGParser.js +186 -175
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +35 -22
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +206 -38
- package/dist/parser/SGTypes.js +470 -161
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/SGTypes.spec.d.ts +1 -0
- package/dist/parser/SGTypes.spec.js +351 -0
- package/dist/parser/SGTypes.spec.js.map +1 -0
- package/dist/parser/Statement.d.ts +92 -18
- package/dist/parser/Statement.js +287 -58
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +11 -11
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +15 -7
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/index.js +1 -1
- package/dist/parser/tests/Parser.spec.d.ts +8 -7
- package/dist/parser/tests/Parser.spec.js +12 -8
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +50 -50
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +31 -31
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +174 -156
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +32 -32
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +21 -21
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +105 -105
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +148 -124
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +17 -17
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +30 -30
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +16 -16
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +247 -247
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +73 -73
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +36 -36
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +59 -47
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +35 -35
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +26 -26
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +170 -0
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
- package/dist/parser/tests/expression/Relational.spec.js +42 -42
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +8 -8
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +12 -12
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +100 -100
- package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +35 -35
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/Declaration.spec.js +39 -39
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +21 -21
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Function.spec.js +192 -192
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +11 -11
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +46 -46
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +61 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
- package/dist/parser/tests/statement/LibraryStatement.spec.js +10 -10
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +37 -36
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +30 -30
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +43 -43
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +69 -69
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +9 -9
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/parser/tests/statement/Throw.spec.js +5 -5
- package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +13 -13
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/preprocessor/Chunk.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +1 -1
- package/dist/preprocessor/Preprocessor.js +1 -1
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/preprocessor/Preprocessor.spec.js +49 -49
- package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +72 -72
- package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
- package/dist/preprocessor/index.js +1 -1
- package/dist/types/ArrayType.js +5 -4
- 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.js +3 -3
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +2 -2
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +19 -5
- package/dist/types/BscType.js +9 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/CustomType.d.ts +8 -5
- package/dist/types/CustomType.js +17 -6
- package/dist/types/CustomType.js.map +1 -1
- package/dist/types/DoubleType.js +8 -8
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +2 -2
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.js +1 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +2 -2
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/FloatType.d.ts +1 -1
- package/dist/types/FloatType.js +8 -8
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +2 -2
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +5 -11
- package/dist/types/FunctionType.js +24 -13
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +11 -5
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/IntegerType.d.ts +1 -1
- package/dist/types/IntegerType.js +8 -8
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +2 -2
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +8 -2
- package/dist/types/InterfaceType.js +42 -6
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.d.ts +1 -0
- package/dist/types/InterfaceType.spec.js +174 -0
- package/dist/types/InterfaceType.spec.js.map +1 -0
- package/dist/types/InvalidType.js +4 -4
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +2 -2
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LazyType.d.ts +9 -7
- package/dist/types/LazyType.js +22 -10
- package/dist/types/LazyType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +1 -1
- package/dist/types/LongIntegerType.js +8 -8
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +2 -2
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/ObjectType.d.ts +7 -4
- package/dist/types/ObjectType.js +6 -3
- 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/StringType.js +3 -3
- 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.js +3 -3
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/VoidType.js +3 -3
- 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/helpers.d.ts +42 -0
- package/dist/types/helpers.js +113 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/util.d.ts +77 -17
- package/dist/util.js +247 -59
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +5 -1
- package/dist/validators/ClassValidator.js +59 -24
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +13 -13
package/dist/parser/Statement.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ThrowStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.ClassMethodStatement = exports.ClassStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = exports.Statement = void 0;
|
|
3
|
+
exports.ThrowStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.ClassMethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = exports.Statement = void 0;
|
|
4
4
|
const lexer_1 = require("../lexer");
|
|
5
5
|
const Expression_1 = require("./Expression");
|
|
6
6
|
const util_1 = require("../util");
|
|
@@ -11,6 +11,7 @@ const reflection_1 = require("../astUtils/reflection");
|
|
|
11
11
|
const creators_1 = require("../astUtils/creators");
|
|
12
12
|
const DynamicType_1 = require("../types/DynamicType");
|
|
13
13
|
const SymbolTable_1 = require("../SymbolTable");
|
|
14
|
+
const CustomType_1 = require("../types/CustomType");
|
|
14
15
|
/**
|
|
15
16
|
* A BrightScript statement
|
|
16
17
|
*/
|
|
@@ -62,15 +63,15 @@ class Body extends Statement {
|
|
|
62
63
|
//this is the first statement. do nothing related to spacing and newlines
|
|
63
64
|
//if comment is on same line as prior sibling
|
|
64
65
|
}
|
|
65
|
-
else if (reflection_1.isCommentStatement(statement) && previousStatement && statement.range.start.line === previousStatement.range.end.line) {
|
|
66
|
+
else if ((0, reflection_1.isCommentStatement)(statement) && previousStatement && statement.range.start.line === previousStatement.range.end.line) {
|
|
66
67
|
result.push(' ');
|
|
67
68
|
//add double newline if this is a comment, and next is a function
|
|
68
69
|
}
|
|
69
|
-
else if (reflection_1.isCommentStatement(statement) && nextStatement && reflection_1.isFunctionStatement(nextStatement)) {
|
|
70
|
+
else if ((0, reflection_1.isCommentStatement)(statement) && nextStatement && (0, reflection_1.isFunctionStatement)(nextStatement)) {
|
|
70
71
|
result.push('\n\n');
|
|
71
72
|
//add double newline if is function not preceeded by a comment
|
|
72
73
|
}
|
|
73
|
-
else if (reflection_1.isFunctionStatement(statement) && previousStatement && !(reflection_1.isCommentStatement(previousStatement))) {
|
|
74
|
+
else if ((0, reflection_1.isFunctionStatement)(statement) && previousStatement && !((0, reflection_1.isCommentStatement)(previousStatement))) {
|
|
74
75
|
result.push('\n\n');
|
|
75
76
|
}
|
|
76
77
|
else {
|
|
@@ -85,7 +86,7 @@ class Body extends Statement {
|
|
|
85
86
|
let result = [];
|
|
86
87
|
for (const statement of this.statements) {
|
|
87
88
|
//if the current statement supports generating typedef, call it
|
|
88
|
-
if (
|
|
89
|
+
if ((0, reflection_1.isTypedefProvider)(statement)) {
|
|
89
90
|
result.push(state.indent(), ...statement.getTypedef(state), state.newline);
|
|
90
91
|
}
|
|
91
92
|
}
|
|
@@ -94,7 +95,7 @@ class Body extends Statement {
|
|
|
94
95
|
walk(visitor, options) {
|
|
95
96
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
96
97
|
for (let i = 0; i < this.statements.length; i++) {
|
|
97
|
-
visitors_1.walk(this.statements, i, visitor, options, this);
|
|
98
|
+
(0, visitors_1.walk)(this.statements, i, visitor, options, this);
|
|
98
99
|
}
|
|
99
100
|
}
|
|
100
101
|
}
|
|
@@ -127,7 +128,7 @@ class AssignmentStatement extends Statement {
|
|
|
127
128
|
}
|
|
128
129
|
walk(visitor, options) {
|
|
129
130
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
130
|
-
visitors_1.walk(this, 'value', visitor, options);
|
|
131
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
134
|
}
|
|
@@ -148,7 +149,7 @@ class Block extends Statement {
|
|
|
148
149
|
let previousStatement = this.statements[i - 1];
|
|
149
150
|
let statement = this.statements[i];
|
|
150
151
|
//if comment is on same line as parent
|
|
151
|
-
if (reflection_1.isCommentStatement(statement) &&
|
|
152
|
+
if ((0, reflection_1.isCommentStatement)(statement) &&
|
|
152
153
|
(util_1.util.linesTouch(state.lineage[0], statement) || util_1.util.linesTouch(previousStatement, statement))) {
|
|
153
154
|
results.push(' ');
|
|
154
155
|
//is not a comment
|
|
@@ -168,7 +169,7 @@ class Block extends Statement {
|
|
|
168
169
|
walk(visitor, options) {
|
|
169
170
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
170
171
|
for (let i = 0; i < this.statements.length; i++) {
|
|
171
|
-
visitors_1.walk(this.statements, i, visitor, options, this);
|
|
172
|
+
(0, visitors_1.walk)(this.statements, i, visitor, options, this);
|
|
172
173
|
}
|
|
173
174
|
}
|
|
174
175
|
}
|
|
@@ -185,7 +186,7 @@ class ExpressionStatement extends Statement {
|
|
|
185
186
|
}
|
|
186
187
|
walk(visitor, options) {
|
|
187
188
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
188
|
-
visitors_1.walk(this, 'expression', visitor, options);
|
|
189
|
+
(0, visitors_1.walk)(this, 'expression', visitor, options);
|
|
189
190
|
}
|
|
190
191
|
}
|
|
191
192
|
}
|
|
@@ -295,7 +296,7 @@ class FunctionStatement extends Statement {
|
|
|
295
296
|
}
|
|
296
297
|
walk(visitor, options) {
|
|
297
298
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
298
|
-
visitors_1.walk(this, 'func', visitor, options);
|
|
299
|
+
(0, visitors_1.walk)(this, 'func', visitor, options);
|
|
299
300
|
}
|
|
300
301
|
}
|
|
301
302
|
}
|
|
@@ -340,7 +341,7 @@ class IfStatement extends Statement {
|
|
|
340
341
|
results.push(state.indent(), state.transpileToken(this.tokens.else));
|
|
341
342
|
}
|
|
342
343
|
if (this.elseBranch) {
|
|
343
|
-
if (reflection_1.isIfStatement(this.elseBranch)) {
|
|
344
|
+
if ((0, reflection_1.isIfStatement)(this.elseBranch)) {
|
|
344
345
|
//chained elseif
|
|
345
346
|
state.lineage.unshift(this.elseBranch);
|
|
346
347
|
let body = this.elseBranch.transpile(state);
|
|
@@ -378,13 +379,13 @@ class IfStatement extends Statement {
|
|
|
378
379
|
}
|
|
379
380
|
walk(visitor, options) {
|
|
380
381
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
381
|
-
visitors_1.walk(this, 'condition', visitor, options);
|
|
382
|
+
(0, visitors_1.walk)(this, 'condition', visitor, options);
|
|
382
383
|
}
|
|
383
384
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
384
|
-
visitors_1.walk(this, 'thenBranch', visitor, options);
|
|
385
|
+
(0, visitors_1.walk)(this, 'thenBranch', visitor, options);
|
|
385
386
|
}
|
|
386
387
|
if (this.elseBranch && options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
387
|
-
visitors_1.walk(this, 'elseBranch', visitor, options);
|
|
388
|
+
(0, visitors_1.walk)(this, 'elseBranch', visitor, options);
|
|
388
389
|
}
|
|
389
390
|
}
|
|
390
391
|
}
|
|
@@ -404,7 +405,7 @@ class IncrementStatement extends Statement {
|
|
|
404
405
|
}
|
|
405
406
|
walk(visitor, options) {
|
|
406
407
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
407
|
-
visitors_1.walk(this, 'value', visitor, options);
|
|
408
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
408
409
|
}
|
|
409
410
|
}
|
|
410
411
|
}
|
|
@@ -451,8 +452,8 @@ class PrintStatement extends Statement {
|
|
|
451
452
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
452
453
|
for (let i = 0; i < this.expressions.length; i++) {
|
|
453
454
|
//sometimes we have semicolon `Token`s in the expressions list (should probably fix that...), so only emit the actual expressions
|
|
454
|
-
if (reflection_1.isExpression(this.expressions[i])) {
|
|
455
|
-
visitors_1.walk(this.expressions, i, visitor, options, this);
|
|
455
|
+
if ((0, reflection_1.isExpression)(this.expressions[i])) {
|
|
456
|
+
(0, visitors_1.walk)(this.expressions, i, visitor, options, this);
|
|
456
457
|
}
|
|
457
458
|
}
|
|
458
459
|
}
|
|
@@ -490,7 +491,7 @@ class DimStatement extends Statement {
|
|
|
490
491
|
var _a;
|
|
491
492
|
if (((_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) > 0 && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
492
493
|
for (let i = 0; i < this.dimensions.length; i++) {
|
|
493
|
-
visitors_1.walk(this.dimensions, i, visitor, options, this);
|
|
494
|
+
(0, visitors_1.walk)(this.dimensions, i, visitor, options, this);
|
|
494
495
|
}
|
|
495
496
|
}
|
|
496
497
|
}
|
|
@@ -550,7 +551,7 @@ class ReturnStatement extends Statement {
|
|
|
550
551
|
}
|
|
551
552
|
walk(visitor, options) {
|
|
552
553
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
553
|
-
visitors_1.walk(this, 'value', visitor, options);
|
|
554
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
554
555
|
}
|
|
555
556
|
}
|
|
556
557
|
}
|
|
@@ -629,14 +630,14 @@ class ForStatement extends Statement {
|
|
|
629
630
|
}
|
|
630
631
|
walk(visitor, options) {
|
|
631
632
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
632
|
-
visitors_1.walk(this, 'counterDeclaration', visitor, options);
|
|
633
|
+
(0, visitors_1.walk)(this, 'counterDeclaration', visitor, options);
|
|
633
634
|
}
|
|
634
635
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
635
|
-
visitors_1.walk(this, 'finalValue', visitor, options);
|
|
636
|
-
visitors_1.walk(this, 'increment', visitor, options);
|
|
636
|
+
(0, visitors_1.walk)(this, 'finalValue', visitor, options);
|
|
637
|
+
(0, visitors_1.walk)(this, 'increment', visitor, options);
|
|
637
638
|
}
|
|
638
639
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
639
|
-
visitors_1.walk(this, 'body', visitor, options);
|
|
640
|
+
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
640
641
|
}
|
|
641
642
|
}
|
|
642
643
|
}
|
|
@@ -676,10 +677,10 @@ class ForEachStatement extends Statement {
|
|
|
676
677
|
}
|
|
677
678
|
walk(visitor, options) {
|
|
678
679
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
679
|
-
visitors_1.walk(this, 'target', visitor, options);
|
|
680
|
+
(0, visitors_1.walk)(this, 'target', visitor, options);
|
|
680
681
|
}
|
|
681
682
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
682
|
-
visitors_1.walk(this, 'body', visitor, options);
|
|
683
|
+
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
683
684
|
}
|
|
684
685
|
}
|
|
685
686
|
}
|
|
@@ -712,10 +713,10 @@ class WhileStatement extends Statement {
|
|
|
712
713
|
}
|
|
713
714
|
walk(visitor, options) {
|
|
714
715
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
715
|
-
visitors_1.walk(this, 'condition', visitor, options);
|
|
716
|
+
(0, visitors_1.walk)(this, 'condition', visitor, options);
|
|
716
717
|
}
|
|
717
718
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
718
|
-
visitors_1.walk(this, 'body', visitor, options);
|
|
719
|
+
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
719
720
|
}
|
|
720
721
|
}
|
|
721
722
|
}
|
|
@@ -749,8 +750,8 @@ class DottedSetStatement extends Statement {
|
|
|
749
750
|
}
|
|
750
751
|
walk(visitor, options) {
|
|
751
752
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
752
|
-
visitors_1.walk(this, 'obj', visitor, options);
|
|
753
|
-
visitors_1.walk(this, 'value', visitor, options);
|
|
753
|
+
(0, visitors_1.walk)(this, 'obj', visitor, options);
|
|
754
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
754
755
|
}
|
|
755
756
|
}
|
|
756
757
|
}
|
|
@@ -790,9 +791,9 @@ class IndexedSetStatement extends Statement {
|
|
|
790
791
|
}
|
|
791
792
|
walk(visitor, options) {
|
|
792
793
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
793
|
-
visitors_1.walk(this, 'obj', visitor, options);
|
|
794
|
-
visitors_1.walk(this, 'index', visitor, options);
|
|
795
|
-
visitors_1.walk(this, 'value', visitor, options);
|
|
794
|
+
(0, visitors_1.walk)(this, 'obj', visitor, options);
|
|
795
|
+
(0, visitors_1.walk)(this, 'index', visitor, options);
|
|
796
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
796
797
|
}
|
|
797
798
|
}
|
|
798
799
|
}
|
|
@@ -858,10 +859,10 @@ class NamespaceStatement extends Statement {
|
|
|
858
859
|
}
|
|
859
860
|
walk(visitor, options) {
|
|
860
861
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
861
|
-
visitors_1.walk(this, 'nameExpression', visitor, options);
|
|
862
|
+
(0, visitors_1.walk)(this, 'nameExpression', visitor, options);
|
|
862
863
|
}
|
|
863
864
|
if (this.body.statements.length > 0 && options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
864
|
-
visitors_1.walk(this, 'body', visitor, options);
|
|
865
|
+
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
865
866
|
}
|
|
866
867
|
}
|
|
867
868
|
}
|
|
@@ -905,12 +906,184 @@ class ImportStatement extends Statement {
|
|
|
905
906
|
}
|
|
906
907
|
}
|
|
907
908
|
exports.ImportStatement = ImportStatement;
|
|
909
|
+
class InterfaceStatement extends Statement {
|
|
910
|
+
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken, namespaceName) {
|
|
911
|
+
super();
|
|
912
|
+
this.parentInterfaceName = parentInterfaceName;
|
|
913
|
+
this.body = body;
|
|
914
|
+
this.namespaceName = namespaceName;
|
|
915
|
+
this.tokens = {};
|
|
916
|
+
this.tokens.interface = interfaceToken;
|
|
917
|
+
this.tokens.name = name;
|
|
918
|
+
this.tokens.extends = extendsToken;
|
|
919
|
+
this.tokens.endInterface = endInterfaceToken;
|
|
920
|
+
}
|
|
921
|
+
get fields() {
|
|
922
|
+
return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
|
|
923
|
+
}
|
|
924
|
+
get methods() {
|
|
925
|
+
return this.body.filter(x => (0, reflection_1.isInterfaceMethodStatement)(x));
|
|
926
|
+
}
|
|
927
|
+
/**
|
|
928
|
+
* The name of the interface WITH its leading namespace (if applicable)
|
|
929
|
+
*/
|
|
930
|
+
get fullName() {
|
|
931
|
+
var _a;
|
|
932
|
+
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
933
|
+
if (name) {
|
|
934
|
+
if (this.namespaceName) {
|
|
935
|
+
let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
|
|
936
|
+
return `${namespaceName}.${name}`;
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
return name;
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
else {
|
|
943
|
+
//return undefined which will allow outside callers to know that this interface doesn't have a name
|
|
944
|
+
return undefined;
|
|
945
|
+
}
|
|
946
|
+
}
|
|
947
|
+
/**
|
|
948
|
+
* The name of the interface (without the namespace prefix)
|
|
949
|
+
*/
|
|
950
|
+
get name() {
|
|
951
|
+
var _a;
|
|
952
|
+
return (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
953
|
+
}
|
|
954
|
+
transpile(state) {
|
|
955
|
+
//interfaces should completely disappear at runtime
|
|
956
|
+
return [];
|
|
957
|
+
}
|
|
958
|
+
getTypedef(state) {
|
|
959
|
+
var _a, _b, _c;
|
|
960
|
+
const result = [];
|
|
961
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
962
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
963
|
+
}
|
|
964
|
+
result.push(this.tokens.interface.text, ' ', this.tokens.name.text);
|
|
965
|
+
const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName(Parser_1.ParseMode.BrighterScript);
|
|
966
|
+
if (parentInterfaceName) {
|
|
967
|
+
result.push(' extends ', parentInterfaceName);
|
|
968
|
+
}
|
|
969
|
+
const body = (_c = this.body) !== null && _c !== void 0 ? _c : [];
|
|
970
|
+
if (body.length > 0) {
|
|
971
|
+
state.blockDepth++;
|
|
972
|
+
}
|
|
973
|
+
for (const statement of body) {
|
|
974
|
+
if ((0, reflection_1.isInterfaceMethodStatement)(statement) || (0, reflection_1.isInterfaceFieldStatement)(statement)) {
|
|
975
|
+
result.push(state.newline, state.indent(), ...statement.getTypedef(state));
|
|
976
|
+
}
|
|
977
|
+
else {
|
|
978
|
+
result.push(state.newline, state.indent(), ...statement.transpile(state));
|
|
979
|
+
}
|
|
980
|
+
}
|
|
981
|
+
if (body.length > 0) {
|
|
982
|
+
state.blockDepth--;
|
|
983
|
+
}
|
|
984
|
+
result.push(state.newline, state.indent(), 'end interface', state.newline);
|
|
985
|
+
return result;
|
|
986
|
+
}
|
|
987
|
+
walk(visitor, options) {
|
|
988
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
989
|
+
for (let i = 0; i < this.body.length; i++) {
|
|
990
|
+
(0, visitors_1.walk)(this.body, i, visitor, options, this);
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
}
|
|
994
|
+
}
|
|
995
|
+
exports.InterfaceStatement = InterfaceStatement;
|
|
996
|
+
class InterfaceFieldStatement extends Statement {
|
|
997
|
+
constructor(nameToken, asToken, typeToken, type) {
|
|
998
|
+
super();
|
|
999
|
+
this.type = type;
|
|
1000
|
+
this.tokens = {};
|
|
1001
|
+
this.tokens.name = nameToken;
|
|
1002
|
+
this.tokens.as = asToken;
|
|
1003
|
+
this.tokens.type = typeToken;
|
|
1004
|
+
}
|
|
1005
|
+
transpile(state) {
|
|
1006
|
+
throw new Error('Method not implemented.');
|
|
1007
|
+
}
|
|
1008
|
+
get range() {
|
|
1009
|
+
var _a, _b;
|
|
1010
|
+
return util_1.util.createRangeFromPositions(this.tokens.name.range.start, ((_b = (_a = this.tokens.type) !== null && _a !== void 0 ? _a : this.tokens.as) !== null && _b !== void 0 ? _b : this.tokens.name).range.end);
|
|
1011
|
+
}
|
|
1012
|
+
get name() {
|
|
1013
|
+
return this.tokens.name.text;
|
|
1014
|
+
}
|
|
1015
|
+
walk(visitor, options) {
|
|
1016
|
+
//nothing to walk
|
|
1017
|
+
}
|
|
1018
|
+
getTypedef(state) {
|
|
1019
|
+
var _a, _b, _c;
|
|
1020
|
+
const result = [];
|
|
1021
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1022
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1023
|
+
}
|
|
1024
|
+
result.push(this.tokens.name.text);
|
|
1025
|
+
if (((_c = (_b = this.tokens.type) === null || _b === void 0 ? void 0 : _b.text) === null || _c === void 0 ? void 0 : _c.length) > 0) {
|
|
1026
|
+
result.push(' as ', this.tokens.type.text);
|
|
1027
|
+
}
|
|
1028
|
+
return result;
|
|
1029
|
+
}
|
|
1030
|
+
}
|
|
1031
|
+
exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
1032
|
+
class InterfaceMethodStatement extends Statement {
|
|
1033
|
+
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeToken, returnType) {
|
|
1034
|
+
super();
|
|
1035
|
+
this.params = params;
|
|
1036
|
+
this.returnType = returnType;
|
|
1037
|
+
this.tokens = {};
|
|
1038
|
+
this.tokens.functionType = functionTypeToken;
|
|
1039
|
+
this.tokens.name = nameToken;
|
|
1040
|
+
this.tokens.leftParen = leftParen;
|
|
1041
|
+
this.tokens.rightParen = rightParen;
|
|
1042
|
+
this.tokens.as = asToken;
|
|
1043
|
+
this.tokens.returnType = returnTypeToken;
|
|
1044
|
+
}
|
|
1045
|
+
transpile(state) {
|
|
1046
|
+
throw new Error('Method not implemented.');
|
|
1047
|
+
}
|
|
1048
|
+
get range() {
|
|
1049
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1050
|
+
return util_1.util.createRangeFromPositions(this.tokens.name.range.start, ((_h = (_g = (_f = (_c = (_b = (_a = this.tokens.returnType) !== null && _a !== void 0 ? _a : this.tokens.as) !== null && _b !== void 0 ? _b : this.tokens.rightParen) !== null && _c !== void 0 ? _c : (_d = this.params) === null || _d === void 0 ? void 0 : _d[((_e = this.params) === null || _e === void 0 ? void 0 : _e.length) - 1]) !== null && _f !== void 0 ? _f : this.tokens.leftParen) !== null && _g !== void 0 ? _g : this.tokens.name) !== null && _h !== void 0 ? _h : this.tokens.functionType).range.end);
|
|
1051
|
+
}
|
|
1052
|
+
walk(visitor, options) {
|
|
1053
|
+
//nothing to walk
|
|
1054
|
+
}
|
|
1055
|
+
getTypedef(state) {
|
|
1056
|
+
var _a, _b, _c, _d, _e;
|
|
1057
|
+
const result = [];
|
|
1058
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1059
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1060
|
+
}
|
|
1061
|
+
result.push(this.tokens.functionType.text, ' ', this.tokens.name.text, '(');
|
|
1062
|
+
const params = (_b = this.params) !== null && _b !== void 0 ? _b : [];
|
|
1063
|
+
for (let i = 0; i < params.length; i++) {
|
|
1064
|
+
if (i > 0) {
|
|
1065
|
+
result.push(', ');
|
|
1066
|
+
}
|
|
1067
|
+
const param = params[i];
|
|
1068
|
+
result.push(param.name.text);
|
|
1069
|
+
if (((_d = (_c = param.typeToken) === null || _c === void 0 ? void 0 : _c.text) === null || _d === void 0 ? void 0 : _d.length) > 0) {
|
|
1070
|
+
result.push(' as ', param.typeToken.text);
|
|
1071
|
+
}
|
|
1072
|
+
}
|
|
1073
|
+
result.push(')');
|
|
1074
|
+
if (((_e = this.tokens.returnType) === null || _e === void 0 ? void 0 : _e.text.length) > 0) {
|
|
1075
|
+
result.push(' as ', this.tokens.returnType.text);
|
|
1076
|
+
}
|
|
1077
|
+
return result;
|
|
1078
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
exports.InterfaceMethodStatement = InterfaceMethodStatement;
|
|
908
1081
|
class ClassStatement extends Statement {
|
|
909
1082
|
constructor(classKeyword,
|
|
910
1083
|
/**
|
|
911
1084
|
* The name of the class (without namespace prefix)
|
|
912
1085
|
*/
|
|
913
|
-
name, body, end, extendsKeyword, parentClassName, namespaceName) {
|
|
1086
|
+
name, body, end, extendsKeyword, parentClassName, namespaceName, currentSymbolTable) {
|
|
914
1087
|
var _a, _b, _c;
|
|
915
1088
|
super();
|
|
916
1089
|
this.classKeyword = classKeyword;
|
|
@@ -920,21 +1093,25 @@ class ClassStatement extends Statement {
|
|
|
920
1093
|
this.extendsKeyword = extendsKeyword;
|
|
921
1094
|
this.parentClassName = parentClassName;
|
|
922
1095
|
this.namespaceName = namespaceName;
|
|
1096
|
+
this.currentSymbolTable = currentSymbolTable;
|
|
1097
|
+
this.symbolTable = new SymbolTable_1.SymbolTable();
|
|
1098
|
+
this.memberTable = new SymbolTable_1.SymbolTable();
|
|
923
1099
|
this.memberMap = {};
|
|
924
1100
|
this.methods = [];
|
|
925
1101
|
this.fields = [];
|
|
926
1102
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1103
|
+
this.symbolTable.setParent(currentSymbolTable);
|
|
1104
|
+
this.range = util_1.util.createRangeFromPositions(this.classKeyword.range.start, this.end.range.end);
|
|
927
1105
|
for (let statement of this.body) {
|
|
928
|
-
if (reflection_1.isClassMethodStatement(statement)) {
|
|
1106
|
+
if ((0, reflection_1.isClassMethodStatement)(statement)) {
|
|
929
1107
|
this.methods.push(statement);
|
|
930
1108
|
this.memberMap[(_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text.toLowerCase()] = statement;
|
|
931
1109
|
}
|
|
932
|
-
else if (reflection_1.isClassFieldStatement(statement)) {
|
|
1110
|
+
else if ((0, reflection_1.isClassFieldStatement)(statement)) {
|
|
933
1111
|
this.fields.push(statement);
|
|
934
1112
|
this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
|
|
935
1113
|
}
|
|
936
1114
|
}
|
|
937
|
-
this.range = util_1.util.createRangeFromPositions(this.classKeyword.range.start, this.end.range.end);
|
|
938
1115
|
}
|
|
939
1116
|
getName(parseMode) {
|
|
940
1117
|
var _a;
|
|
@@ -954,6 +1131,36 @@ class ClassStatement extends Statement {
|
|
|
954
1131
|
return undefined;
|
|
955
1132
|
}
|
|
956
1133
|
}
|
|
1134
|
+
getCustomType() {
|
|
1135
|
+
return new CustomType_1.CustomType(this.getName(Parser_1.ParseMode.BrighterScript), this.memberTable);
|
|
1136
|
+
}
|
|
1137
|
+
getConstructorFunctionType() {
|
|
1138
|
+
var _a;
|
|
1139
|
+
const constructFunc = (_a = this.getConstructorFunction()) !== null && _a !== void 0 ? _a : this.getEmptyNewFunction();
|
|
1140
|
+
const constructorFuncType = constructFunc.func.getFunctionType();
|
|
1141
|
+
constructorFuncType.setName(this.getName(Parser_1.ParseMode.BrighterScript));
|
|
1142
|
+
constructorFuncType.isNew = true;
|
|
1143
|
+
return constructorFuncType;
|
|
1144
|
+
}
|
|
1145
|
+
buildSymbolTable(parentClass) {
|
|
1146
|
+
var _a, _b, _c, _d, _e;
|
|
1147
|
+
this.symbolTable.clear();
|
|
1148
|
+
this.symbolTable.addSymbol('m', (_a = this.name) === null || _a === void 0 ? void 0 : _a.range, this.getCustomType());
|
|
1149
|
+
this.memberTable.clear();
|
|
1150
|
+
if (parentClass) {
|
|
1151
|
+
this.symbolTable.addSymbol('super', (_b = this.parentClassName) === null || _b === void 0 ? void 0 : _b.range, parentClass.getConstructorFunctionType());
|
|
1152
|
+
this.memberTable.setParent(parentClass === null || parentClass === void 0 ? void 0 : parentClass.memberTable);
|
|
1153
|
+
}
|
|
1154
|
+
for (const statement of this.methods) {
|
|
1155
|
+
statement === null || statement === void 0 ? void 0 : statement.func.symbolTable.setParent(this.symbolTable);
|
|
1156
|
+
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getFunctionType();
|
|
1157
|
+
funcType.setName(this.getName(Parser_1.ParseMode.BrighterScript) + '.' + ((_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text));
|
|
1158
|
+
this.memberTable.addSymbol((_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text, statement === null || statement === void 0 ? void 0 : statement.range, funcType);
|
|
1159
|
+
}
|
|
1160
|
+
for (const statement of this.fields) {
|
|
1161
|
+
this.memberTable.addSymbol((_e = statement === null || statement === void 0 ? void 0 : statement.name) === null || _e === void 0 ? void 0 : _e.text, statement === null || statement === void 0 ? void 0 : statement.range, statement.getType());
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
957
1164
|
transpile(state) {
|
|
958
1165
|
let result = [];
|
|
959
1166
|
//make the builder
|
|
@@ -977,7 +1184,7 @@ class ClassStatement extends Statement {
|
|
|
977
1184
|
result.push(state.newline);
|
|
978
1185
|
state.blockDepth++;
|
|
979
1186
|
for (const member of this.body) {
|
|
980
|
-
if (
|
|
1187
|
+
if ((0, reflection_1.isTypedefProvider)(member)) {
|
|
981
1188
|
result.push(state.indent(), ...member.getTypedef(state), state.newline);
|
|
982
1189
|
}
|
|
983
1190
|
}
|
|
@@ -1009,6 +1216,27 @@ class ClassStatement extends Statement {
|
|
|
1009
1216
|
hasParentClass() {
|
|
1010
1217
|
return !!this.parentClassName;
|
|
1011
1218
|
}
|
|
1219
|
+
/**
|
|
1220
|
+
* Gets an array of possible parent class names, taking into account the namespace this class was created under
|
|
1221
|
+
* @returns array of possible parent class names
|
|
1222
|
+
*/
|
|
1223
|
+
getPossibleFullParentNames() {
|
|
1224
|
+
var _a;
|
|
1225
|
+
if (!this.hasParentClass()) {
|
|
1226
|
+
return [];
|
|
1227
|
+
}
|
|
1228
|
+
if (((_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getNameParts().length) > 1) {
|
|
1229
|
+
// The specified parent class already has a dot, so it must already reference a namespace
|
|
1230
|
+
return [this.parentClassName.getName()];
|
|
1231
|
+
}
|
|
1232
|
+
const names = [];
|
|
1233
|
+
if (this.namespaceName) {
|
|
1234
|
+
// We're under a namespace, so the full parent name MIGHT be with this namespace too
|
|
1235
|
+
names.push(this.namespaceName.getName() + '.' + this.parentClassName.getName());
|
|
1236
|
+
}
|
|
1237
|
+
names.push(this.parentClassName.getName());
|
|
1238
|
+
return names;
|
|
1239
|
+
}
|
|
1012
1240
|
/**
|
|
1013
1241
|
* Get all ancestor classes, in closest-to-furthest order (i.e. 0 is parent, 1 is grandparent, etc...).
|
|
1014
1242
|
* This will return an empty array if no ancestors were found
|
|
@@ -1102,12 +1330,12 @@ class ClassStatement extends Statement {
|
|
|
1102
1330
|
}
|
|
1103
1331
|
for (let statement of this.body) {
|
|
1104
1332
|
//is field statement
|
|
1105
|
-
if (reflection_1.isClassFieldStatement(statement)) {
|
|
1333
|
+
if ((0, reflection_1.isClassFieldStatement)(statement)) {
|
|
1106
1334
|
//do nothing with class fields in this situation, they are handled elsewhere
|
|
1107
1335
|
continue;
|
|
1108
1336
|
//methods
|
|
1109
1337
|
}
|
|
1110
|
-
else if (reflection_1.isClassMethodStatement(statement)) {
|
|
1338
|
+
else if ((0, reflection_1.isClassMethodStatement)(statement)) {
|
|
1111
1339
|
//store overridden parent methods as super{parentIndex}_{methodName}
|
|
1112
1340
|
if (
|
|
1113
1341
|
//is override method
|
|
@@ -1176,7 +1404,7 @@ class ClassStatement extends Statement {
|
|
|
1176
1404
|
walk(visitor, options) {
|
|
1177
1405
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1178
1406
|
for (let i = 0; i < this.body.length; i++) {
|
|
1179
|
-
visitors_1.walk(this.body, i, visitor, options, this);
|
|
1407
|
+
(0, visitors_1.walk)(this.body, i, visitor, options, this);
|
|
1180
1408
|
}
|
|
1181
1409
|
}
|
|
1182
1410
|
}
|
|
@@ -1199,7 +1427,7 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1199
1427
|
//TODO - remove type information from these methods because that doesn't work
|
|
1200
1428
|
//convert the `super` calls into the proper methods
|
|
1201
1429
|
const parentClassIndex = state.classStatement.getParentClassIndex(state);
|
|
1202
|
-
const visitor = visitors_1.createVisitor({
|
|
1430
|
+
const visitor = (0, visitors_1.createVisitor)({
|
|
1203
1431
|
VariableExpression: e => {
|
|
1204
1432
|
if (e.name.text.toLocaleLowerCase() === 'super') {
|
|
1205
1433
|
e.name.text = `m.super${parentClassIndex}_new`;
|
|
@@ -1249,7 +1477,7 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1249
1477
|
let firstStatement = this.func.body.statements[0];
|
|
1250
1478
|
if (
|
|
1251
1479
|
//is a call statement
|
|
1252
|
-
reflection_1.isExpressionStatement(firstStatement) && reflection_1.isCallExpression(firstStatement.expression) &&
|
|
1480
|
+
(0, reflection_1.isExpressionStatement)(firstStatement) && (0, reflection_1.isCallExpression)(firstStatement.expression) &&
|
|
1253
1481
|
//is a call to super
|
|
1254
1482
|
util_1.util.findBeginningVariableExpression(firstStatement === null || firstStatement === void 0 ? void 0 : firstStatement.expression.callee).name.text.toLowerCase() === 'super') {
|
|
1255
1483
|
return;
|
|
@@ -1290,20 +1518,20 @@ class ClassMethodStatement extends FunctionStatement {
|
|
|
1290
1518
|
}
|
|
1291
1519
|
else {
|
|
1292
1520
|
//if there is no initial value, set the initial value to `invalid`
|
|
1293
|
-
newStatements.push(new AssignmentStatement(thisQualifiedName, creators_1.createToken(lexer_1.TokenKind.Equal, '=', field.name.range), creators_1.createInvalidLiteral('invalid', field.name.range), this.func));
|
|
1521
|
+
newStatements.push(new AssignmentStatement(thisQualifiedName, (0, creators_1.createToken)(lexer_1.TokenKind.Equal, '=', field.name.range), (0, creators_1.createInvalidLiteral)('invalid', field.name.range), this.func));
|
|
1294
1522
|
}
|
|
1295
1523
|
}
|
|
1296
1524
|
this.func.body.statements.splice(startingIndex, 0, ...newStatements);
|
|
1297
1525
|
}
|
|
1298
1526
|
walk(visitor, options) {
|
|
1299
1527
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1300
|
-
visitors_1.walk(this, 'func', visitor, options);
|
|
1528
|
+
(0, visitors_1.walk)(this, 'func', visitor, options);
|
|
1301
1529
|
}
|
|
1302
1530
|
}
|
|
1303
1531
|
}
|
|
1304
1532
|
exports.ClassMethodStatement = ClassMethodStatement;
|
|
1305
1533
|
class ClassFieldStatement extends Statement {
|
|
1306
|
-
constructor(accessModifier, name, as, type, equal, initialValue) {
|
|
1534
|
+
constructor(accessModifier, name, as, type, equal, initialValue, namespaceName) {
|
|
1307
1535
|
var _a, _b, _c, _d;
|
|
1308
1536
|
super();
|
|
1309
1537
|
this.accessModifier = accessModifier;
|
|
@@ -1312,17 +1540,18 @@ class ClassFieldStatement extends Statement {
|
|
|
1312
1540
|
this.type = type;
|
|
1313
1541
|
this.equal = equal;
|
|
1314
1542
|
this.initialValue = initialValue;
|
|
1543
|
+
this.namespaceName = namespaceName;
|
|
1315
1544
|
this.range = util_1.util.createRangeFromPositions(((_a = this.accessModifier) !== null && _a !== void 0 ? _a : this.name).range.start, ((_d = (_c = (_b = this.initialValue) !== null && _b !== void 0 ? _b : this.type) !== null && _c !== void 0 ? _c : this.as) !== null && _d !== void 0 ? _d : this.name).range.end);
|
|
1316
1545
|
}
|
|
1317
1546
|
/**
|
|
1318
1547
|
* Derive a ValueKind from the type token, or the initial value.
|
|
1319
|
-
* Defaults to `
|
|
1548
|
+
* Defaults to `DynamicType`
|
|
1320
1549
|
*/
|
|
1321
|
-
getType() {
|
|
1550
|
+
getType(parseMode = Parser_1.ParseMode.BrighterScript) {
|
|
1322
1551
|
if (this.type) {
|
|
1323
|
-
return util_1.util.tokenToBscType(this.type);
|
|
1552
|
+
return util_1.util.tokenToBscType(this.type, parseMode === Parser_1.ParseMode.BrighterScript, this.namespaceName);
|
|
1324
1553
|
}
|
|
1325
|
-
else if (reflection_1.isLiteralExpression(this.initialValue)) {
|
|
1554
|
+
else if ((0, reflection_1.isLiteralExpression)(this.initialValue)) {
|
|
1326
1555
|
return this.initialValue.type;
|
|
1327
1556
|
}
|
|
1328
1557
|
else {
|
|
@@ -1339,8 +1568,8 @@ class ClassFieldStatement extends Statement {
|
|
|
1339
1568
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1340
1569
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1341
1570
|
}
|
|
1342
|
-
let type = this.getType();
|
|
1343
|
-
if (reflection_1.isInvalidType(type) || reflection_1.isVoidType(type)) {
|
|
1571
|
+
let type = this.getType(Parser_1.ParseMode.BrightScript);
|
|
1572
|
+
if (!type || (0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
|
|
1344
1573
|
type = new DynamicType_1.DynamicType();
|
|
1345
1574
|
}
|
|
1346
1575
|
result.push((_c = (_b = this.accessModifier) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'public', ' ', (_d = this.name) === null || _d === void 0 ? void 0 : _d.text, ' as ', type.toTypeString());
|
|
@@ -1349,7 +1578,7 @@ class ClassFieldStatement extends Statement {
|
|
|
1349
1578
|
}
|
|
1350
1579
|
walk(visitor, options) {
|
|
1351
1580
|
if (this.initialValue && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1352
|
-
visitors_1.walk(this, 'initialValue', visitor, options);
|
|
1581
|
+
(0, visitors_1.walk)(this, 'initialValue', visitor, options);
|
|
1353
1582
|
}
|
|
1354
1583
|
}
|
|
1355
1584
|
}
|
|
@@ -1385,8 +1614,8 @@ class TryCatchStatement extends Statement {
|
|
|
1385
1614
|
}
|
|
1386
1615
|
walk(visitor, options) {
|
|
1387
1616
|
if (this.tryBranch && options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1388
|
-
visitors_1.walk(this, 'tryBranch', visitor, options);
|
|
1389
|
-
visitors_1.walk(this, 'catchBranch', visitor, options);
|
|
1617
|
+
(0, visitors_1.walk)(this, 'tryBranch', visitor, options);
|
|
1618
|
+
(0, visitors_1.walk)(this, 'catchBranch', visitor, options);
|
|
1390
1619
|
}
|
|
1391
1620
|
}
|
|
1392
1621
|
}
|
|
@@ -1416,7 +1645,7 @@ class ThrowStatement extends Statement {
|
|
|
1416
1645
|
}
|
|
1417
1646
|
walk(visitor, options) {
|
|
1418
1647
|
if (this.expression && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1419
|
-
visitors_1.walk(this, 'expression', visitor, options);
|
|
1648
|
+
(0, visitors_1.walk)(this, 'expression', visitor, options);
|
|
1420
1649
|
}
|
|
1421
1650
|
}
|
|
1422
1651
|
}
|