brighterscript 1.0.0-alpha.1 → 1.0.0-alpha.13

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