brighterscript 1.0.0-alpha.23 → 1.0.0-alpha.25
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 +585 -218
- package/README.md +45 -139
- package/bsconfig.schema.json +41 -0
- package/dist/ActionPipeline.d.ts +10 -0
- package/dist/ActionPipeline.js +40 -0
- package/dist/ActionPipeline.js.map +1 -0
- package/dist/AstValidationSegmenter.d.ts +25 -0
- package/dist/AstValidationSegmenter.js +152 -0
- package/dist/AstValidationSegmenter.js.map +1 -0
- package/dist/BsConfig.d.ts +39 -4
- package/dist/BusyStatusTracker.d.ts +31 -0
- package/dist/BusyStatusTracker.js +83 -0
- package/dist/BusyStatusTracker.js.map +1 -0
- package/dist/Cache.js +3 -3
- package/dist/Cache.js.map +1 -1
- package/dist/CacheVerifier.d.ts +7 -0
- package/dist/CacheVerifier.js +20 -0
- package/dist/CacheVerifier.js.map +1 -0
- package/dist/CodeActionUtil.d.ts +3 -3
- package/dist/CodeActionUtil.js.map +1 -1
- package/dist/CommentFlagProcessor.d.ts +3 -2
- package/dist/CommentFlagProcessor.js +5 -4
- package/dist/CommentFlagProcessor.js.map +1 -1
- package/dist/DependencyGraph.d.ts +3 -2
- package/dist/DependencyGraph.js +11 -10
- package/dist/DependencyGraph.js.map +1 -1
- package/dist/DiagnosticCollection.js +9 -5
- package/dist/DiagnosticCollection.js.map +1 -1
- package/dist/DiagnosticFilterer.d.ts +1 -0
- package/dist/DiagnosticFilterer.js +5 -3
- package/dist/DiagnosticFilterer.js.map +1 -1
- package/dist/DiagnosticMessages.d.ts +79 -15
- package/dist/DiagnosticMessages.js +134 -21
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
- package/dist/DiagnosticSeverityAdjuster.js +41 -0
- package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
- package/dist/FunctionScope.d.ts +28 -0
- package/dist/FunctionScope.js +52 -0
- package/dist/FunctionScope.js.map +1 -0
- package/dist/KeyedThrottler.d.ts +3 -3
- package/dist/KeyedThrottler.js +3 -3
- package/dist/KeyedThrottler.js.map +1 -1
- package/dist/LanguageServer.d.ts +23 -11
- package/dist/LanguageServer.js +222 -87
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Logger.d.ts +3 -2
- package/dist/Logger.js +11 -3
- package/dist/Logger.js.map +1 -1
- package/dist/PluginInterface.d.ts +21 -3
- package/dist/PluginInterface.js +74 -6
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +162 -81
- package/dist/Program.js +903 -732
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +22 -12
- package/dist/ProgramBuilder.js +132 -104
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +95 -134
- package/dist/Scope.js +477 -551
- package/dist/Scope.js.map +1 -1
- package/dist/Stopwatch.js +1 -1
- package/dist/Stopwatch.js.map +1 -1
- package/dist/SymbolTable.d.ts +95 -29
- package/dist/SymbolTable.js +256 -102
- package/dist/SymbolTable.js.map +1 -1
- package/dist/Throttler.d.ts +12 -0
- package/dist/Throttler.js +39 -0
- package/dist/Throttler.js.map +1 -1
- package/dist/Watcher.d.ts +0 -3
- package/dist/Watcher.js +0 -3
- package/dist/Watcher.js.map +1 -1
- package/dist/XmlScope.d.ts +4 -6
- package/dist/XmlScope.js +74 -68
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/CachedLookups.d.ts +48 -0
- package/dist/astUtils/CachedLookups.js +323 -0
- package/dist/astUtils/CachedLookups.js.map +1 -0
- package/dist/astUtils/{AstEditor.d.ts → Editor.d.ts} +9 -5
- package/dist/astUtils/{AstEditor.js → Editor.js} +10 -4
- package/dist/astUtils/Editor.js.map +1 -0
- package/dist/astUtils/{AstEditor.spec.js → Editor.spec.js} +68 -64
- package/dist/astUtils/Editor.spec.js.map +1 -0
- package/dist/astUtils/creators.d.ts +10 -10
- package/dist/astUtils/creators.js +26 -16
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/creators.spec.js +5 -5
- package/dist/astUtils/creators.spec.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +132 -100
- package/dist/astUtils/reflection.js +225 -166
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +208 -126
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/stackedVisitor.spec.js +12 -12
- package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +54 -35
- package/dist/astUtils/visitors.js +29 -3
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +178 -33
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -9
- package/dist/astUtils/xml.js +9 -9
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +12 -2
- package/dist/bscPlugin/BscPlugin.js +41 -3
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
- package/dist/bscPlugin/CallExpressionInfo.js +131 -0
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
- package/dist/bscPlugin/FileWriter.d.ts +6 -0
- package/dist/bscPlugin/FileWriter.js +24 -0
- package/dist/bscPlugin/FileWriter.js.map +1 -0
- package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
- package/dist/bscPlugin/SignatureHelpUtil.js +135 -0
- package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +21 -12
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +86 -12
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +57 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js +544 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1909 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
- package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +17 -0
- package/dist/bscPlugin/hover/HoverProcessor.js +188 -0
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +513 -0
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +3 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +102 -29
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +167 -6
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
- package/dist/bscPlugin/serialize/BslibInjector.spec.js +19 -0
- package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
- package/dist/bscPlugin/serialize/BslibManager.d.ts +9 -0
- package/dist/bscPlugin/serialize/BslibManager.js +40 -0
- package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
- package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
- package/dist/bscPlugin/serialize/FileSerializer.js +72 -0
- package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +16 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +123 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +41 -0
- package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +22 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +316 -29
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +264 -0
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +10 -0
- package/dist/bscPlugin/validation/ProgramValidator.js +32 -0
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +56 -8
- package/dist/bscPlugin/validation/ScopeValidator.js +514 -116
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +2454 -0
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
- package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
- package/dist/cli.js +107 -8
- package/dist/cli.js.map +1 -1
- package/dist/deferred.d.ts +3 -3
- package/dist/deferred.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +8 -2
- package/dist/diagnosticUtils.js +47 -17
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/examples/plugins/removePrint.js +8 -10
- package/dist/examples/plugins/removePrint.js.map +1 -1
- package/dist/files/AssetFile.d.ts +26 -0
- package/dist/files/AssetFile.js +26 -0
- package/dist/files/AssetFile.js.map +1 -0
- package/dist/files/BrsFile.Class.spec.js +529 -486
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +124 -112
- package/dist/files/BrsFile.js +819 -1131
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +1869 -1277
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/BscFile.d.ts +104 -0
- package/dist/files/BscFile.js +16 -0
- package/dist/files/BscFile.js.map +1 -0
- package/dist/files/Factory.d.ts +25 -0
- package/dist/files/Factory.js +22 -0
- package/dist/files/Factory.js.map +1 -0
- package/dist/files/LazyFileData.d.ts +20 -0
- package/dist/files/LazyFileData.js +54 -0
- package/dist/files/LazyFileData.js.map +1 -0
- package/dist/files/LazyFileData.spec.d.ts +1 -0
- package/dist/files/LazyFileData.spec.js +27 -0
- package/dist/files/LazyFileData.spec.js.map +1 -0
- package/dist/files/XmlFile.d.ts +70 -32
- package/dist/files/XmlFile.js +106 -117
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +325 -262
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +49 -41
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/files/tests/optionalChaning.spec.js +104 -40
- package/dist/files/tests/optionalChaning.spec.js.map +1 -1
- package/dist/globalCallables.js +16 -18
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +13 -2
- package/dist/index.js +15 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +440 -150
- package/dist/interfaces.js +27 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Character.spec.js +5 -5
- package/dist/lexer/Character.spec.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +12 -5
- package/dist/lexer/Lexer.js +28 -13
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +187 -134
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +9 -1
- package/dist/lexer/Token.js +9 -1
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +9 -0
- package/dist/lexer/TokenKind.js +30 -5
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +162 -0
- package/dist/parser/AstNode.js +225 -0
- package/dist/parser/AstNode.js.map +1 -0
- package/dist/parser/AstNode.spec.d.ts +1 -0
- package/dist/parser/AstNode.spec.js +165 -0
- package/dist/parser/AstNode.spec.js.map +1 -0
- package/dist/parser/BrsTranspileState.d.ts +4 -7
- package/dist/parser/BrsTranspileState.js +4 -12
- package/dist/parser/BrsTranspileState.js.map +1 -1
- package/dist/parser/Expression.d.ts +126 -167
- package/dist/parser/Expression.js +524 -394
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +152 -146
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +45 -196
- package/dist/parser/Parser.js +470 -926
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +3 -1
- package/dist/parser/Parser.spec.js +1034 -805
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +9 -8
- package/dist/parser/SGParser.js +10 -8
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +27 -38
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +98 -35
- package/dist/parser/SGTypes.js +169 -99
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +208 -122
- package/dist/parser/Statement.js +599 -364
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/Statement.spec.js +45 -21
- package/dist/parser/Statement.spec.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +7 -12
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/Parser.spec.js +3 -2
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +33 -23
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +25 -20
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/If.spec.js +96 -94
- package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +22 -16
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Additive.spec.js +8 -8
- package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
- package/dist/parser/tests/expression/ArrayLiterals.spec.js +58 -21
- package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +61 -20
- package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
- package/dist/parser/tests/expression/Boolean.spec.js +8 -8
- package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +129 -21
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/Exponential.spec.js +5 -5
- package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
- package/dist/parser/tests/expression/Function.spec.js +36 -36
- package/dist/parser/tests/expression/Function.spec.js.map +1 -1
- package/dist/parser/tests/expression/Indexing.spec.js +67 -22
- package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
- package/dist/parser/tests/expression/Multiplicative.spec.js +9 -9
- package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +123 -81
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/PrefixUnary.spec.js +12 -12
- package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
- package/dist/parser/tests/expression/Primary.spec.js +12 -12
- package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +10 -10
- package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/Relational.spec.js +13 -13
- package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +24 -24
- package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js +221 -81
- package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
- package/dist/parser/tests/expression/TernaryExpression.spec.js +287 -105
- package/dist/parser/tests/expression/TernaryExpression.spec.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/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
- package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
- package/dist/parser/tests/statement/AssignmentOperators.spec.js +15 -15
- package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
- package/dist/parser/tests/statement/ConstStatement.spec.js +262 -0
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
- package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
- package/dist/parser/tests/statement/Continue.spec.js +119 -0
- package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
- package/dist/parser/tests/statement/Declaration.spec.js +19 -19
- package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
- package/dist/parser/tests/statement/Dim.spec.js +22 -22
- package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +111 -300
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/For.spec.js +9 -10
- package/dist/parser/tests/statement/For.spec.js.map +1 -1
- package/dist/parser/tests/statement/ForEach.spec.js +8 -9
- package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/statement/Function.spec.js +44 -35
- package/dist/parser/tests/statement/Function.spec.js.map +1 -1
- package/dist/parser/tests/statement/Goto.spec.js +5 -5
- package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
- package/dist/parser/tests/statement/Increment.spec.js +20 -20
- package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +30 -196
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/LibraryStatement.spec.js +11 -11
- package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Misc.spec.js +16 -78
- package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +107 -90
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +14 -12
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +48 -35
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/parser/tests/statement/Stop.spec.js +6 -6
- package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
- package/dist/parser/tests/statement/Throw.spec.js +6 -6
- package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
- package/dist/parser/tests/statement/TryCatch.spec.js +18 -16
- package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
- package/dist/preprocessor/Manifest.d.ts +1 -1
- package/dist/preprocessor/Manifest.js +3 -3
- package/dist/preprocessor/Manifest.js.map +1 -1
- package/dist/preprocessor/Manifest.spec.js +8 -8
- package/dist/preprocessor/Manifest.spec.js.map +1 -1
- package/dist/preprocessor/Preprocessor.d.ts +5 -6
- package/dist/preprocessor/Preprocessor.js +15 -11
- package/dist/preprocessor/Preprocessor.js.map +1 -1
- package/dist/preprocessor/Preprocessor.spec.js +25 -25
- package/dist/preprocessor/Preprocessor.spec.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.d.ts +1 -1
- package/dist/preprocessor/PreprocessorParser.js +7 -1
- package/dist/preprocessor/PreprocessorParser.js.map +1 -1
- package/dist/preprocessor/PreprocessorParser.spec.js +13 -13
- package/dist/preprocessor/PreprocessorParser.spec.js.map +1 -1
- package/dist/roku-types/data.json +6544 -10519
- package/dist/roku-types/index.d.ts +662 -1934
- package/dist/types/ArrayType.d.ts +10 -9
- package/dist/types/ArrayType.js +65 -60
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +36 -68
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +11 -0
- package/dist/types/AssociativeArrayType.js +52 -0
- package/dist/types/AssociativeArrayType.js.map +1 -0
- package/dist/types/BaseFunctionType.d.ts +9 -0
- package/dist/types/BaseFunctionType.js +25 -0
- package/dist/types/BaseFunctionType.js.map +1 -0
- package/dist/types/BooleanType.d.ts +8 -5
- package/dist/types/BooleanType.js +14 -7
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +10 -6
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +32 -21
- package/dist/types/BscType.js +118 -21
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +25 -0
- package/dist/types/BscTypeKind.js +30 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.d.ts +23 -0
- package/dist/types/BuiltInInterfaceAdder.js +164 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js +116 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
- package/dist/types/ClassType.d.ts +17 -0
- package/dist/types/ClassType.js +58 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ClassType.spec.d.ts +1 -0
- package/dist/types/ClassType.spec.js +77 -0
- package/dist/types/ClassType.spec.js.map +1 -0
- package/dist/types/ComponentType.d.ts +26 -0
- package/dist/types/ComponentType.js +83 -0
- package/dist/types/ComponentType.js.map +1 -0
- package/dist/types/DoubleType.d.ts +8 -5
- package/dist/types/DoubleType.js +18 -16
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +12 -6
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.d.ts +10 -5
- package/dist/types/DynamicType.js +16 -4
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +16 -5
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/EnumType.d.ts +30 -12
- package/dist/types/EnumType.js +43 -17
- package/dist/types/EnumType.js.map +1 -1
- 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 +8 -5
- package/dist/types/FloatType.js +18 -16
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +4 -6
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +13 -8
- package/dist/types/FunctionType.js +30 -14
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/InheritableType.d.ts +28 -0
- package/dist/types/InheritableType.js +152 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +8 -5
- package/dist/types/IntegerType.js +18 -16
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +8 -6
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +12 -13
- package/dist/types/InterfaceType.js +20 -48
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +90 -56
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/InvalidType.d.ts +7 -5
- package/dist/types/InvalidType.js +13 -7
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +8 -6
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +8 -5
- package/dist/types/LongIntegerType.js +17 -15
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +10 -6
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +12 -0
- package/dist/types/NamespaceType.js +28 -0
- package/dist/types/NamespaceType.js.map +1 -0
- package/dist/types/ObjectType.d.ts +9 -8
- package/dist/types/ObjectType.js +21 -11
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +3 -3
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +63 -0
- package/dist/types/ReferenceType.js +423 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/ReferenceType.spec.d.ts +1 -0
- package/dist/types/ReferenceType.spec.js +137 -0
- package/dist/types/ReferenceType.spec.js.map +1 -0
- package/dist/types/StringType.d.ts +11 -5
- package/dist/types/StringType.js +18 -7
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +3 -5
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/TypedFunctionType.d.ts +22 -17
- package/dist/types/TypedFunctionType.js +78 -60
- package/dist/types/TypedFunctionType.js.map +1 -1
- package/dist/types/TypedFunctionType.spec.js +105 -20
- package/dist/types/TypedFunctionType.spec.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +8 -6
- package/dist/types/UninitializedType.js +13 -7
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +20 -0
- package/dist/types/UnionType.js +123 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/UnionType.spec.d.ts +1 -0
- package/dist/types/UnionType.spec.js +130 -0
- package/dist/types/UnionType.spec.js.map +1 -0
- package/dist/types/VoidType.d.ts +8 -5
- package/dist/types/VoidType.js +14 -7
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +3 -3
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helper.spec.d.ts +1 -0
- package/dist/types/helper.spec.js +145 -0
- package/dist/types/helper.spec.js.map +1 -0
- package/dist/types/helpers.d.ts +19 -37
- package/dist/types/helpers.js +159 -99
- package/dist/types/helpers.js.map +1 -1
- 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 +167 -131
- package/dist/util.js +890 -350
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +7 -25
- package/dist/validators/ClassValidator.js +103 -194
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +165 -149
- package/dist/astUtils/AstEditor.js.map +0 -1
- package/dist/astUtils/AstEditor.spec.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.d.ts +0 -8
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +0 -40
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +0 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +0 -32
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +0 -1
- package/dist/parser/SGTypes.spec.js +0 -351
- package/dist/parser/SGTypes.spec.js.map +0 -1
- package/dist/types/CustomType.d.ts +0 -12
- package/dist/types/CustomType.js +0 -44
- package/dist/types/CustomType.js.map +0 -1
- package/dist/types/LazyType.d.ts +0 -16
- package/dist/types/LazyType.js +0 -44
- package/dist/types/LazyType.js.map +0 -1
- /package/dist/astUtils/{AstEditor.spec.d.ts → Editor.spec.d.ts} +0 -0
- /package/dist/bscPlugin/{transpile/BrsFilePreTranspileProcessor.spec.d.ts → completions/CompletionsProcessor.spec.d.ts} +0 -0
- /package/dist/{parser/SGTypes.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
package/dist/parser/Statement.js
CHANGED
|
@@ -1,32 +1,26 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
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 =
|
|
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 interfaces_1 = require("../interfaces");
|
|
11
|
+
const SymbolTable_1 = require("../SymbolTable");
|
|
10
12
|
const creators_1 = require("../astUtils/creators");
|
|
11
13
|
const DynamicType_1 = require("../types/DynamicType");
|
|
12
|
-
const
|
|
13
|
-
const
|
|
14
|
-
const
|
|
14
|
+
const SymbolTable_2 = require("../SymbolTable");
|
|
15
|
+
const AstNode_1 = require("./AstNode");
|
|
16
|
+
const AstNode_2 = require("./AstNode");
|
|
17
|
+
const ClassType_1 = require("../types/ClassType");
|
|
15
18
|
const EnumType_1 = require("../types/EnumType");
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class Statement {
|
|
21
|
-
constructor() {
|
|
22
|
-
/**
|
|
23
|
-
* When being considered by the walk visitor, this describes what type of element the current class is.
|
|
24
|
-
*/
|
|
25
|
-
this.visitMode = visitors_1.InternalWalkMode.visitStatements;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
exports.Statement = Statement;
|
|
29
|
-
class EmptyStatement extends Statement {
|
|
19
|
+
const NamespaceType_1 = require("../types/NamespaceType");
|
|
20
|
+
const InterfaceType_1 = require("../types/InterfaceType");
|
|
21
|
+
const VoidType_1 = require("../types/VoidType");
|
|
22
|
+
const TypedFunctionType_1 = require("../types/TypedFunctionType");
|
|
23
|
+
class EmptyStatement extends AstNode_2.Statement {
|
|
30
24
|
constructor(
|
|
31
25
|
/**
|
|
32
26
|
* Create a negative range to indicate this is an interpolated location
|
|
@@ -34,6 +28,7 @@ class EmptyStatement extends Statement {
|
|
|
34
28
|
range = creators_1.interpolatedRange) {
|
|
35
29
|
super();
|
|
36
30
|
this.range = range;
|
|
31
|
+
this.kind = AstNode_1.AstNodeKind.EmptyStatement;
|
|
37
32
|
}
|
|
38
33
|
transpile(state) {
|
|
39
34
|
return [];
|
|
@@ -46,12 +41,17 @@ exports.EmptyStatement = EmptyStatement;
|
|
|
46
41
|
/**
|
|
47
42
|
* This is a top-level statement. Consider this the root of the AST
|
|
48
43
|
*/
|
|
49
|
-
class Body extends Statement {
|
|
44
|
+
class Body extends AstNode_2.Statement {
|
|
50
45
|
constructor(statements = []) {
|
|
51
|
-
var _a;
|
|
52
46
|
super();
|
|
53
47
|
this.statements = statements;
|
|
54
|
-
this.
|
|
48
|
+
this.kind = AstNode_1.AstNodeKind.Body;
|
|
49
|
+
this.symbolTable = new SymbolTable_2.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
50
|
+
}
|
|
51
|
+
get range() {
|
|
52
|
+
var _a;
|
|
53
|
+
//this needs to be a getter because the body has its statements pushed to it after being constructed
|
|
54
|
+
return util_1.util.createBoundingRange(...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
|
|
55
55
|
}
|
|
56
56
|
transpile(state) {
|
|
57
57
|
let result = [];
|
|
@@ -99,15 +99,16 @@ class Body extends Statement {
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
exports.Body = Body;
|
|
102
|
-
class AssignmentStatement extends Statement {
|
|
103
|
-
constructor(
|
|
104
|
-
var _a;
|
|
102
|
+
class AssignmentStatement extends AstNode_2.Statement {
|
|
103
|
+
constructor(equals, name, value, asToken, typeExpression) {
|
|
105
104
|
super();
|
|
106
|
-
this.name = name;
|
|
107
105
|
this.equals = equals;
|
|
106
|
+
this.name = name;
|
|
108
107
|
this.value = value;
|
|
109
|
-
this.
|
|
110
|
-
this.
|
|
108
|
+
this.asToken = asToken;
|
|
109
|
+
this.typeExpression = typeExpression;
|
|
110
|
+
this.kind = AstNode_1.AstNodeKind.AssignmentStatement;
|
|
111
|
+
this.range = util_1.util.createBoundingRange(name, equals, value);
|
|
111
112
|
}
|
|
112
113
|
transpile(state) {
|
|
113
114
|
var _a, _b;
|
|
@@ -127,18 +128,28 @@ class AssignmentStatement extends Statement {
|
|
|
127
128
|
}
|
|
128
129
|
walk(visitor, options) {
|
|
129
130
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
131
|
+
//TODO: Walk TypeExpression. We need to decide how to implement types on assignments
|
|
130
132
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
131
133
|
}
|
|
132
134
|
}
|
|
135
|
+
getType(options) {
|
|
136
|
+
// TODO: Do we still need this.typeExpression?
|
|
137
|
+
var _a;
|
|
138
|
+
// Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
|
|
139
|
+
// so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
|
|
140
|
+
const rhs = this.value.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }));
|
|
141
|
+
(_a = options.typeChain) === null || _a === void 0 ? void 0 : _a.push(new interfaces_1.TypeChainEntry(this.name.text, rhs, options.data, this.name.range));
|
|
142
|
+
return rhs;
|
|
143
|
+
}
|
|
133
144
|
}
|
|
134
145
|
exports.AssignmentStatement = AssignmentStatement;
|
|
135
|
-
class Block extends Statement {
|
|
146
|
+
class Block extends AstNode_2.Statement {
|
|
136
147
|
constructor(statements, startingRange) {
|
|
137
|
-
var _a;
|
|
138
148
|
super();
|
|
139
149
|
this.statements = statements;
|
|
140
150
|
this.startingRange = startingRange;
|
|
141
|
-
this.
|
|
151
|
+
this.kind = AstNode_1.AstNodeKind.Block;
|
|
152
|
+
this.range = util_1.util.createBoundingRange({ range: this.startingRange }, ...(statements !== null && statements !== void 0 ? statements : []));
|
|
142
153
|
}
|
|
143
154
|
transpile(state) {
|
|
144
155
|
state.blockDepth++;
|
|
@@ -171,12 +182,12 @@ class Block extends Statement {
|
|
|
171
182
|
}
|
|
172
183
|
}
|
|
173
184
|
exports.Block = Block;
|
|
174
|
-
class ExpressionStatement extends Statement {
|
|
185
|
+
class ExpressionStatement extends AstNode_2.Statement {
|
|
175
186
|
constructor(expression) {
|
|
176
|
-
var _a, _b;
|
|
177
187
|
super();
|
|
178
188
|
this.expression = expression;
|
|
179
|
-
this.
|
|
189
|
+
this.kind = AstNode_1.AstNodeKind.ExpressionStatement;
|
|
190
|
+
this.range = this.expression.range;
|
|
180
191
|
}
|
|
181
192
|
transpile(state) {
|
|
182
193
|
return this.expression.transpile(state);
|
|
@@ -188,13 +199,16 @@ class ExpressionStatement extends Statement {
|
|
|
188
199
|
}
|
|
189
200
|
}
|
|
190
201
|
exports.ExpressionStatement = ExpressionStatement;
|
|
191
|
-
class CommentStatement extends Statement {
|
|
202
|
+
class CommentStatement extends AstNode_2.Statement {
|
|
192
203
|
constructor(comments) {
|
|
193
204
|
var _a;
|
|
194
205
|
super();
|
|
195
206
|
this.comments = comments;
|
|
196
|
-
this.
|
|
207
|
+
this.kind = AstNode_1.AstNodeKind.CommentStatement;
|
|
197
208
|
this.visitMode = visitors_1.InternalWalkMode.visitStatements | visitors_1.InternalWalkMode.visitExpressions;
|
|
209
|
+
if (((_a = this.comments) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
210
|
+
this.range = util_1.util.createBoundingRange(...this.comments);
|
|
211
|
+
}
|
|
198
212
|
}
|
|
199
213
|
get text() {
|
|
200
214
|
return this.comments.map(x => x.text).join('\n');
|
|
@@ -222,12 +236,12 @@ class CommentStatement extends Statement {
|
|
|
222
236
|
}
|
|
223
237
|
}
|
|
224
238
|
exports.CommentStatement = CommentStatement;
|
|
225
|
-
class ExitForStatement extends Statement {
|
|
239
|
+
class ExitForStatement extends AstNode_2.Statement {
|
|
226
240
|
constructor(tokens) {
|
|
227
|
-
var _a, _b, _c;
|
|
228
241
|
super();
|
|
229
242
|
this.tokens = tokens;
|
|
230
|
-
this.
|
|
243
|
+
this.kind = AstNode_1.AstNodeKind.ExitForStatement;
|
|
244
|
+
this.range = this.tokens.exitFor.range;
|
|
231
245
|
}
|
|
232
246
|
transpile(state) {
|
|
233
247
|
return [
|
|
@@ -239,12 +253,12 @@ class ExitForStatement extends Statement {
|
|
|
239
253
|
}
|
|
240
254
|
}
|
|
241
255
|
exports.ExitForStatement = ExitForStatement;
|
|
242
|
-
class ExitWhileStatement extends Statement {
|
|
256
|
+
class ExitWhileStatement extends AstNode_2.Statement {
|
|
243
257
|
constructor(tokens) {
|
|
244
|
-
var _a, _b, _c;
|
|
245
258
|
super();
|
|
246
259
|
this.tokens = tokens;
|
|
247
|
-
this.
|
|
260
|
+
this.kind = AstNode_1.AstNodeKind.ExitWhileStatement;
|
|
261
|
+
this.range = this.tokens.exitWhile.range;
|
|
248
262
|
}
|
|
249
263
|
transpile(state) {
|
|
250
264
|
return [
|
|
@@ -256,36 +270,32 @@ class ExitWhileStatement extends Statement {
|
|
|
256
270
|
}
|
|
257
271
|
}
|
|
258
272
|
exports.ExitWhileStatement = ExitWhileStatement;
|
|
259
|
-
class FunctionStatement extends Statement {
|
|
260
|
-
constructor(name, func
|
|
273
|
+
class FunctionStatement extends AstNode_2.Statement {
|
|
274
|
+
constructor(name, func) {
|
|
261
275
|
super();
|
|
262
276
|
this.name = name;
|
|
263
277
|
this.func = func;
|
|
264
|
-
this.
|
|
265
|
-
|
|
266
|
-
get range() {
|
|
267
|
-
return this.cacheRange();
|
|
268
|
-
}
|
|
269
|
-
cacheRange() {
|
|
270
|
-
var _a, _b;
|
|
271
|
-
if (!this._range) {
|
|
272
|
-
this._range = (_b = (_a = this.func) === null || _a === void 0 ? void 0 : _a.range) !== null && _b !== void 0 ? _b : this.name.range;
|
|
273
|
-
}
|
|
274
|
-
return this._range;
|
|
278
|
+
this.kind = AstNode_1.AstNodeKind.FunctionStatement;
|
|
279
|
+
this.range = this.func.range;
|
|
275
280
|
}
|
|
276
281
|
/**
|
|
277
282
|
* Get the name of this expression based on the parse mode
|
|
278
283
|
*/
|
|
279
284
|
getName(parseMode) {
|
|
280
|
-
|
|
285
|
+
var _a;
|
|
286
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
287
|
+
if (namespace) {
|
|
281
288
|
let delimiter = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
282
|
-
let namespaceName =
|
|
283
|
-
return namespaceName + delimiter + this.name.text;
|
|
289
|
+
let namespaceName = namespace.getName(parseMode);
|
|
290
|
+
return namespaceName + delimiter + ((_a = this.name) === null || _a === void 0 ? void 0 : _a.text);
|
|
284
291
|
}
|
|
285
292
|
else {
|
|
286
293
|
return this.name.text;
|
|
287
294
|
}
|
|
288
295
|
}
|
|
296
|
+
getLeadingTrivia() {
|
|
297
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
|
|
298
|
+
}
|
|
289
299
|
transpile(state) {
|
|
290
300
|
//create a fake token using the full transpiled name
|
|
291
301
|
let nameToken = Object.assign(Object.assign({}, this.name), { text: this.getName(Parser_1.ParseMode.BrightScript) });
|
|
@@ -297,7 +307,7 @@ class FunctionStatement extends Statement {
|
|
|
297
307
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
298
308
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
299
309
|
}
|
|
300
|
-
result.push(...this.func.getTypedef(state
|
|
310
|
+
result.push(...this.func.getTypedef(state));
|
|
301
311
|
return result;
|
|
302
312
|
}
|
|
303
313
|
walk(visitor, options) {
|
|
@@ -305,18 +315,24 @@ class FunctionStatement extends Statement {
|
|
|
305
315
|
(0, visitors_1.walk)(this, 'func', visitor, options);
|
|
306
316
|
}
|
|
307
317
|
}
|
|
318
|
+
getType(options) {
|
|
319
|
+
var _a;
|
|
320
|
+
const funcExprType = this.func.getType(options);
|
|
321
|
+
funcExprType.setName((_a = this.name) === null || _a === void 0 ? void 0 : _a.text);
|
|
322
|
+
return funcExprType;
|
|
323
|
+
}
|
|
308
324
|
}
|
|
309
325
|
exports.FunctionStatement = FunctionStatement;
|
|
310
|
-
class IfStatement extends Statement {
|
|
326
|
+
class IfStatement extends AstNode_2.Statement {
|
|
311
327
|
constructor(tokens, condition, thenBranch, elseBranch, isInline) {
|
|
312
|
-
var _a;
|
|
313
328
|
super();
|
|
314
329
|
this.tokens = tokens;
|
|
315
330
|
this.condition = condition;
|
|
316
331
|
this.thenBranch = thenBranch;
|
|
317
332
|
this.elseBranch = elseBranch;
|
|
318
333
|
this.isInline = isInline;
|
|
319
|
-
this.
|
|
334
|
+
this.kind = AstNode_1.AstNodeKind.IfStatement;
|
|
335
|
+
this.range = util_1.util.createBoundingRange(tokens.if, condition, tokens.then, thenBranch, tokens.else, elseBranch, tokens.endIf);
|
|
320
336
|
}
|
|
321
337
|
transpile(state) {
|
|
322
338
|
let results = [];
|
|
@@ -362,7 +378,7 @@ class IfStatement extends Statement {
|
|
|
362
378
|
}
|
|
363
379
|
else {
|
|
364
380
|
//else body
|
|
365
|
-
state.lineage.unshift(this.
|
|
381
|
+
state.lineage.unshift(this.tokens.else);
|
|
366
382
|
let body = this.elseBranch.transpile(state);
|
|
367
383
|
state.lineage.shift();
|
|
368
384
|
if (body.length > 0) {
|
|
@@ -394,13 +410,13 @@ class IfStatement extends Statement {
|
|
|
394
410
|
}
|
|
395
411
|
}
|
|
396
412
|
exports.IfStatement = IfStatement;
|
|
397
|
-
class IncrementStatement extends Statement {
|
|
413
|
+
class IncrementStatement extends AstNode_2.Statement {
|
|
398
414
|
constructor(value, operator) {
|
|
399
|
-
var _a;
|
|
400
415
|
super();
|
|
401
416
|
this.value = value;
|
|
402
417
|
this.operator = operator;
|
|
403
|
-
this.
|
|
418
|
+
this.kind = AstNode_1.AstNodeKind.IncrementStatement;
|
|
419
|
+
this.range = util_1.util.createBoundingRange(value, operator);
|
|
404
420
|
}
|
|
405
421
|
transpile(state) {
|
|
406
422
|
return [
|
|
@@ -418,18 +434,19 @@ exports.IncrementStatement = IncrementStatement;
|
|
|
418
434
|
/**
|
|
419
435
|
* Represents a `print` statement within BrightScript.
|
|
420
436
|
*/
|
|
421
|
-
class PrintStatement extends Statement {
|
|
437
|
+
class PrintStatement extends AstNode_2.Statement {
|
|
422
438
|
/**
|
|
423
439
|
* Creates a new internal representation of a BrightScript `print` statement.
|
|
424
|
-
* @param
|
|
425
|
-
*
|
|
440
|
+
* @param tokens the tokens for this statement
|
|
441
|
+
* @param tokens.print a print token
|
|
442
|
+
* @param expressions an array of expressions or `PrintSeparator`s to be evaluated and printed.
|
|
426
443
|
*/
|
|
427
444
|
constructor(tokens, expressions) {
|
|
428
|
-
var _a;
|
|
429
445
|
super();
|
|
430
446
|
this.tokens = tokens;
|
|
431
447
|
this.expressions = expressions;
|
|
432
|
-
this.
|
|
448
|
+
this.kind = AstNode_1.AstNodeKind.PrintStatement;
|
|
449
|
+
this.range = util_1.util.createBoundingRange(tokens.print, ...(expressions !== null && expressions !== void 0 ? expressions : []));
|
|
433
450
|
}
|
|
434
451
|
transpile(state) {
|
|
435
452
|
var _a;
|
|
@@ -460,16 +477,16 @@ class PrintStatement extends Statement {
|
|
|
460
477
|
}
|
|
461
478
|
}
|
|
462
479
|
exports.PrintStatement = PrintStatement;
|
|
463
|
-
class DimStatement extends Statement {
|
|
480
|
+
class DimStatement extends AstNode_2.Statement {
|
|
464
481
|
constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
|
|
465
|
-
var _a;
|
|
466
482
|
super();
|
|
467
483
|
this.dimToken = dimToken;
|
|
468
484
|
this.identifier = identifier;
|
|
469
485
|
this.openingSquare = openingSquare;
|
|
470
486
|
this.dimensions = dimensions;
|
|
471
487
|
this.closingSquare = closingSquare;
|
|
472
|
-
this.
|
|
488
|
+
this.kind = AstNode_1.AstNodeKind.DimStatement;
|
|
489
|
+
this.range = util_1.util.createBoundingRange(dimToken, identifier, openingSquare, ...(dimensions !== null && dimensions !== void 0 ? dimensions : []), closingSquare);
|
|
473
490
|
}
|
|
474
491
|
transpile(state) {
|
|
475
492
|
let result = [
|
|
@@ -495,12 +512,12 @@ class DimStatement extends Statement {
|
|
|
495
512
|
}
|
|
496
513
|
}
|
|
497
514
|
exports.DimStatement = DimStatement;
|
|
498
|
-
class GotoStatement extends Statement {
|
|
515
|
+
class GotoStatement extends AstNode_2.Statement {
|
|
499
516
|
constructor(tokens) {
|
|
500
|
-
var _a;
|
|
501
517
|
super();
|
|
502
518
|
this.tokens = tokens;
|
|
503
|
-
this.
|
|
519
|
+
this.kind = AstNode_1.AstNodeKind.GotoStatement;
|
|
520
|
+
this.range = util_1.util.createBoundingRange(tokens.goto, tokens.label);
|
|
504
521
|
}
|
|
505
522
|
transpile(state) {
|
|
506
523
|
return [
|
|
@@ -514,12 +531,15 @@ class GotoStatement extends Statement {
|
|
|
514
531
|
}
|
|
515
532
|
}
|
|
516
533
|
exports.GotoStatement = GotoStatement;
|
|
517
|
-
class LabelStatement extends Statement {
|
|
534
|
+
class LabelStatement extends AstNode_2.Statement {
|
|
518
535
|
constructor(tokens) {
|
|
519
|
-
var _a;
|
|
520
536
|
super();
|
|
521
537
|
this.tokens = tokens;
|
|
522
|
-
this.
|
|
538
|
+
this.kind = AstNode_1.AstNodeKind.LabelStatement;
|
|
539
|
+
this.range = util_1.util.createBoundingRange(tokens.identifier, tokens.colon);
|
|
540
|
+
}
|
|
541
|
+
getLeadingTrivia() {
|
|
542
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.identifier.leadingTrivia);
|
|
523
543
|
}
|
|
524
544
|
transpile(state) {
|
|
525
545
|
return [
|
|
@@ -532,13 +552,13 @@ class LabelStatement extends Statement {
|
|
|
532
552
|
}
|
|
533
553
|
}
|
|
534
554
|
exports.LabelStatement = LabelStatement;
|
|
535
|
-
class ReturnStatement extends Statement {
|
|
555
|
+
class ReturnStatement extends AstNode_2.Statement {
|
|
536
556
|
constructor(tokens, value) {
|
|
537
|
-
var _a;
|
|
538
557
|
super();
|
|
539
558
|
this.tokens = tokens;
|
|
540
559
|
this.value = value;
|
|
541
|
-
this.
|
|
560
|
+
this.kind = AstNode_1.AstNodeKind.ReturnStatement;
|
|
561
|
+
this.range = util_1.util.createBoundingRange(tokens.return, value);
|
|
542
562
|
}
|
|
543
563
|
transpile(state) {
|
|
544
564
|
let result = [];
|
|
@@ -556,12 +576,12 @@ class ReturnStatement extends Statement {
|
|
|
556
576
|
}
|
|
557
577
|
}
|
|
558
578
|
exports.ReturnStatement = ReturnStatement;
|
|
559
|
-
class EndStatement extends Statement {
|
|
579
|
+
class EndStatement extends AstNode_2.Statement {
|
|
560
580
|
constructor(tokens) {
|
|
561
|
-
var _a, _b;
|
|
562
581
|
super();
|
|
563
582
|
this.tokens = tokens;
|
|
564
|
-
this.
|
|
583
|
+
this.kind = AstNode_1.AstNodeKind.EndStatement;
|
|
584
|
+
this.range = tokens.end.range;
|
|
565
585
|
}
|
|
566
586
|
transpile(state) {
|
|
567
587
|
return [
|
|
@@ -573,12 +593,13 @@ class EndStatement extends Statement {
|
|
|
573
593
|
}
|
|
574
594
|
}
|
|
575
595
|
exports.EndStatement = EndStatement;
|
|
576
|
-
class StopStatement extends Statement {
|
|
596
|
+
class StopStatement extends AstNode_2.Statement {
|
|
577
597
|
constructor(tokens) {
|
|
578
|
-
var _a
|
|
598
|
+
var _a;
|
|
579
599
|
super();
|
|
580
600
|
this.tokens = tokens;
|
|
581
|
-
this.
|
|
601
|
+
this.kind = AstNode_1.AstNodeKind.StopStatement;
|
|
602
|
+
this.range = (_a = tokens === null || tokens === void 0 ? void 0 : tokens.stop) === null || _a === void 0 ? void 0 : _a.range;
|
|
582
603
|
}
|
|
583
604
|
transpile(state) {
|
|
584
605
|
return [
|
|
@@ -590,9 +611,8 @@ class StopStatement extends Statement {
|
|
|
590
611
|
}
|
|
591
612
|
}
|
|
592
613
|
exports.StopStatement = StopStatement;
|
|
593
|
-
class ForStatement extends Statement {
|
|
614
|
+
class ForStatement extends AstNode_2.Statement {
|
|
594
615
|
constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
|
|
595
|
-
var _a;
|
|
596
616
|
super();
|
|
597
617
|
this.forToken = forToken;
|
|
598
618
|
this.counterDeclaration = counterDeclaration;
|
|
@@ -602,7 +622,8 @@ class ForStatement extends Statement {
|
|
|
602
622
|
this.endForToken = endForToken;
|
|
603
623
|
this.stepToken = stepToken;
|
|
604
624
|
this.increment = increment;
|
|
605
|
-
this.
|
|
625
|
+
this.kind = AstNode_1.AstNodeKind.ForStatement;
|
|
626
|
+
this.range = util_1.util.createBoundingRange(forToken, counterDeclaration, toToken, finalValue, stepToken, increment, body, endForToken);
|
|
606
627
|
}
|
|
607
628
|
transpile(state) {
|
|
608
629
|
let result = [];
|
|
@@ -642,26 +663,24 @@ class ForStatement extends Statement {
|
|
|
642
663
|
}
|
|
643
664
|
}
|
|
644
665
|
exports.ForStatement = ForStatement;
|
|
645
|
-
class ForEachStatement extends Statement {
|
|
646
|
-
constructor(
|
|
647
|
-
var _a;
|
|
666
|
+
class ForEachStatement extends AstNode_2.Statement {
|
|
667
|
+
constructor(tokens, item, target, body) {
|
|
648
668
|
super();
|
|
649
|
-
this.
|
|
669
|
+
this.tokens = tokens;
|
|
650
670
|
this.item = item;
|
|
651
|
-
this.inToken = inToken;
|
|
652
671
|
this.target = target;
|
|
653
672
|
this.body = body;
|
|
654
|
-
this.
|
|
655
|
-
this.range =
|
|
673
|
+
this.kind = AstNode_1.AstNodeKind.ForEachStatement;
|
|
674
|
+
this.range = util_1.util.createBoundingRange(tokens.forEach, item, tokens.in, target, body, tokens.endFor);
|
|
656
675
|
}
|
|
657
676
|
transpile(state) {
|
|
658
677
|
let result = [];
|
|
659
678
|
//for each
|
|
660
|
-
result.push(state.transpileToken(this.
|
|
679
|
+
result.push(state.transpileToken(this.tokens.forEach), ' ');
|
|
661
680
|
//item
|
|
662
681
|
result.push(state.transpileToken(this.item), ' ');
|
|
663
682
|
//in
|
|
664
|
-
result.push(state.transpileToken(this.
|
|
683
|
+
result.push(state.transpileToken(this.tokens.in), ' ');
|
|
665
684
|
//target
|
|
666
685
|
result.push(...this.target.transpile(state));
|
|
667
686
|
//body
|
|
@@ -671,7 +690,7 @@ class ForEachStatement extends Statement {
|
|
|
671
690
|
// add new line before "end for"
|
|
672
691
|
result.push('\n');
|
|
673
692
|
//end for
|
|
674
|
-
result.push(state.indent(), state.transpileToken(this.
|
|
693
|
+
result.push(state.indent(), state.transpileToken(this.tokens.endFor));
|
|
675
694
|
return result;
|
|
676
695
|
}
|
|
677
696
|
walk(visitor, options) {
|
|
@@ -684,14 +703,14 @@ class ForEachStatement extends Statement {
|
|
|
684
703
|
}
|
|
685
704
|
}
|
|
686
705
|
exports.ForEachStatement = ForEachStatement;
|
|
687
|
-
class WhileStatement extends Statement {
|
|
706
|
+
class WhileStatement extends AstNode_2.Statement {
|
|
688
707
|
constructor(tokens, condition, body) {
|
|
689
|
-
var _a;
|
|
690
708
|
super();
|
|
691
709
|
this.tokens = tokens;
|
|
692
710
|
this.condition = condition;
|
|
693
711
|
this.body = body;
|
|
694
|
-
this.
|
|
712
|
+
this.kind = AstNode_1.AstNodeKind.WhileStatement;
|
|
713
|
+
this.range = util_1.util.createBoundingRange(tokens.while, condition, body, tokens.endWhile);
|
|
695
714
|
}
|
|
696
715
|
transpile(state) {
|
|
697
716
|
let result = [];
|
|
@@ -719,16 +738,15 @@ class WhileStatement extends Statement {
|
|
|
719
738
|
}
|
|
720
739
|
}
|
|
721
740
|
exports.WhileStatement = WhileStatement;
|
|
722
|
-
class DottedSetStatement extends Statement {
|
|
723
|
-
constructor(obj, name, value, dot
|
|
724
|
-
var _a;
|
|
741
|
+
class DottedSetStatement extends AstNode_2.Statement {
|
|
742
|
+
constructor(obj, name, value, dot) {
|
|
725
743
|
super();
|
|
726
744
|
this.obj = obj;
|
|
727
745
|
this.name = name;
|
|
728
746
|
this.value = value;
|
|
729
747
|
this.dot = dot;
|
|
730
|
-
this.
|
|
731
|
-
this.range =
|
|
748
|
+
this.kind = AstNode_1.AstNodeKind.DottedSetStatement;
|
|
749
|
+
this.range = util_1.util.createBoundingRange(obj, dot, name, value);
|
|
732
750
|
}
|
|
733
751
|
transpile(state) {
|
|
734
752
|
var _a, _b;
|
|
@@ -740,7 +758,7 @@ class DottedSetStatement extends Statement {
|
|
|
740
758
|
return [
|
|
741
759
|
//object
|
|
742
760
|
...this.obj.transpile(state),
|
|
743
|
-
'.',
|
|
761
|
+
this.dot ? state.tokenToSourceNode(this.dot) : '.',
|
|
744
762
|
//name
|
|
745
763
|
state.transpileToken(this.name),
|
|
746
764
|
' = ',
|
|
@@ -755,19 +773,25 @@ class DottedSetStatement extends Statement {
|
|
|
755
773
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
756
774
|
}
|
|
757
775
|
}
|
|
776
|
+
getType(options) {
|
|
777
|
+
var _a, _b, _c, _d, _e, _f;
|
|
778
|
+
const objType = (_a = this.obj) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
779
|
+
const result = objType === null || objType === void 0 ? void 0 : objType.getMemberType((_b = this.name) === null || _b === void 0 ? void 0 : _b.text, options);
|
|
780
|
+
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry((_d = this.name) === null || _d === void 0 ? void 0 : _d.text, result, options.data, (_f = (_e = this.name) === null || _e === void 0 ? void 0 : _e.range) !== null && _f !== void 0 ? _f : this.range));
|
|
781
|
+
return result;
|
|
782
|
+
}
|
|
758
783
|
}
|
|
759
784
|
exports.DottedSetStatement = DottedSetStatement;
|
|
760
|
-
class IndexedSetStatement extends Statement {
|
|
761
|
-
constructor(obj, index, value, openingSquare, closingSquare
|
|
762
|
-
var _a;
|
|
785
|
+
class IndexedSetStatement extends AstNode_2.Statement {
|
|
786
|
+
constructor(obj, index, value, openingSquare, closingSquare) {
|
|
763
787
|
super();
|
|
764
788
|
this.obj = obj;
|
|
765
789
|
this.index = index;
|
|
766
790
|
this.value = value;
|
|
767
791
|
this.openingSquare = openingSquare;
|
|
768
792
|
this.closingSquare = closingSquare;
|
|
769
|
-
this.
|
|
770
|
-
this.range =
|
|
793
|
+
this.kind = AstNode_1.AstNodeKind.IndexedSetStatement;
|
|
794
|
+
this.range = util_1.util.createBoundingRange(obj, openingSquare, index, closingSquare, value);
|
|
771
795
|
}
|
|
772
796
|
transpile(state) {
|
|
773
797
|
var _a, _b;
|
|
@@ -801,12 +825,12 @@ class IndexedSetStatement extends Statement {
|
|
|
801
825
|
}
|
|
802
826
|
}
|
|
803
827
|
exports.IndexedSetStatement = IndexedSetStatement;
|
|
804
|
-
class LibraryStatement extends Statement {
|
|
828
|
+
class LibraryStatement extends AstNode_2.Statement {
|
|
805
829
|
constructor(tokens) {
|
|
806
|
-
var _a;
|
|
807
830
|
super();
|
|
808
831
|
this.tokens = tokens;
|
|
809
|
-
this.
|
|
832
|
+
this.kind = AstNode_1.AstNodeKind.LibraryStatement;
|
|
833
|
+
this.range = util_1.util.createBoundingRange(this.tokens.library, this.tokens.filePath);
|
|
810
834
|
}
|
|
811
835
|
transpile(state) {
|
|
812
836
|
let result = [];
|
|
@@ -825,18 +849,16 @@ class LibraryStatement extends Statement {
|
|
|
825
849
|
}
|
|
826
850
|
}
|
|
827
851
|
exports.LibraryStatement = LibraryStatement;
|
|
828
|
-
class NamespaceStatement extends Statement {
|
|
829
|
-
constructor(keyword,
|
|
830
|
-
//this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
|
|
831
|
-
nameExpression, body, endKeyword, parentSymbolTable) {
|
|
852
|
+
class NamespaceStatement extends AstNode_2.Statement {
|
|
853
|
+
constructor(keyword, nameExpression, body, endKeyword) {
|
|
832
854
|
super();
|
|
833
855
|
this.keyword = keyword;
|
|
834
856
|
this.nameExpression = nameExpression;
|
|
835
857
|
this.body = body;
|
|
836
858
|
this.endKeyword = endKeyword;
|
|
837
|
-
this.
|
|
838
|
-
this.name = this.
|
|
839
|
-
this.symbolTable = new
|
|
859
|
+
this.kind = AstNode_1.AstNodeKind.NamespaceStatement;
|
|
860
|
+
this.name = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
861
|
+
this.symbolTable = new SymbolTable_2.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
840
862
|
}
|
|
841
863
|
get range() {
|
|
842
864
|
return this.cacheRange();
|
|
@@ -849,7 +871,24 @@ class NamespaceStatement extends Statement {
|
|
|
849
871
|
return this._range;
|
|
850
872
|
}
|
|
851
873
|
getName(parseMode) {
|
|
852
|
-
|
|
874
|
+
var _a, _b;
|
|
875
|
+
const sep = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
876
|
+
let name = util_1.util.getAllDottedGetPartsAsString(this.nameExpression, parseMode);
|
|
877
|
+
if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
|
|
878
|
+
name = this.parent.parent.getName(parseMode) + sep + name;
|
|
879
|
+
}
|
|
880
|
+
return name;
|
|
881
|
+
}
|
|
882
|
+
getLeadingTrivia() {
|
|
883
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.keyword.leadingTrivia);
|
|
884
|
+
}
|
|
885
|
+
getNameParts() {
|
|
886
|
+
var _a, _b;
|
|
887
|
+
let parts = util_1.util.getAllDottedGetParts(this.nameExpression);
|
|
888
|
+
if (((_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.parent) === null || _b === void 0 ? void 0 : _b.kind) === AstNode_1.AstNodeKind.NamespaceStatement) {
|
|
889
|
+
parts = this.parent.parent.getNameParts().concat(parts);
|
|
890
|
+
}
|
|
891
|
+
return parts;
|
|
853
892
|
}
|
|
854
893
|
transpile(state) {
|
|
855
894
|
//namespaces don't actually have any real content, so just transpile their bodies
|
|
@@ -858,7 +897,7 @@ class NamespaceStatement extends Statement {
|
|
|
858
897
|
getTypedef(state) {
|
|
859
898
|
let result = [
|
|
860
899
|
'namespace ',
|
|
861
|
-
...this.
|
|
900
|
+
...this.getName(Parser_1.ParseMode.BrighterScript),
|
|
862
901
|
state.newline
|
|
863
902
|
];
|
|
864
903
|
state.blockDepth++;
|
|
@@ -875,15 +914,19 @@ class NamespaceStatement extends Statement {
|
|
|
875
914
|
(0, visitors_1.walk)(this, 'body', visitor, options);
|
|
876
915
|
}
|
|
877
916
|
}
|
|
917
|
+
getType(options) {
|
|
918
|
+
const resultType = new NamespaceType_1.NamespaceType(this.name);
|
|
919
|
+
return resultType;
|
|
920
|
+
}
|
|
878
921
|
}
|
|
879
922
|
exports.NamespaceStatement = NamespaceStatement;
|
|
880
|
-
class ImportStatement extends Statement {
|
|
923
|
+
class ImportStatement extends AstNode_2.Statement {
|
|
881
924
|
constructor(importToken, filePathToken) {
|
|
882
|
-
var _a;
|
|
883
925
|
super();
|
|
884
926
|
this.importToken = importToken;
|
|
885
927
|
this.filePathToken = filePathToken;
|
|
886
|
-
this.
|
|
928
|
+
this.kind = AstNode_1.AstNodeKind.ImportStatement;
|
|
929
|
+
this.range = util_1.util.createBoundingRange(importToken, filePathToken);
|
|
887
930
|
if (this.filePathToken) {
|
|
888
931
|
//remove quotes
|
|
889
932
|
this.filePath = this.filePathToken.text.replace(/"/g, '');
|
|
@@ -917,88 +960,41 @@ class ImportStatement extends Statement {
|
|
|
917
960
|
}
|
|
918
961
|
}
|
|
919
962
|
exports.ImportStatement = ImportStatement;
|
|
920
|
-
class InterfaceStatement extends Statement {
|
|
921
|
-
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken
|
|
922
|
-
var _a, _b, _c;
|
|
963
|
+
class InterfaceStatement extends AstNode_2.Statement {
|
|
964
|
+
constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken) {
|
|
923
965
|
super();
|
|
924
|
-
this.name = name;
|
|
925
966
|
this.parentInterfaceName = parentInterfaceName;
|
|
926
967
|
this.body = body;
|
|
927
|
-
this.
|
|
928
|
-
this.memberTable = new SymbolTable_1.SymbolTable();
|
|
968
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceStatement;
|
|
929
969
|
this.tokens = {};
|
|
930
|
-
this.memberMap = {};
|
|
931
|
-
this.methods = [];
|
|
932
|
-
this.fields = [];
|
|
933
970
|
this.tokens.interface = interfaceToken;
|
|
934
971
|
this.tokens.name = name;
|
|
935
972
|
this.tokens.extends = extendsToken;
|
|
936
973
|
this.tokens.endInterface = endInterfaceToken;
|
|
937
|
-
this.range =
|
|
938
|
-
for (let statement of this.body) {
|
|
939
|
-
if ((0, reflection_1.isInterfaceMethodStatement)(statement)) {
|
|
940
|
-
this.methods.push(statement);
|
|
941
|
-
this.memberMap[(_b = statement === null || statement === void 0 ? void 0 : statement.name) === null || _b === void 0 ? void 0 : _b.text.toLowerCase()] = statement;
|
|
942
|
-
}
|
|
943
|
-
else if ((0, reflection_1.isInterfaceFieldStatement)(statement)) {
|
|
944
|
-
this.fields.push(statement);
|
|
945
|
-
this.memberMap[(_c = statement === null || statement === void 0 ? void 0 : statement.name) === null || _c === void 0 ? void 0 : _c.text.toLowerCase()] = statement;
|
|
946
|
-
}
|
|
947
|
-
}
|
|
974
|
+
this.range = util_1.util.createBoundingRange(this.tokens.interface, this.tokens.name, this.tokens.extends, this.parentInterfaceName, ...this.body, this.tokens.endInterface);
|
|
948
975
|
}
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
this.memberTable.clear();
|
|
952
|
-
if (parentIface) {
|
|
953
|
-
this.memberTable.setParent(parentIface === null || parentIface === void 0 ? void 0 : parentIface.memberTable);
|
|
954
|
-
}
|
|
955
|
-
for (const statement of this.methods) {
|
|
956
|
-
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getFunctionType();
|
|
957
|
-
this.memberTable.addSymbol((_a = statement === null || statement === void 0 ? void 0 : statement.name) === null || _a === void 0 ? void 0 : _a.text, statement === null || statement === void 0 ? void 0 : statement.range, funcType);
|
|
958
|
-
}
|
|
959
|
-
for (const statement of this.fields) {
|
|
960
|
-
this.memberTable.addSymbol((_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, statement.getType());
|
|
961
|
-
}
|
|
976
|
+
get fields() {
|
|
977
|
+
return this.body.filter(x => (0, reflection_1.isInterfaceFieldStatement)(x));
|
|
962
978
|
}
|
|
963
|
-
|
|
964
|
-
return
|
|
979
|
+
get methods() {
|
|
980
|
+
return this.body.filter(x => (0, reflection_1.isInterfaceMethodStatement)(x));
|
|
965
981
|
}
|
|
966
|
-
|
|
982
|
+
hasParentInterface() {
|
|
967
983
|
return !!this.parentInterfaceName;
|
|
968
984
|
}
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
* @returns array of possible parent interface names
|
|
972
|
-
*/
|
|
973
|
-
getPossibleFullParentNames() {
|
|
974
|
-
var _a;
|
|
975
|
-
if (!this.hasParent()) {
|
|
976
|
-
return [];
|
|
977
|
-
}
|
|
978
|
-
if (((_a = this.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.getNameParts().length) > 1) {
|
|
979
|
-
// The specified parent interface already has a dot, so it must already reference a namespace
|
|
980
|
-
return [this.parentInterfaceName.getName()];
|
|
981
|
-
}
|
|
982
|
-
const names = [];
|
|
983
|
-
if (this.namespaceName) {
|
|
984
|
-
// We're under a namespace, so the full parent name MIGHT be with this namespace too
|
|
985
|
-
names.push(this.namespaceName.getName() + '.' + this.parentInterfaceName.getName());
|
|
986
|
-
}
|
|
987
|
-
names.push(this.parentInterfaceName.getName());
|
|
988
|
-
return names;
|
|
989
|
-
}
|
|
990
|
-
getThisBscType() {
|
|
991
|
-
return new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), this.memberTable);
|
|
985
|
+
getLeadingTrivia() {
|
|
986
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.interface.leadingTrivia);
|
|
992
987
|
}
|
|
993
988
|
/**
|
|
994
989
|
* The name of the interface WITH its leading namespace (if applicable)
|
|
995
990
|
*/
|
|
996
|
-
|
|
991
|
+
get fullName() {
|
|
997
992
|
var _a;
|
|
998
993
|
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
999
994
|
if (name) {
|
|
1000
|
-
|
|
1001
|
-
|
|
995
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
996
|
+
if (namespace) {
|
|
997
|
+
let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
|
|
1002
998
|
return `${namespaceName}.${name}`;
|
|
1003
999
|
}
|
|
1004
1000
|
else {
|
|
@@ -1010,6 +1006,27 @@ class InterfaceStatement extends Statement {
|
|
|
1010
1006
|
return undefined;
|
|
1011
1007
|
}
|
|
1012
1008
|
}
|
|
1009
|
+
/**
|
|
1010
|
+
* The name of the interface (without the namespace prefix)
|
|
1011
|
+
*/
|
|
1012
|
+
get name() {
|
|
1013
|
+
var _a;
|
|
1014
|
+
return (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1015
|
+
}
|
|
1016
|
+
/**
|
|
1017
|
+
* Get the name of this expression based on the parse mode
|
|
1018
|
+
*/
|
|
1019
|
+
getName(parseMode) {
|
|
1020
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1021
|
+
if (namespace) {
|
|
1022
|
+
let delimiter = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
1023
|
+
let namespaceName = namespace.getName(parseMode);
|
|
1024
|
+
return namespaceName + delimiter + this.name;
|
|
1025
|
+
}
|
|
1026
|
+
else {
|
|
1027
|
+
return this.name;
|
|
1028
|
+
}
|
|
1029
|
+
}
|
|
1013
1030
|
transpile(state) {
|
|
1014
1031
|
//interfaces should completely disappear at runtime
|
|
1015
1032
|
return [];
|
|
@@ -1021,7 +1038,7 @@ class InterfaceStatement extends Statement {
|
|
|
1021
1038
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1022
1039
|
}
|
|
1023
1040
|
result.push(this.tokens.interface.text, ' ', this.tokens.name.text);
|
|
1024
|
-
const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName(
|
|
1041
|
+
const parentInterfaceName = (_b = this.parentInterfaceName) === null || _b === void 0 ? void 0 : _b.getName();
|
|
1025
1042
|
if (parentInterfaceName) {
|
|
1026
1043
|
result.push(' extends ', parentInterfaceName);
|
|
1027
1044
|
}
|
|
@@ -1044,35 +1061,59 @@ class InterfaceStatement extends Statement {
|
|
|
1044
1061
|
return result;
|
|
1045
1062
|
}
|
|
1046
1063
|
walk(visitor, options) {
|
|
1064
|
+
//visitor-less walk function to do parent linking
|
|
1065
|
+
(0, visitors_1.walk)(this, 'parentInterfaceName', null, options);
|
|
1047
1066
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1048
1067
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1049
1068
|
}
|
|
1050
1069
|
}
|
|
1070
|
+
getType(options) {
|
|
1071
|
+
var _a, _b, _c, _d;
|
|
1072
|
+
const superIface = (_a = this.parentInterfaceName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1073
|
+
const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
|
|
1074
|
+
for (const statement of this.methods) {
|
|
1075
|
+
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1076
|
+
const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1077
|
+
resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, flag);
|
|
1078
|
+
}
|
|
1079
|
+
for (const statement of this.fields) {
|
|
1080
|
+
const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
|
|
1081
|
+
const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1082
|
+
resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, flag);
|
|
1083
|
+
}
|
|
1084
|
+
(_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(this.getName(Parser_1.ParseMode.BrighterScript), resultType, options.data, this.range));
|
|
1085
|
+
return resultType;
|
|
1086
|
+
}
|
|
1051
1087
|
}
|
|
1052
1088
|
exports.InterfaceStatement = InterfaceStatement;
|
|
1053
|
-
class InterfaceFieldStatement extends Statement {
|
|
1054
|
-
constructor(nameToken, asToken,
|
|
1055
|
-
var _a;
|
|
1089
|
+
class InterfaceFieldStatement extends AstNode_2.Statement {
|
|
1090
|
+
constructor(nameToken, asToken, typeExpression, optionalToken) {
|
|
1056
1091
|
super();
|
|
1057
|
-
this.
|
|
1058
|
-
this.
|
|
1092
|
+
this.typeExpression = typeExpression;
|
|
1093
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceFieldStatement;
|
|
1059
1094
|
this.tokens = {};
|
|
1095
|
+
this.tokens.optional = optionalToken;
|
|
1060
1096
|
this.tokens.name = nameToken;
|
|
1061
1097
|
this.tokens.as = asToken;
|
|
1062
|
-
this.range =
|
|
1098
|
+
this.range = util_1.util.createBoundingRange(this.tokens.optional, this.tokens.name, this.tokens.as, this.typeExpression);
|
|
1063
1099
|
}
|
|
1064
1100
|
transpile(state) {
|
|
1065
1101
|
throw new Error('Method not implemented.');
|
|
1066
1102
|
}
|
|
1067
|
-
|
|
1068
|
-
var _a;
|
|
1069
|
-
return (_a = this.
|
|
1103
|
+
getLeadingTrivia() {
|
|
1104
|
+
var _a, _b;
|
|
1105
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.name.leadingTrivia);
|
|
1070
1106
|
}
|
|
1071
1107
|
get name() {
|
|
1072
|
-
return this.tokens.name;
|
|
1108
|
+
return this.tokens.name.text;
|
|
1109
|
+
}
|
|
1110
|
+
get isOptional() {
|
|
1111
|
+
return !!this.tokens.optional;
|
|
1073
1112
|
}
|
|
1074
1113
|
walk(visitor, options) {
|
|
1075
|
-
|
|
1114
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1115
|
+
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
1116
|
+
}
|
|
1076
1117
|
}
|
|
1077
1118
|
getTypedef(state) {
|
|
1078
1119
|
var _a;
|
|
@@ -1080,32 +1121,120 @@ class InterfaceFieldStatement extends Statement {
|
|
|
1080
1121
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1081
1122
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1082
1123
|
}
|
|
1124
|
+
if (this.isOptional) {
|
|
1125
|
+
result.push(this.tokens.optional.text, ' ');
|
|
1126
|
+
}
|
|
1083
1127
|
result.push(this.tokens.name.text);
|
|
1084
|
-
if (this.
|
|
1085
|
-
result.push(' as ', ...this.
|
|
1128
|
+
if (this.typeExpression) {
|
|
1129
|
+
result.push(' as ', ...this.typeExpression.getTypedef(state));
|
|
1086
1130
|
}
|
|
1087
1131
|
return result;
|
|
1088
1132
|
}
|
|
1133
|
+
getType(options) {
|
|
1134
|
+
var _a, _b;
|
|
1135
|
+
return (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(options)) !== null && _b !== void 0 ? _b : DynamicType_1.DynamicType.instance;
|
|
1136
|
+
}
|
|
1089
1137
|
}
|
|
1090
1138
|
exports.InterfaceFieldStatement = InterfaceFieldStatement;
|
|
1091
|
-
|
|
1139
|
+
//TODO: there is much that is similar with this and FunctionExpression.
|
|
1140
|
+
//It would be nice to refactor this so there is less duplicated code
|
|
1141
|
+
class InterfaceMethodStatement extends AstNode_2.Statement {
|
|
1142
|
+
constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeExpression, optionalToken) {
|
|
1143
|
+
super();
|
|
1144
|
+
this.params = params;
|
|
1145
|
+
this.returnTypeExpression = returnTypeExpression;
|
|
1146
|
+
this.kind = AstNode_1.AstNodeKind.InterfaceMethodStatement;
|
|
1147
|
+
this.tokens = {};
|
|
1148
|
+
this.tokens.optional = optionalToken;
|
|
1149
|
+
this.tokens.functionType = functionTypeToken;
|
|
1150
|
+
this.tokens.name = nameToken;
|
|
1151
|
+
this.tokens.leftParen = leftParen;
|
|
1152
|
+
this.tokens.rightParen = rightParen;
|
|
1153
|
+
this.tokens.as = asToken;
|
|
1154
|
+
}
|
|
1092
1155
|
transpile(state) {
|
|
1093
1156
|
throw new Error('Method not implemented.');
|
|
1094
1157
|
}
|
|
1095
|
-
|
|
1096
|
-
|
|
1158
|
+
get range() {
|
|
1159
|
+
var _a;
|
|
1160
|
+
return util_1.util.createBoundingRange(this.tokens.optional, 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);
|
|
1161
|
+
}
|
|
1162
|
+
/**
|
|
1163
|
+
* Get the name of this method.
|
|
1164
|
+
*/
|
|
1165
|
+
getName(parseMode) {
|
|
1166
|
+
return this.tokens.name.text;
|
|
1167
|
+
}
|
|
1168
|
+
get isOptional() {
|
|
1169
|
+
return !!this.tokens.optional;
|
|
1170
|
+
}
|
|
1171
|
+
getLeadingTrivia() {
|
|
1172
|
+
var _a, _b;
|
|
1173
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_b = (_a = this.tokens.optional) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : this.tokens.functionType.leadingTrivia);
|
|
1097
1174
|
}
|
|
1098
1175
|
walk(visitor, options) {
|
|
1099
|
-
|
|
1176
|
+
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1177
|
+
(0, visitors_1.walk)(this, 'returnTypeExpression', visitor, options);
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
getTypedef(state) {
|
|
1181
|
+
var _a, _b;
|
|
1182
|
+
const result = [];
|
|
1183
|
+
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1184
|
+
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1185
|
+
}
|
|
1186
|
+
if (this.isOptional) {
|
|
1187
|
+
result.push(this.tokens.optional.text, ' ');
|
|
1188
|
+
}
|
|
1189
|
+
result.push(this.tokens.functionType.text, ' ', this.tokens.name.text, '(');
|
|
1190
|
+
const params = (_b = this.params) !== null && _b !== void 0 ? _b : [];
|
|
1191
|
+
for (let i = 0; i < params.length; i++) {
|
|
1192
|
+
if (i > 0) {
|
|
1193
|
+
result.push(', ');
|
|
1194
|
+
}
|
|
1195
|
+
const param = params[i];
|
|
1196
|
+
result.push(param.name.text);
|
|
1197
|
+
if (param.typeExpression) {
|
|
1198
|
+
result.push(' as ', ...param.typeExpression.getTypedef(state));
|
|
1199
|
+
}
|
|
1200
|
+
}
|
|
1201
|
+
result.push(')');
|
|
1202
|
+
if (this.returnTypeExpression) {
|
|
1203
|
+
result.push(' as ', ...this.returnTypeExpression.getTypedef(state));
|
|
1204
|
+
}
|
|
1205
|
+
return result;
|
|
1206
|
+
}
|
|
1207
|
+
getType(options) {
|
|
1208
|
+
var _a, _b, _c;
|
|
1209
|
+
//if there's a defined return type, use that
|
|
1210
|
+
let returnType = (_a = this.returnTypeExpression) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1211
|
+
const isSub = this.tokens.functionType.kind === TokenKind_1.TokenKind.Sub;
|
|
1212
|
+
//if we don't have a return type and this is a sub, set the return type to `void`. else use `dynamic`
|
|
1213
|
+
if (!returnType) {
|
|
1214
|
+
returnType = isSub ? VoidType_1.VoidType.instance : DynamicType_1.DynamicType.instance;
|
|
1215
|
+
}
|
|
1216
|
+
const resultType = new TypedFunctionType_1.TypedFunctionType(returnType);
|
|
1217
|
+
resultType.isSub = isSub;
|
|
1218
|
+
for (let param of this.params) {
|
|
1219
|
+
resultType.addParameter(param.name.text, param.getType(options), !!param.defaultValue);
|
|
1220
|
+
}
|
|
1221
|
+
if (options.typeChain) {
|
|
1222
|
+
// need Interface type for type chain
|
|
1223
|
+
(_b = this.parent) === null || _b === void 0 ? void 0 : _b.getType(options);
|
|
1224
|
+
}
|
|
1225
|
+
let funcName = this.getName(Parser_1.ParseMode.BrighterScript);
|
|
1226
|
+
resultType.setName(funcName);
|
|
1227
|
+
(_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
|
|
1228
|
+
return resultType;
|
|
1100
1229
|
}
|
|
1101
1230
|
}
|
|
1102
1231
|
exports.InterfaceMethodStatement = InterfaceMethodStatement;
|
|
1103
|
-
class ClassStatement extends Statement {
|
|
1232
|
+
class ClassStatement extends AstNode_2.Statement {
|
|
1104
1233
|
constructor(classKeyword,
|
|
1105
1234
|
/**
|
|
1106
1235
|
* The name of the class (without namespace prefix)
|
|
1107
1236
|
*/
|
|
1108
|
-
name, body, end, extendsKeyword, parentClassName
|
|
1237
|
+
name, body, end, extendsKeyword, parentClassName) {
|
|
1109
1238
|
var _a, _b, _c, _d;
|
|
1110
1239
|
super();
|
|
1111
1240
|
this.classKeyword = classKeyword;
|
|
@@ -1114,16 +1243,12 @@ class ClassStatement extends Statement {
|
|
|
1114
1243
|
this.end = end;
|
|
1115
1244
|
this.extendsKeyword = extendsKeyword;
|
|
1116
1245
|
this.parentClassName = parentClassName;
|
|
1117
|
-
this.
|
|
1118
|
-
this.currentSymbolTable = currentSymbolTable;
|
|
1119
|
-
this.symbolTable = new SymbolTable_1.SymbolTable();
|
|
1120
|
-
this.memberTable = new SymbolTable_1.SymbolTable();
|
|
1246
|
+
this.kind = AstNode_1.AstNodeKind.ClassStatement;
|
|
1121
1247
|
this.memberMap = {};
|
|
1122
1248
|
this.methods = [];
|
|
1123
1249
|
this.fields = [];
|
|
1124
1250
|
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1125
|
-
this.symbolTable.
|
|
1126
|
-
this.range = (_b = util_1.util.createBoundingRange(this.classKeyword, this.name, this.extendsKeyword, this.parentClassName, ...this.body, this.end)) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
1251
|
+
this.symbolTable = new SymbolTable_2.SymbolTable(`ClassStatement: '${(_b = this.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
|
|
1127
1252
|
for (let statement of this.body) {
|
|
1128
1253
|
if ((0, reflection_1.isMethodStatement)(statement)) {
|
|
1129
1254
|
this.methods.push(statement);
|
|
@@ -1134,13 +1259,15 @@ class ClassStatement extends Statement {
|
|
|
1134
1259
|
this.memberMap[(_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text.toLowerCase()] = statement;
|
|
1135
1260
|
}
|
|
1136
1261
|
}
|
|
1262
|
+
this.range = util_1.util.createBoundingRange(classKeyword, name, extendsKeyword, parentClassName, ...(body !== null && body !== void 0 ? body : []), end);
|
|
1137
1263
|
}
|
|
1138
1264
|
getName(parseMode) {
|
|
1139
1265
|
var _a;
|
|
1140
1266
|
const name = (_a = this.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1141
1267
|
if (name) {
|
|
1142
|
-
|
|
1143
|
-
|
|
1268
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1269
|
+
if (namespace) {
|
|
1270
|
+
let namespaceName = namespace.getName(parseMode);
|
|
1144
1271
|
let separator = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
|
|
1145
1272
|
return namespaceName + separator + name;
|
|
1146
1273
|
}
|
|
@@ -1153,35 +1280,8 @@ class ClassStatement extends Statement {
|
|
|
1153
1280
|
return undefined;
|
|
1154
1281
|
}
|
|
1155
1282
|
}
|
|
1156
|
-
|
|
1157
|
-
return
|
|
1158
|
-
}
|
|
1159
|
-
getConstructorFunctionType() {
|
|
1160
|
-
var _a, _b;
|
|
1161
|
-
const constructFunc = this.getConstructorFunction();
|
|
1162
|
-
const constructorFuncType = (_b = (_a = constructFunc === null || constructFunc === void 0 ? void 0 : constructFunc.func) === null || _a === void 0 ? void 0 : _a.getFunctionType()) !== null && _b !== void 0 ? _b : new FunctionType_1.FunctionType();
|
|
1163
|
-
constructorFuncType.setName(this.getName(Parser_1.ParseMode.BrighterScript));
|
|
1164
|
-
constructorFuncType.isNew = true;
|
|
1165
|
-
return constructorFuncType;
|
|
1166
|
-
}
|
|
1167
|
-
buildSymbolTable(parentClass) {
|
|
1168
|
-
var _a, _b, _c, _d, _e;
|
|
1169
|
-
this.symbolTable.clear();
|
|
1170
|
-
this.symbolTable.addSymbol('m', (_a = this.name) === null || _a === void 0 ? void 0 : _a.range, this.getThisBscType());
|
|
1171
|
-
this.memberTable.clear();
|
|
1172
|
-
if ((0, reflection_1.isClassStatement)(parentClass)) {
|
|
1173
|
-
this.symbolTable.addSymbol('super', (_b = this.parentClassName) === null || _b === void 0 ? void 0 : _b.range, parentClass.getConstructorFunctionType());
|
|
1174
|
-
this.memberTable.setParent(parentClass === null || parentClass === void 0 ? void 0 : parentClass.memberTable);
|
|
1175
|
-
}
|
|
1176
|
-
for (const statement of this.methods) {
|
|
1177
|
-
statement === null || statement === void 0 ? void 0 : statement.func.symbolTable.setParent(this.symbolTable);
|
|
1178
|
-
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getFunctionType();
|
|
1179
|
-
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));
|
|
1180
|
-
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);
|
|
1181
|
-
}
|
|
1182
|
-
for (const statement of this.fields) {
|
|
1183
|
-
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());
|
|
1184
|
-
}
|
|
1283
|
+
getLeadingTrivia() {
|
|
1284
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.classKeyword.leadingTrivia);
|
|
1185
1285
|
}
|
|
1186
1286
|
transpile(state) {
|
|
1187
1287
|
let result = [];
|
|
@@ -1193,14 +1293,15 @@ class ClassStatement extends Statement {
|
|
|
1193
1293
|
return result;
|
|
1194
1294
|
}
|
|
1195
1295
|
getTypedef(state) {
|
|
1196
|
-
var _a
|
|
1296
|
+
var _a;
|
|
1197
1297
|
const result = [];
|
|
1198
1298
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1199
1299
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1200
1300
|
}
|
|
1201
1301
|
result.push('class ', this.name.text);
|
|
1202
1302
|
if (this.extendsKeyword && this.parentClassName) {
|
|
1203
|
-
const
|
|
1303
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1304
|
+
const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript));
|
|
1204
1305
|
result.push(` extends ${fqName}`);
|
|
1205
1306
|
}
|
|
1206
1307
|
result.push(state.newline);
|
|
@@ -1208,8 +1309,12 @@ class ClassStatement extends Statement {
|
|
|
1208
1309
|
let body = this.body;
|
|
1209
1310
|
//inject an empty "new" method if missing
|
|
1210
1311
|
if (!this.getConstructorFunction()) {
|
|
1312
|
+
const constructor = (0, creators_1.createMethodStatement)('new', TokenKind_1.TokenKind.Sub);
|
|
1313
|
+
constructor.parent = this;
|
|
1314
|
+
//walk the constructor to set up parent links
|
|
1315
|
+
constructor.link();
|
|
1211
1316
|
body = [
|
|
1212
|
-
|
|
1317
|
+
constructor,
|
|
1213
1318
|
...this.body
|
|
1214
1319
|
];
|
|
1215
1320
|
}
|
|
@@ -1228,13 +1333,14 @@ class ClassStatement extends Statement {
|
|
|
1228
1333
|
* The base class is index 0, its child is index 1, and so on.
|
|
1229
1334
|
*/
|
|
1230
1335
|
getParentClassIndex(state) {
|
|
1231
|
-
var _a
|
|
1336
|
+
var _a;
|
|
1232
1337
|
let myIndex = 0;
|
|
1233
1338
|
let stmt = this;
|
|
1234
1339
|
while (stmt) {
|
|
1235
1340
|
if (stmt.parentClassName) {
|
|
1341
|
+
const namespace = stmt.findAncestor(reflection_1.isNamespaceStatement);
|
|
1236
1342
|
//find the parent class
|
|
1237
|
-
stmt = (
|
|
1343
|
+
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;
|
|
1238
1344
|
myIndex++;
|
|
1239
1345
|
}
|
|
1240
1346
|
else {
|
|
@@ -1249,41 +1355,21 @@ class ClassStatement extends Statement {
|
|
|
1249
1355
|
return null;
|
|
1250
1356
|
}
|
|
1251
1357
|
}
|
|
1252
|
-
|
|
1358
|
+
hasParentClass() {
|
|
1253
1359
|
return !!this.parentClassName;
|
|
1254
1360
|
}
|
|
1255
|
-
/**
|
|
1256
|
-
* Gets an array of possible parent class names, taking into account the namespace this class was created under
|
|
1257
|
-
* @returns array of possible parent class names
|
|
1258
|
-
*/
|
|
1259
|
-
getPossibleFullParentNames() {
|
|
1260
|
-
var _a;
|
|
1261
|
-
if (!this.hasParent()) {
|
|
1262
|
-
return [];
|
|
1263
|
-
}
|
|
1264
|
-
if (((_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getNameParts().length) > 1) {
|
|
1265
|
-
// The specified parent class already has a dot, so it must already reference a namespace
|
|
1266
|
-
return [this.parentClassName.getName()];
|
|
1267
|
-
}
|
|
1268
|
-
const names = [];
|
|
1269
|
-
if (this.namespaceName) {
|
|
1270
|
-
// We're under a namespace, so the full parent name MIGHT be with this namespace too
|
|
1271
|
-
names.push(this.namespaceName.getName() + '.' + this.parentClassName.getName());
|
|
1272
|
-
}
|
|
1273
|
-
names.push(this.parentClassName.getName());
|
|
1274
|
-
return names;
|
|
1275
|
-
}
|
|
1276
1361
|
/**
|
|
1277
1362
|
* Get all ancestor classes, in closest-to-furthest order (i.e. 0 is parent, 1 is grandparent, etc...).
|
|
1278
1363
|
* This will return an empty array if no ancestors were found
|
|
1279
1364
|
*/
|
|
1280
1365
|
getAncestors(state) {
|
|
1281
|
-
var _a
|
|
1366
|
+
var _a;
|
|
1282
1367
|
let ancestors = [];
|
|
1283
1368
|
let stmt = this;
|
|
1284
1369
|
while (stmt) {
|
|
1285
1370
|
if (stmt.parentClassName) {
|
|
1286
|
-
|
|
1371
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1372
|
+
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;
|
|
1287
1373
|
ancestors.push(stmt);
|
|
1288
1374
|
}
|
|
1289
1375
|
else {
|
|
@@ -1298,6 +1384,12 @@ class ClassStatement extends Statement {
|
|
|
1298
1384
|
}
|
|
1299
1385
|
return `__${name}_builder`;
|
|
1300
1386
|
}
|
|
1387
|
+
getConstructorType() {
|
|
1388
|
+
var _a, _b;
|
|
1389
|
+
const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime })) !== null && _b !== void 0 ? _b : new TypedFunctionType_1.TypedFunctionType(null);
|
|
1390
|
+
constructorType.returnType = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime });
|
|
1391
|
+
return constructorType;
|
|
1392
|
+
}
|
|
1301
1393
|
/**
|
|
1302
1394
|
* Get the constructor function for this class (if exists), or undefined if not exist
|
|
1303
1395
|
*/
|
|
@@ -1325,7 +1417,6 @@ class ClassStatement extends Statement {
|
|
|
1325
1417
|
* without instantiating the parent constructor at that point in time.
|
|
1326
1418
|
*/
|
|
1327
1419
|
getTranspiledBuilder(state) {
|
|
1328
|
-
var _a;
|
|
1329
1420
|
let result = [];
|
|
1330
1421
|
result.push(`function ${this.getBuilderName(this.getName(Parser_1.ParseMode.BrightScript))}()\n`);
|
|
1331
1422
|
state.blockDepth++;
|
|
@@ -1337,7 +1428,8 @@ class ClassStatement extends Statement {
|
|
|
1337
1428
|
let ancestors = this.getAncestors(state);
|
|
1338
1429
|
//construct parent class or empty object
|
|
1339
1430
|
if (ancestors[0]) {
|
|
1340
|
-
|
|
1431
|
+
const ancestorNamespace = ancestors[0].findAncestor(reflection_1.isNamespaceStatement);
|
|
1432
|
+
let fullyQualifiedClassName = util_1.util.getFullyQualifiedClassName(ancestors[0].getName(Parser_1.ParseMode.BrighterScript), ancestorNamespace === null || ancestorNamespace === void 0 ? void 0 : ancestorNamespace.getName(Parser_1.ParseMode.BrighterScript));
|
|
1341
1433
|
result.push('instance = ', this.getBuilderName(fullyQualifiedClassName), '()');
|
|
1342
1434
|
}
|
|
1343
1435
|
else {
|
|
@@ -1428,10 +1520,44 @@ class ClassStatement extends Statement {
|
|
|
1428
1520
|
return result;
|
|
1429
1521
|
}
|
|
1430
1522
|
walk(visitor, options) {
|
|
1523
|
+
//visitor-less walk function to do parent linking
|
|
1524
|
+
(0, visitors_1.walk)(this, 'parentClassName', null, options);
|
|
1431
1525
|
if (options.walkMode & visitors_1.InternalWalkMode.walkStatements) {
|
|
1432
1526
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1433
1527
|
}
|
|
1434
1528
|
}
|
|
1529
|
+
getType(options) {
|
|
1530
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1531
|
+
const superClass = (_a = this.parentClassName) === null || _a === void 0 ? void 0 : _a.getType(options);
|
|
1532
|
+
const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
|
|
1533
|
+
for (const statement of this.methods) {
|
|
1534
|
+
const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1535
|
+
let flag = SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1536
|
+
if (((_b = statement.accessModifier) === null || _b === void 0 ? void 0 : _b.kind) === TokenKind_1.TokenKind.Private) {
|
|
1537
|
+
flag |= SymbolTable_1.SymbolTypeFlag.private;
|
|
1538
|
+
}
|
|
1539
|
+
if (((_c = statement.accessModifier) === null || _c === void 0 ? void 0 : _c.kind) === TokenKind_1.TokenKind.Protected) {
|
|
1540
|
+
flag |= SymbolTable_1.SymbolTypeFlag.protected;
|
|
1541
|
+
}
|
|
1542
|
+
resultType.addMember((_d = statement === null || statement === void 0 ? void 0 : statement.name) === null || _d === void 0 ? void 0 : _d.text, { definingNode: statement }, funcType, flag);
|
|
1543
|
+
}
|
|
1544
|
+
for (const statement of this.fields) {
|
|
1545
|
+
const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
|
|
1546
|
+
let flag = SymbolTable_1.SymbolTypeFlag.runtime;
|
|
1547
|
+
if (statement.isOptional) {
|
|
1548
|
+
flag |= SymbolTable_1.SymbolTypeFlag.optional;
|
|
1549
|
+
}
|
|
1550
|
+
if (((_e = statement.accessModifier) === null || _e === void 0 ? void 0 : _e.kind) === TokenKind_1.TokenKind.Private) {
|
|
1551
|
+
flag |= SymbolTable_1.SymbolTypeFlag.private;
|
|
1552
|
+
}
|
|
1553
|
+
if (((_f = statement.accessModifier) === null || _f === void 0 ? void 0 : _f.kind) === TokenKind_1.TokenKind.Protected) {
|
|
1554
|
+
flag |= SymbolTable_1.SymbolTypeFlag.protected;
|
|
1555
|
+
}
|
|
1556
|
+
resultType.addMember((_g = statement === null || statement === void 0 ? void 0 : statement.name) === null || _g === void 0 ? void 0 : _g.text, { definingNode: statement }, fieldType, flag);
|
|
1557
|
+
}
|
|
1558
|
+
(_h = options.typeChain) === null || _h === void 0 ? void 0 : _h.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
|
|
1559
|
+
return resultType;
|
|
1560
|
+
}
|
|
1435
1561
|
}
|
|
1436
1562
|
exports.ClassStatement = ClassStatement;
|
|
1437
1563
|
const accessModifiers = [
|
|
@@ -1441,8 +1567,9 @@ const accessModifiers = [
|
|
|
1441
1567
|
];
|
|
1442
1568
|
class MethodStatement extends FunctionStatement {
|
|
1443
1569
|
constructor(modifiers, name, func, override) {
|
|
1444
|
-
super(name, func
|
|
1570
|
+
super(name, func);
|
|
1445
1571
|
this.override = override;
|
|
1572
|
+
this.kind = AstNode_1.AstNodeKind.MethodStatement;
|
|
1446
1573
|
this.modifiers = [];
|
|
1447
1574
|
if (modifiers) {
|
|
1448
1575
|
if (Array.isArray(modifiers)) {
|
|
@@ -1452,19 +1579,19 @@ class MethodStatement extends FunctionStatement {
|
|
|
1452
1579
|
this.modifiers.push(modifiers);
|
|
1453
1580
|
}
|
|
1454
1581
|
}
|
|
1582
|
+
this.range = util_1.util.createBoundingRange(...(this.modifiers), override, func);
|
|
1455
1583
|
}
|
|
1456
1584
|
get accessModifier() {
|
|
1457
1585
|
return this.modifiers.find(x => accessModifiers.includes(x.kind));
|
|
1458
1586
|
}
|
|
1459
|
-
|
|
1460
|
-
|
|
1587
|
+
/**
|
|
1588
|
+
* Get the name of this method.
|
|
1589
|
+
*/
|
|
1590
|
+
getName(parseMode) {
|
|
1591
|
+
return this.name.text;
|
|
1461
1592
|
}
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
if (!this._range) {
|
|
1465
|
-
this._range = (_b = util_1.util.createBoundingRange(this.accessModifier, this.override, (_a = this.func) !== null && _a !== void 0 ? _a : this.name)) !== null && _b !== void 0 ? _b : creators_1.interpolatedRange;
|
|
1466
|
-
}
|
|
1467
|
-
return this._range;
|
|
1593
|
+
getLeadingTrivia() {
|
|
1594
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.func.getLeadingTrivia());
|
|
1468
1595
|
}
|
|
1469
1596
|
transpile(state) {
|
|
1470
1597
|
if (this.name.text.toLowerCase() === 'new') {
|
|
@@ -1509,7 +1636,7 @@ class MethodStatement extends FunctionStatement {
|
|
|
1509
1636
|
if (this.override) {
|
|
1510
1637
|
result.push('override ');
|
|
1511
1638
|
}
|
|
1512
|
-
result.push(...this.func.getTypedef(state
|
|
1639
|
+
result.push(...this.func.getTypedef(state));
|
|
1513
1640
|
return result;
|
|
1514
1641
|
}
|
|
1515
1642
|
/**
|
|
@@ -1521,54 +1648,60 @@ class MethodStatement extends FunctionStatement {
|
|
|
1521
1648
|
if (state.classStatement.getAncestors(state).length === 0) {
|
|
1522
1649
|
return;
|
|
1523
1650
|
}
|
|
1524
|
-
//
|
|
1525
|
-
let
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1651
|
+
//check whether any calls to super exist
|
|
1652
|
+
let containsSuperCall = this.func.body.statements.findIndex((x) => {
|
|
1653
|
+
//is a call statement
|
|
1654
|
+
return (0, reflection_1.isExpressionStatement)(x) && (0, reflection_1.isCallExpression)(x.expression) &&
|
|
1655
|
+
//is a call to super
|
|
1656
|
+
util_1.util.findBeginningVariableExpression(x.expression.callee).name.text.toLowerCase() === 'super';
|
|
1657
|
+
}) !== -1;
|
|
1658
|
+
//if a call to super exists, quit here
|
|
1659
|
+
if (containsSuperCall) {
|
|
1531
1660
|
return;
|
|
1532
1661
|
}
|
|
1533
|
-
//this is a child class, and the
|
|
1662
|
+
//this is a child class, and the constructor doesn't contain a call to super. Inject one
|
|
1534
1663
|
const superCall = new ExpressionStatement(new Expression_1.CallExpression(new Expression_1.VariableExpression({
|
|
1535
1664
|
kind: TokenKind_1.TokenKind.Identifier,
|
|
1536
1665
|
text: 'super',
|
|
1537
1666
|
isReserved: false,
|
|
1538
1667
|
range: state.classStatement.name.range,
|
|
1539
|
-
leadingWhitespace: ''
|
|
1540
|
-
|
|
1668
|
+
leadingWhitespace: '',
|
|
1669
|
+
leadingTrivia: []
|
|
1670
|
+
}), {
|
|
1541
1671
|
kind: TokenKind_1.TokenKind.LeftParen,
|
|
1542
1672
|
text: '(',
|
|
1543
1673
|
isReserved: false,
|
|
1544
1674
|
range: state.classStatement.name.range,
|
|
1545
|
-
leadingWhitespace: ''
|
|
1675
|
+
leadingWhitespace: '',
|
|
1676
|
+
leadingTrivia: []
|
|
1546
1677
|
}, {
|
|
1547
1678
|
kind: TokenKind_1.TokenKind.RightParen,
|
|
1548
1679
|
text: ')',
|
|
1549
1680
|
isReserved: false,
|
|
1550
1681
|
range: state.classStatement.name.range,
|
|
1551
|
-
leadingWhitespace: ''
|
|
1552
|
-
|
|
1682
|
+
leadingWhitespace: '',
|
|
1683
|
+
leadingTrivia: []
|
|
1684
|
+
}, []));
|
|
1553
1685
|
state.editor.arrayUnshift(this.func.body.statements, superCall);
|
|
1554
1686
|
}
|
|
1555
1687
|
/**
|
|
1556
1688
|
* Inject field initializers at the top of the `new` function (after any present `super()` call)
|
|
1557
1689
|
*/
|
|
1558
1690
|
injectFieldInitializersForConstructor(state) {
|
|
1559
|
-
let startingIndex = state.classStatement.
|
|
1691
|
+
let startingIndex = state.classStatement.hasParentClass() ? 1 : 0;
|
|
1560
1692
|
let newStatements = [];
|
|
1561
1693
|
//insert the field initializers in order
|
|
1562
1694
|
for (let field of state.classStatement.fields) {
|
|
1563
1695
|
let thisQualifiedName = Object.assign({}, field.name);
|
|
1564
1696
|
thisQualifiedName.text = 'm.' + field.name.text;
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
else {
|
|
1697
|
+
const fieldAssignment = field.initialValue
|
|
1698
|
+
? new AssignmentStatement(field.equal, thisQualifiedName, field.initialValue)
|
|
1699
|
+
: new AssignmentStatement((0, creators_1.createToken)(TokenKind_1.TokenKind.Equal, '=', field.name.range), thisQualifiedName,
|
|
1569
1700
|
//if there is no initial value, set the initial value to `invalid`
|
|
1570
|
-
|
|
1571
|
-
|
|
1701
|
+
(0, creators_1.createInvalidLiteral)('invalid', field.name.range));
|
|
1702
|
+
// Add parent so namespace lookups work
|
|
1703
|
+
fieldAssignment.parent = state.classStatement;
|
|
1704
|
+
newStatements.push(fieldAssignment);
|
|
1572
1705
|
}
|
|
1573
1706
|
state.editor.arraySplice(this.func.body.statements, startingIndex, 0, ...newStatements);
|
|
1574
1707
|
}
|
|
@@ -1579,33 +1712,33 @@ class MethodStatement extends FunctionStatement {
|
|
|
1579
1712
|
}
|
|
1580
1713
|
}
|
|
1581
1714
|
exports.MethodStatement = MethodStatement;
|
|
1582
|
-
class FieldStatement extends Statement {
|
|
1583
|
-
constructor(accessModifier, name, as,
|
|
1584
|
-
var _a;
|
|
1715
|
+
class FieldStatement extends AstNode_2.Statement {
|
|
1716
|
+
constructor(accessModifier, name, as, typeExpression, equal, initialValue, optional) {
|
|
1585
1717
|
super();
|
|
1586
1718
|
this.accessModifier = accessModifier;
|
|
1587
1719
|
this.name = name;
|
|
1588
1720
|
this.as = as;
|
|
1589
|
-
this.
|
|
1721
|
+
this.typeExpression = typeExpression;
|
|
1590
1722
|
this.equal = equal;
|
|
1591
1723
|
this.initialValue = initialValue;
|
|
1592
|
-
this.
|
|
1593
|
-
this.
|
|
1724
|
+
this.optional = optional;
|
|
1725
|
+
this.kind = AstNode_1.AstNodeKind.FieldStatement;
|
|
1726
|
+
this.range = util_1.util.createBoundingRange(accessModifier, optional, name, as, typeExpression, equal, initialValue);
|
|
1594
1727
|
}
|
|
1595
1728
|
/**
|
|
1596
1729
|
* Derive a ValueKind from the type token, or the initial value.
|
|
1597
1730
|
* Defaults to `DynamicType`
|
|
1598
1731
|
*/
|
|
1599
|
-
getType(
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
|
|
1607
|
-
|
|
1608
|
-
|
|
1732
|
+
getType(options) {
|
|
1733
|
+
var _a, _b, _c, _d;
|
|
1734
|
+
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;
|
|
1735
|
+
}
|
|
1736
|
+
getLeadingTrivia() {
|
|
1737
|
+
var _a, _b, _c, _d, _e, _f;
|
|
1738
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, (_f = (_d = (_b = (_a = this.accessModifier) === null || _a === void 0 ? void 0 : _a.leadingTrivia) !== null && _b !== void 0 ? _b : (_c = this.optional) === null || _c === void 0 ? void 0 : _c.leadingTrivia) !== null && _d !== void 0 ? _d : (_e = this.name) === null || _e === void 0 ? void 0 : _e.leadingTrivia) !== null && _f !== void 0 ? _f : []);
|
|
1739
|
+
}
|
|
1740
|
+
get isOptional() {
|
|
1741
|
+
return !!this.optional;
|
|
1609
1742
|
}
|
|
1610
1743
|
transpile(state) {
|
|
1611
1744
|
throw new Error('transpile not implemented for ' + Object.getPrototypeOf(this).constructor.name);
|
|
@@ -1617,30 +1750,34 @@ class FieldStatement extends Statement {
|
|
|
1617
1750
|
for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
|
|
1618
1751
|
result.push(...annotation.getTypedef(state), state.newline, state.indent());
|
|
1619
1752
|
}
|
|
1620
|
-
let type = this.getType(
|
|
1621
|
-
if (
|
|
1753
|
+
let type = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
|
|
1754
|
+
if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
|
|
1622
1755
|
type = new DynamicType_1.DynamicType();
|
|
1623
1756
|
}
|
|
1624
|
-
result.push((_c = (_b = this.accessModifier) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'public', ' '
|
|
1757
|
+
result.push((_c = (_b = this.accessModifier) === null || _b === void 0 ? void 0 : _b.text) !== null && _c !== void 0 ? _c : 'public', ' ');
|
|
1758
|
+
if (this.isOptional) {
|
|
1759
|
+
result.push(this.optional.text, ' ');
|
|
1760
|
+
}
|
|
1761
|
+
result.push((_d = this.name) === null || _d === void 0 ? void 0 : _d.text, ' as ', type.toTypeString());
|
|
1625
1762
|
}
|
|
1626
1763
|
return result;
|
|
1627
1764
|
}
|
|
1628
1765
|
walk(visitor, options) {
|
|
1629
1766
|
if (options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
1630
|
-
(0, visitors_1.walk)(this, '
|
|
1767
|
+
(0, visitors_1.walk)(this, 'typeExpression', visitor, options);
|
|
1631
1768
|
(0, visitors_1.walk)(this, 'initialValue', visitor, options);
|
|
1632
1769
|
}
|
|
1633
1770
|
}
|
|
1634
1771
|
}
|
|
1635
1772
|
exports.FieldStatement = FieldStatement;
|
|
1636
|
-
class TryCatchStatement extends Statement {
|
|
1773
|
+
class TryCatchStatement extends AstNode_2.Statement {
|
|
1637
1774
|
constructor(tokens, tryBranch, catchStatement) {
|
|
1638
|
-
var _a;
|
|
1639
1775
|
super();
|
|
1640
1776
|
this.tokens = tokens;
|
|
1641
1777
|
this.tryBranch = tryBranch;
|
|
1642
1778
|
this.catchStatement = catchStatement;
|
|
1643
|
-
this.
|
|
1779
|
+
this.kind = AstNode_1.AstNodeKind.TryCatchStatement;
|
|
1780
|
+
this.range = util_1.util.createBoundingRange(tokens.try, tryBranch, catchStatement, tokens.endTry);
|
|
1644
1781
|
}
|
|
1645
1782
|
transpile(state) {
|
|
1646
1783
|
var _a, _b;
|
|
@@ -1663,16 +1800,14 @@ class TryCatchStatement extends Statement {
|
|
|
1663
1800
|
}
|
|
1664
1801
|
}
|
|
1665
1802
|
exports.TryCatchStatement = TryCatchStatement;
|
|
1666
|
-
class CatchStatement extends Statement {
|
|
1803
|
+
class CatchStatement extends AstNode_2.Statement {
|
|
1667
1804
|
constructor(tokens, exceptionVariable, catchBranch) {
|
|
1668
1805
|
super();
|
|
1669
1806
|
this.tokens = tokens;
|
|
1670
1807
|
this.exceptionVariable = exceptionVariable;
|
|
1671
1808
|
this.catchBranch = catchBranch;
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
var _a, _b;
|
|
1675
|
-
return util_1.util.createRangeFromPositions(this.tokens.catch.range.start, ((_b = (_a = this.catchBranch) !== null && _a !== void 0 ? _a : this.exceptionVariable) !== null && _b !== void 0 ? _b : this.tokens.catch).range.end);
|
|
1809
|
+
this.kind = AstNode_1.AstNodeKind.CatchStatement;
|
|
1810
|
+
this.range = util_1.util.createBoundingRange(tokens.catch, exceptionVariable, catchBranch);
|
|
1676
1811
|
}
|
|
1677
1812
|
transpile(state) {
|
|
1678
1813
|
var _a, _b, _c, _d;
|
|
@@ -1690,13 +1825,13 @@ class CatchStatement extends Statement {
|
|
|
1690
1825
|
}
|
|
1691
1826
|
}
|
|
1692
1827
|
exports.CatchStatement = CatchStatement;
|
|
1693
|
-
class ThrowStatement extends Statement {
|
|
1828
|
+
class ThrowStatement extends AstNode_2.Statement {
|
|
1694
1829
|
constructor(throwToken, expression) {
|
|
1695
|
-
var _a;
|
|
1696
1830
|
super();
|
|
1697
1831
|
this.throwToken = throwToken;
|
|
1698
1832
|
this.expression = expression;
|
|
1699
|
-
this.
|
|
1833
|
+
this.kind = AstNode_1.AstNodeKind.ThrowStatement;
|
|
1834
|
+
this.range = util_1.util.createBoundingRange(throwToken, expression);
|
|
1700
1835
|
}
|
|
1701
1836
|
transpile(state) {
|
|
1702
1837
|
const result = [
|
|
@@ -1720,16 +1855,18 @@ class ThrowStatement extends Statement {
|
|
|
1720
1855
|
}
|
|
1721
1856
|
}
|
|
1722
1857
|
exports.ThrowStatement = ThrowStatement;
|
|
1723
|
-
class EnumStatement extends Statement {
|
|
1724
|
-
constructor(tokens, body
|
|
1725
|
-
var _a
|
|
1858
|
+
class EnumStatement extends AstNode_2.Statement {
|
|
1859
|
+
constructor(tokens, body) {
|
|
1860
|
+
var _a;
|
|
1726
1861
|
super();
|
|
1727
1862
|
this.tokens = tokens;
|
|
1728
1863
|
this.body = body;
|
|
1729
|
-
this.
|
|
1730
|
-
this.symbolTable = new
|
|
1731
|
-
this.
|
|
1732
|
-
|
|
1864
|
+
this.kind = AstNode_1.AstNodeKind.EnumStatement;
|
|
1865
|
+
this.symbolTable = new SymbolTable_2.SymbolTable('Enum');
|
|
1866
|
+
this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
|
|
1867
|
+
}
|
|
1868
|
+
get range() {
|
|
1869
|
+
return util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum);
|
|
1733
1870
|
}
|
|
1734
1871
|
getMembers() {
|
|
1735
1872
|
const result = [];
|
|
@@ -1740,12 +1877,15 @@ class EnumStatement extends Statement {
|
|
|
1740
1877
|
}
|
|
1741
1878
|
return result;
|
|
1742
1879
|
}
|
|
1880
|
+
getLeadingTrivia() {
|
|
1881
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.enum.leadingTrivia);
|
|
1882
|
+
}
|
|
1743
1883
|
/**
|
|
1744
1884
|
* Get a map of member names and their values.
|
|
1745
1885
|
* All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
|
|
1746
1886
|
*/
|
|
1747
1887
|
getMemberValueMap() {
|
|
1748
|
-
var _a, _b, _c, _d, _e, _f, _g;
|
|
1888
|
+
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
1749
1889
|
const result = new Map();
|
|
1750
1890
|
const members = this.getMembers();
|
|
1751
1891
|
let currentIntValue = 0;
|
|
@@ -1764,10 +1904,14 @@ class EnumStatement extends Statement {
|
|
|
1764
1904
|
currentIntValue++;
|
|
1765
1905
|
}
|
|
1766
1906
|
result.set((_c = member.name) === null || _c === void 0 ? void 0 : _c.toLowerCase(), member.value.token.text);
|
|
1907
|
+
//simple unary expressions (like `-1`)
|
|
1908
|
+
}
|
|
1909
|
+
else if ((0, reflection_1.isUnaryExpression)(member.value) && (0, reflection_1.isLiteralExpression)(member.value.right)) {
|
|
1910
|
+
result.set((_d = member.name) === null || _d === void 0 ? void 0 : _d.toLowerCase(), member.value.operator.text + member.value.right.token.text);
|
|
1767
1911
|
//all other values
|
|
1768
1912
|
}
|
|
1769
1913
|
else {
|
|
1770
|
-
result.set((
|
|
1914
|
+
result.set((_e = member.name) === null || _e === void 0 ? void 0 : _e.toLowerCase(), (_h = (_g = (_f = member.value) === null || _f === void 0 ? void 0 : _f.token) === null || _g === void 0 ? void 0 : _g.text) !== null && _h !== void 0 ? _h : 'invalid');
|
|
1771
1915
|
}
|
|
1772
1916
|
}
|
|
1773
1917
|
return result;
|
|
@@ -1775,12 +1919,6 @@ class EnumStatement extends Statement {
|
|
|
1775
1919
|
getMemberValue(name) {
|
|
1776
1920
|
return this.getMemberValueMap().get(name.toLowerCase());
|
|
1777
1921
|
}
|
|
1778
|
-
buildSymbolTable() {
|
|
1779
|
-
this.symbolTable.clear();
|
|
1780
|
-
for (const member of this.getMembers()) {
|
|
1781
|
-
this.symbolTable.addSymbol(member === null || member === void 0 ? void 0 : member.name, member === null || member === void 0 ? void 0 : member.range, new EnumType_1.EnumMemberType(this.fullName, member === null || member === void 0 ? void 0 : member.name));
|
|
1782
|
-
}
|
|
1783
|
-
}
|
|
1784
1922
|
/**
|
|
1785
1923
|
* The name of the enum (without the namespace prefix)
|
|
1786
1924
|
*/
|
|
@@ -1795,8 +1933,9 @@ class EnumStatement extends Statement {
|
|
|
1795
1933
|
var _a;
|
|
1796
1934
|
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
1797
1935
|
if (name) {
|
|
1798
|
-
|
|
1799
|
-
|
|
1936
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
1937
|
+
if (namespace) {
|
|
1938
|
+
let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
|
|
1800
1939
|
return `${namespaceName}.${name}`;
|
|
1801
1940
|
}
|
|
1802
1941
|
else {
|
|
@@ -1808,9 +1947,6 @@ class EnumStatement extends Statement {
|
|
|
1808
1947
|
return undefined;
|
|
1809
1948
|
}
|
|
1810
1949
|
}
|
|
1811
|
-
getThisBscType() {
|
|
1812
|
-
return new EnumType_1.EnumType(this.fullName, this.symbolTable);
|
|
1813
|
-
}
|
|
1814
1950
|
transpile(state) {
|
|
1815
1951
|
//enum declarations do not exist at runtime, so don't transpile anything...
|
|
1816
1952
|
return [];
|
|
@@ -1838,15 +1974,27 @@ class EnumStatement extends Statement {
|
|
|
1838
1974
|
(0, visitors_1.walkArray)(this.body, visitor, options, this);
|
|
1839
1975
|
}
|
|
1840
1976
|
}
|
|
1977
|
+
getType(options) {
|
|
1978
|
+
var _a, _b, _c;
|
|
1979
|
+
const members = this.getMembers();
|
|
1980
|
+
const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
|
|
1981
|
+
resultType.pushMemberProvider(() => this.getSymbolTable());
|
|
1982
|
+
for (const statement of members) {
|
|
1983
|
+
resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
|
|
1984
|
+
}
|
|
1985
|
+
return resultType;
|
|
1986
|
+
}
|
|
1841
1987
|
}
|
|
1842
1988
|
exports.EnumStatement = EnumStatement;
|
|
1843
|
-
class EnumMemberStatement extends Statement {
|
|
1989
|
+
class EnumMemberStatement extends AstNode_2.Statement {
|
|
1844
1990
|
constructor(tokens, value) {
|
|
1845
|
-
var _a;
|
|
1846
1991
|
super();
|
|
1847
1992
|
this.tokens = tokens;
|
|
1848
1993
|
this.value = value;
|
|
1849
|
-
this.
|
|
1994
|
+
this.kind = AstNode_1.AstNodeKind.EnumMemberStatement;
|
|
1995
|
+
}
|
|
1996
|
+
get range() {
|
|
1997
|
+
return util_1.util.createBoundingRange(this.tokens.name, this.tokens.equal, this.value);
|
|
1850
1998
|
}
|
|
1851
1999
|
/**
|
|
1852
2000
|
* The name of the member
|
|
@@ -1854,6 +2002,9 @@ class EnumMemberStatement extends Statement {
|
|
|
1854
2002
|
get name() {
|
|
1855
2003
|
return this.tokens.name.text;
|
|
1856
2004
|
}
|
|
2005
|
+
getLeadingTrivia() {
|
|
2006
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.name.leadingTrivia);
|
|
2007
|
+
}
|
|
1857
2008
|
transpile(state) {
|
|
1858
2009
|
return [];
|
|
1859
2010
|
}
|
|
@@ -1874,6 +2025,90 @@ class EnumMemberStatement extends Statement {
|
|
|
1874
2025
|
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
1875
2026
|
}
|
|
1876
2027
|
}
|
|
2028
|
+
getType(options) {
|
|
2029
|
+
var _a, _b, _c, _d;
|
|
2030
|
+
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, (_d = this.value) === null || _d === void 0 ? void 0 : _d.getType(options));
|
|
2031
|
+
}
|
|
1877
2032
|
}
|
|
1878
2033
|
exports.EnumMemberStatement = EnumMemberStatement;
|
|
2034
|
+
class ConstStatement extends AstNode_2.Statement {
|
|
2035
|
+
constructor(tokens, value) {
|
|
2036
|
+
super();
|
|
2037
|
+
this.tokens = tokens;
|
|
2038
|
+
this.value = value;
|
|
2039
|
+
this.kind = AstNode_1.AstNodeKind.ConstStatement;
|
|
2040
|
+
this.range = util_1.util.createBoundingRange(this.tokens.const, this.tokens.name, this.tokens.equals, this.value);
|
|
2041
|
+
}
|
|
2042
|
+
get name() {
|
|
2043
|
+
return this.tokens.name.text;
|
|
2044
|
+
}
|
|
2045
|
+
getLeadingTrivia() {
|
|
2046
|
+
return util_1.util.concatAnnotationLeadingTrivia(this, this.tokens.const.leadingTrivia);
|
|
2047
|
+
}
|
|
2048
|
+
/**
|
|
2049
|
+
* The name of the statement WITH its leading namespace (if applicable)
|
|
2050
|
+
*/
|
|
2051
|
+
get fullName() {
|
|
2052
|
+
var _a;
|
|
2053
|
+
const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
|
|
2054
|
+
if (name) {
|
|
2055
|
+
const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
|
|
2056
|
+
if (namespace) {
|
|
2057
|
+
let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
|
|
2058
|
+
return `${namespaceName}.${name}`;
|
|
2059
|
+
}
|
|
2060
|
+
else {
|
|
2061
|
+
return name;
|
|
2062
|
+
}
|
|
2063
|
+
}
|
|
2064
|
+
else {
|
|
2065
|
+
//return undefined which will allow outside callers to know that this doesn't have a name
|
|
2066
|
+
return undefined;
|
|
2067
|
+
}
|
|
2068
|
+
}
|
|
2069
|
+
transpile(state) {
|
|
2070
|
+
//const declarations don't exist at runtime, so just transpile empty
|
|
2071
|
+
return [];
|
|
2072
|
+
}
|
|
2073
|
+
getTypedef(state) {
|
|
2074
|
+
return [
|
|
2075
|
+
state.tokenToSourceNode(this.tokens.const),
|
|
2076
|
+
' ',
|
|
2077
|
+
state.tokenToSourceNode(this.tokens.name),
|
|
2078
|
+
' ',
|
|
2079
|
+
state.tokenToSourceNode(this.tokens.equals),
|
|
2080
|
+
' ',
|
|
2081
|
+
...this.value.transpile(state)
|
|
2082
|
+
];
|
|
2083
|
+
}
|
|
2084
|
+
walk(visitor, options) {
|
|
2085
|
+
if (this.value && options.walkMode & visitors_1.InternalWalkMode.walkExpressions) {
|
|
2086
|
+
(0, visitors_1.walk)(this, 'value', visitor, options);
|
|
2087
|
+
}
|
|
2088
|
+
}
|
|
2089
|
+
getType(options) {
|
|
2090
|
+
return this.value.getType(options);
|
|
2091
|
+
}
|
|
2092
|
+
}
|
|
2093
|
+
exports.ConstStatement = ConstStatement;
|
|
2094
|
+
class ContinueStatement extends AstNode_2.Statement {
|
|
2095
|
+
constructor(tokens) {
|
|
2096
|
+
super();
|
|
2097
|
+
this.tokens = tokens;
|
|
2098
|
+
this.kind = AstNode_1.AstNodeKind.ContinueStatement;
|
|
2099
|
+
this.range = util_1.util.createBoundingRange(tokens.continue, tokens.loopType);
|
|
2100
|
+
}
|
|
2101
|
+
transpile(state) {
|
|
2102
|
+
var _a, _b, _c, _d, _e;
|
|
2103
|
+
return [
|
|
2104
|
+
state.sourceNode(this.tokens.continue, (_b = (_a = this.tokens.continue) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : 'continue'),
|
|
2105
|
+
(_d = (_c = this.tokens.loopType) === null || _c === void 0 ? void 0 : _c.leadingWhitespace) !== null && _d !== void 0 ? _d : ' ',
|
|
2106
|
+
state.sourceNode(this.tokens.continue, (_e = this.tokens.loopType) === null || _e === void 0 ? void 0 : _e.text)
|
|
2107
|
+
];
|
|
2108
|
+
}
|
|
2109
|
+
walk(visitor, options) {
|
|
2110
|
+
//nothing to walk
|
|
2111
|
+
}
|
|
2112
|
+
}
|
|
2113
|
+
exports.ContinueStatement = ContinueStatement;
|
|
1879
2114
|
//# sourceMappingURL=Statement.js.map
|