brighterscript 1.0.0-alpha.5 → 1.0.0-alpha.50

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 (715) hide show
  1. package/README.md +76 -138
  2. package/bsconfig.schema.json +121 -5
  3. package/dist/ActionPipeline.d.ts +10 -0
  4. package/dist/ActionPipeline.js +40 -0
  5. package/dist/ActionPipeline.js.map +1 -0
  6. package/dist/AstValidationSegmenter.d.ts +45 -0
  7. package/dist/AstValidationSegmenter.js +322 -0
  8. package/dist/AstValidationSegmenter.js.map +1 -0
  9. package/dist/BsConfig.d.ts +72 -39
  10. package/dist/BusyStatusTracker.d.ts +61 -0
  11. package/dist/BusyStatusTracker.js +148 -0
  12. package/dist/BusyStatusTracker.js.map +1 -0
  13. package/dist/Cache.d.ts +3 -8
  14. package/dist/Cache.js +9 -14
  15. package/dist/Cache.js.map +1 -1
  16. package/dist/CacheVerifier.d.ts +7 -0
  17. package/dist/CacheVerifier.js +20 -0
  18. package/dist/CacheVerifier.js.map +1 -0
  19. package/dist/CodeActionUtil.d.ts +12 -4
  20. package/dist/CodeActionUtil.js +22 -5
  21. package/dist/CodeActionUtil.js.map +1 -1
  22. package/dist/CommentFlagProcessor.d.ts +7 -6
  23. package/dist/CommentFlagProcessor.js +11 -8
  24. package/dist/CommentFlagProcessor.js.map +1 -1
  25. package/dist/CrossScopeValidator.d.ts +68 -0
  26. package/dist/CrossScopeValidator.js +642 -0
  27. package/dist/CrossScopeValidator.js.map +1 -0
  28. package/dist/DependencyGraph.d.ts +8 -3
  29. package/dist/DependencyGraph.js +49 -16
  30. package/dist/DependencyGraph.js.map +1 -1
  31. package/dist/DiagnosticCollection.d.ts +21 -5
  32. package/dist/DiagnosticCollection.js +77 -24
  33. package/dist/DiagnosticCollection.js.map +1 -1
  34. package/dist/DiagnosticFilterer.d.ts +27 -6
  35. package/dist/DiagnosticFilterer.js +273 -60
  36. package/dist/DiagnosticFilterer.js.map +1 -1
  37. package/dist/DiagnosticManager.d.ts +82 -0
  38. package/dist/DiagnosticManager.js +406 -0
  39. package/dist/DiagnosticManager.js.map +1 -0
  40. package/dist/DiagnosticMessages.d.ts +558 -196
  41. package/dist/DiagnosticMessages.js +870 -340
  42. package/dist/DiagnosticMessages.js.map +1 -1
  43. package/dist/DiagnosticSeverityAdjuster.d.ts +7 -0
  44. package/dist/DiagnosticSeverityAdjuster.js +45 -0
  45. package/dist/DiagnosticSeverityAdjuster.js.map +1 -0
  46. package/dist/FunctionScope.d.ts +28 -0
  47. package/dist/FunctionScope.js +52 -0
  48. package/dist/FunctionScope.js.map +1 -0
  49. package/dist/KeyedThrottler.d.ts +3 -3
  50. package/dist/KeyedThrottler.js +3 -3
  51. package/dist/KeyedThrottler.js.map +1 -1
  52. package/dist/LanguageServer.d.ts +100 -105
  53. package/dist/LanguageServer.js +444 -745
  54. package/dist/LanguageServer.js.map +1 -1
  55. package/dist/Logger.d.ts +17 -13
  56. package/dist/Logger.js +64 -34
  57. package/dist/Logger.js.map +1 -1
  58. package/dist/PluginInterface.d.ts +32 -10
  59. package/dist/PluginInterface.js +117 -7
  60. package/dist/PluginInterface.js.map +1 -1
  61. package/dist/Program.d.ts +241 -98
  62. package/dist/Program.js +1432 -717
  63. package/dist/Program.js.map +1 -1
  64. package/dist/ProgramBuilder.d.ts +47 -23
  65. package/dist/ProgramBuilder.js +224 -178
  66. package/dist/ProgramBuilder.js.map +1 -1
  67. package/dist/Scope.d.ts +149 -109
  68. package/dist/Scope.js +557 -550
  69. package/dist/Scope.js.map +1 -1
  70. package/dist/SemanticTokenUtils.js +5 -1
  71. package/dist/SemanticTokenUtils.js.map +1 -1
  72. package/dist/Stopwatch.d.ts +4 -0
  73. package/dist/Stopwatch.js +8 -1
  74. package/dist/Stopwatch.js.map +1 -1
  75. package/dist/SymbolTable.d.ts +136 -24
  76. package/dist/SymbolTable.js +565 -64
  77. package/dist/SymbolTable.js.map +1 -1
  78. package/dist/SymbolTypeFlag.d.ts +9 -0
  79. package/dist/SymbolTypeFlag.js +14 -0
  80. package/dist/SymbolTypeFlag.js.map +1 -0
  81. package/dist/Throttler.d.ts +12 -0
  82. package/dist/Throttler.js +39 -0
  83. package/dist/Throttler.js.map +1 -1
  84. package/dist/Watcher.d.ts +0 -3
  85. package/dist/Watcher.js +0 -3
  86. package/dist/Watcher.js.map +1 -1
  87. package/dist/XmlScope.d.ts +5 -15
  88. package/dist/XmlScope.js +34 -90
  89. package/dist/XmlScope.js.map +1 -1
  90. package/dist/astUtils/CachedLookups.d.ts +50 -0
  91. package/dist/astUtils/CachedLookups.js +334 -0
  92. package/dist/astUtils/CachedLookups.js.map +1 -0
  93. package/dist/astUtils/CachedLookups.spec.js +39 -0
  94. package/dist/astUtils/CachedLookups.spec.js.map +1 -0
  95. package/dist/astUtils/Editor.d.ts +69 -0
  96. package/dist/astUtils/Editor.js +245 -0
  97. package/dist/astUtils/Editor.js.map +1 -0
  98. package/dist/astUtils/Editor.spec.js +258 -0
  99. package/dist/astUtils/Editor.spec.js.map +1 -0
  100. package/dist/astUtils/creators.d.ts +54 -19
  101. package/dist/astUtils/creators.js +242 -42
  102. package/dist/astUtils/creators.js.map +1 -1
  103. package/dist/astUtils/creators.spec.js +5 -5
  104. package/dist/astUtils/creators.spec.js.map +1 -1
  105. package/dist/astUtils/reflection.d.ts +196 -85
  106. package/dist/astUtils/reflection.js +497 -144
  107. package/dist/astUtils/reflection.js.map +1 -1
  108. package/dist/astUtils/reflection.spec.js +267 -167
  109. package/dist/astUtils/reflection.spec.js.map +1 -1
  110. package/dist/astUtils/stackedVisitor.js.map +1 -1
  111. package/dist/astUtils/stackedVisitor.spec.js +14 -14
  112. package/dist/astUtils/stackedVisitor.spec.js.map +1 -1
  113. package/dist/astUtils/visitors.d.ts +116 -53
  114. package/dist/astUtils/visitors.js +95 -15
  115. package/dist/astUtils/visitors.js.map +1 -1
  116. package/dist/astUtils/visitors.spec.js +629 -51
  117. package/dist/astUtils/visitors.spec.js.map +1 -1
  118. package/dist/astUtils/xml.d.ts +9 -8
  119. package/dist/astUtils/xml.js +12 -7
  120. package/dist/astUtils/xml.js.map +1 -1
  121. package/dist/bscPlugin/BscPlugin.d.ts +24 -4
  122. package/dist/bscPlugin/BscPlugin.js +88 -4
  123. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  124. package/dist/bscPlugin/CallExpressionInfo.d.ts +36 -0
  125. package/dist/bscPlugin/CallExpressionInfo.js +143 -0
  126. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -0
  127. package/dist/bscPlugin/FileWriter.d.ts +6 -0
  128. package/dist/bscPlugin/FileWriter.js +24 -0
  129. package/dist/bscPlugin/FileWriter.js.map +1 -0
  130. package/dist/bscPlugin/SignatureHelpUtil.d.ts +10 -0
  131. package/dist/bscPlugin/SignatureHelpUtil.js +137 -0
  132. package/dist/bscPlugin/SignatureHelpUtil.js.map +1 -0
  133. package/dist/bscPlugin/codeActions/CodeActionsProcessor.d.ts +6 -5
  134. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +173 -27
  135. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  136. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +138 -21
  137. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  138. package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +65 -0
  139. package/dist/bscPlugin/completions/CompletionsProcessor.js +633 -0
  140. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -0
  141. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +2512 -0
  142. package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
  143. package/dist/bscPlugin/definition/DefinitionProvider.d.ts +13 -0
  144. package/dist/bscPlugin/definition/DefinitionProvider.js +212 -0
  145. package/dist/bscPlugin/definition/DefinitionProvider.js.map +1 -0
  146. package/dist/bscPlugin/definition/DefinitionProvider.spec.js +87 -0
  147. package/dist/bscPlugin/definition/DefinitionProvider.spec.js.map +1 -0
  148. package/dist/bscPlugin/fileProviders/FileProvider.d.ts +9 -0
  149. package/dist/bscPlugin/fileProviders/FileProvider.js +51 -0
  150. package/dist/bscPlugin/fileProviders/FileProvider.js.map +1 -0
  151. package/dist/bscPlugin/hover/HoverProcessor.d.ts +18 -0
  152. package/dist/bscPlugin/hover/HoverProcessor.js +230 -0
  153. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -0
  154. package/dist/bscPlugin/hover/HoverProcessor.spec.js +991 -0
  155. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -0
  156. package/dist/bscPlugin/references/ReferencesProvider.d.ts +12 -0
  157. package/dist/bscPlugin/references/ReferencesProvider.js +57 -0
  158. package/dist/bscPlugin/references/ReferencesProvider.js.map +1 -0
  159. package/dist/bscPlugin/references/ReferencesProvider.spec.d.ts +1 -0
  160. package/dist/bscPlugin/references/ReferencesProvider.spec.js +51 -0
  161. package/dist/bscPlugin/references/ReferencesProvider.spec.js.map +1 -0
  162. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.d.ts +14 -0
  163. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +164 -0
  164. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -0
  165. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.d.ts +1 -0
  166. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +564 -0
  167. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -0
  168. package/dist/bscPlugin/serialize/BslibInjector.spec.d.ts +1 -0
  169. package/dist/bscPlugin/serialize/BslibInjector.spec.js +33 -0
  170. package/dist/bscPlugin/serialize/BslibInjector.spec.js.map +1 -0
  171. package/dist/bscPlugin/serialize/BslibManager.d.ts +12 -0
  172. package/dist/bscPlugin/serialize/BslibManager.js +46 -0
  173. package/dist/bscPlugin/serialize/BslibManager.js.map +1 -0
  174. package/dist/bscPlugin/serialize/FileSerializer.d.ts +9 -0
  175. package/dist/bscPlugin/serialize/FileSerializer.js +75 -0
  176. package/dist/bscPlugin/serialize/FileSerializer.js.map +1 -0
  177. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.d.ts +7 -0
  178. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js +22 -0
  179. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.js.map +1 -0
  180. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.d.ts +1 -0
  181. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js +291 -0
  182. package/dist/bscPlugin/symbols/DocumentSymbolProcessor.spec.js.map +1 -0
  183. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.d.ts +7 -0
  184. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js +26 -0
  185. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.js.map +1 -0
  186. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.d.ts +1 -0
  187. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js +245 -0
  188. package/dist/bscPlugin/symbols/WorkspaceSymbolProcessor.spec.js.map +1 -0
  189. package/dist/bscPlugin/symbols/symbolUtils.d.ts +5 -0
  190. package/dist/bscPlugin/symbols/symbolUtils.js +141 -0
  191. package/dist/bscPlugin/symbols/symbolUtils.js.map +1 -0
  192. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.d.ts +27 -0
  193. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js +418 -0
  194. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.js.map +1 -0
  195. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.d.ts +1 -0
  196. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js +75 -0
  197. package/dist/bscPlugin/transpile/BrsFileTranspileProcessor.spec.js.map +1 -0
  198. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +12 -0
  199. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +99 -0
  200. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  201. package/dist/bscPlugin/validation/BrsFileAfterValidator.d.ts +7 -0
  202. package/dist/bscPlugin/validation/BrsFileAfterValidator.js +18 -0
  203. package/dist/bscPlugin/validation/BrsFileAfterValidator.js.map +1 -0
  204. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +37 -0
  205. package/dist/bscPlugin/validation/BrsFileValidator.js +638 -0
  206. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -0
  207. package/dist/bscPlugin/validation/BrsFileValidator.spec.d.ts +1 -0
  208. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1517 -0
  209. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -0
  210. package/dist/bscPlugin/validation/ProgramValidator.d.ts +11 -0
  211. package/dist/bscPlugin/validation/ProgramValidator.js +33 -0
  212. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -0
  213. package/dist/bscPlugin/validation/ScopeValidator.d.ts +141 -0
  214. package/dist/bscPlugin/validation/ScopeValidator.js +1323 -0
  215. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -0
  216. package/dist/bscPlugin/validation/ScopeValidator.spec.d.ts +1 -0
  217. package/dist/bscPlugin/validation/ScopeValidator.spec.js +6135 -0
  218. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -0
  219. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  220. package/dist/bscPlugin/validation/XmlFileValidator.js +36 -0
  221. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  222. package/dist/cli.js +126 -27
  223. package/dist/cli.js.map +1 -1
  224. package/dist/common/Sequencer.d.ts +53 -0
  225. package/dist/common/Sequencer.js +233 -0
  226. package/dist/common/Sequencer.js.map +1 -0
  227. package/dist/common/Sequencer.spec.d.ts +1 -0
  228. package/dist/common/Sequencer.spec.js +75 -0
  229. package/dist/common/Sequencer.spec.js.map +1 -0
  230. package/dist/deferred.d.ts +5 -3
  231. package/dist/deferred.js +10 -0
  232. package/dist/deferred.js.map +1 -1
  233. package/dist/diagnosticUtils.d.ts +10 -3
  234. package/dist/diagnosticUtils.js +64 -25
  235. package/dist/diagnosticUtils.js.map +1 -1
  236. package/dist/examples/plugins/removePrint.d.ts +2 -2
  237. package/dist/examples/plugins/removePrint.js +8 -12
  238. package/dist/examples/plugins/removePrint.js.map +1 -1
  239. package/dist/files/AssetFile.d.ts +24 -0
  240. package/dist/files/AssetFile.js +25 -0
  241. package/dist/files/AssetFile.js.map +1 -0
  242. package/dist/files/BrsFile.Class.spec.js +1213 -259
  243. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  244. package/dist/files/BrsFile.d.ts +145 -87
  245. package/dist/files/BrsFile.js +836 -934
  246. package/dist/files/BrsFile.js.map +1 -1
  247. package/dist/files/BrsFile.spec.js +4226 -902
  248. package/dist/files/BrsFile.spec.js.map +1 -1
  249. package/dist/files/BscFile.d.ts +102 -0
  250. package/dist/files/BscFile.js +15 -0
  251. package/dist/files/BscFile.js.map +1 -0
  252. package/dist/files/Factory.d.ts +25 -0
  253. package/dist/files/Factory.js +22 -0
  254. package/dist/files/Factory.js.map +1 -0
  255. package/dist/files/LazyFileData.d.ts +21 -0
  256. package/dist/files/LazyFileData.js +54 -0
  257. package/dist/files/LazyFileData.js.map +1 -0
  258. package/dist/files/LazyFileData.spec.d.ts +1 -0
  259. package/dist/files/LazyFileData.spec.js +27 -0
  260. package/dist/files/LazyFileData.spec.js.map +1 -0
  261. package/dist/files/XmlFile.d.ts +80 -41
  262. package/dist/files/XmlFile.js +161 -137
  263. package/dist/files/XmlFile.js.map +1 -1
  264. package/dist/files/XmlFile.spec.js +444 -336
  265. package/dist/files/XmlFile.spec.js.map +1 -1
  266. package/dist/files/tests/imports.spec.js +62 -52
  267. package/dist/files/tests/imports.spec.js.map +1 -1
  268. package/dist/files/tests/optionalChaning.spec.d.ts +1 -0
  269. package/dist/files/tests/optionalChaning.spec.js +152 -0
  270. package/dist/files/tests/optionalChaning.spec.js.map +1 -0
  271. package/dist/globalCallables.d.ts +3 -1
  272. package/dist/globalCallables.js +424 -184
  273. package/dist/globalCallables.js.map +1 -1
  274. package/dist/index.d.ts +32 -4
  275. package/dist/index.js +54 -7
  276. package/dist/index.js.map +1 -1
  277. package/dist/interfaces.d.ts +942 -125
  278. package/dist/interfaces.js +21 -0
  279. package/dist/interfaces.js.map +1 -1
  280. package/dist/lexer/Character.spec.js +5 -5
  281. package/dist/lexer/Character.spec.js.map +1 -1
  282. package/dist/lexer/Lexer.d.ts +51 -12
  283. package/dist/lexer/Lexer.js +215 -65
  284. package/dist/lexer/Lexer.js.map +1 -1
  285. package/dist/lexer/Lexer.spec.js +812 -568
  286. package/dist/lexer/Lexer.spec.js.map +1 -1
  287. package/dist/lexer/Token.d.ts +27 -11
  288. package/dist/lexer/Token.js +10 -2
  289. package/dist/lexer/Token.js.map +1 -1
  290. package/dist/lexer/TokenKind.d.ts +40 -2
  291. package/dist/lexer/TokenKind.js +147 -10
  292. package/dist/lexer/TokenKind.js.map +1 -1
  293. package/dist/logging.d.ts +14 -0
  294. package/dist/logging.js +29 -0
  295. package/dist/logging.js.map +1 -0
  296. package/dist/lsp/ActionQueue.d.ts +35 -0
  297. package/dist/lsp/ActionQueue.js +115 -0
  298. package/dist/lsp/ActionQueue.js.map +1 -0
  299. package/dist/lsp/ActionQueue.spec.d.ts +1 -0
  300. package/dist/lsp/ActionQueue.spec.js +80 -0
  301. package/dist/lsp/ActionQueue.spec.js.map +1 -0
  302. package/dist/lsp/DocumentManager.d.ts +63 -0
  303. package/dist/lsp/DocumentManager.js +122 -0
  304. package/dist/lsp/DocumentManager.js.map +1 -0
  305. package/dist/lsp/DocumentManager.spec.d.ts +1 -0
  306. package/dist/lsp/DocumentManager.spec.js +103 -0
  307. package/dist/lsp/DocumentManager.spec.js.map +1 -0
  308. package/dist/lsp/LspProject.d.ts +239 -0
  309. package/dist/lsp/LspProject.js +3 -0
  310. package/dist/lsp/LspProject.js.map +1 -0
  311. package/dist/lsp/PathFilterer.d.ts +75 -0
  312. package/dist/lsp/PathFilterer.js +196 -0
  313. package/dist/lsp/PathFilterer.js.map +1 -0
  314. package/dist/lsp/PathFilterer.spec.d.ts +1 -0
  315. package/dist/lsp/PathFilterer.spec.js +182 -0
  316. package/dist/lsp/PathFilterer.spec.js.map +1 -0
  317. package/dist/lsp/Project.d.ts +168 -0
  318. package/dist/lsp/Project.js +437 -0
  319. package/dist/lsp/Project.js.map +1 -0
  320. package/dist/lsp/Project.spec.d.ts +1 -0
  321. package/dist/lsp/Project.spec.js +267 -0
  322. package/dist/lsp/Project.spec.js.map +1 -0
  323. package/dist/lsp/ProjectManager.d.ts +242 -0
  324. package/dist/lsp/ProjectManager.js +824 -0
  325. package/dist/lsp/ProjectManager.js.map +1 -0
  326. package/dist/lsp/ProjectManager.spec.d.ts +1 -0
  327. package/dist/lsp/ProjectManager.spec.js +913 -0
  328. package/dist/lsp/ProjectManager.spec.js.map +1 -0
  329. package/dist/lsp/ReaderWriterManager.d.ts +21 -0
  330. package/dist/lsp/ReaderWriterManager.js +60 -0
  331. package/dist/lsp/ReaderWriterManager.js.map +1 -0
  332. package/dist/lsp/worker/MessageHandler.d.ts +99 -0
  333. package/dist/lsp/worker/MessageHandler.js +138 -0
  334. package/dist/lsp/worker/MessageHandler.js.map +1 -0
  335. package/dist/lsp/worker/MessageHandler.spec.d.ts +1 -0
  336. package/dist/lsp/worker/MessageHandler.spec.js +64 -0
  337. package/dist/lsp/worker/MessageHandler.spec.js.map +1 -0
  338. package/dist/lsp/worker/WorkerPool.d.ts +38 -0
  339. package/dist/lsp/worker/WorkerPool.js +78 -0
  340. package/dist/lsp/worker/WorkerPool.js.map +1 -0
  341. package/dist/lsp/worker/WorkerPool.spec.d.ts +1 -0
  342. package/dist/lsp/worker/WorkerPool.spec.js +59 -0
  343. package/dist/lsp/worker/WorkerPool.spec.js.map +1 -0
  344. package/dist/lsp/worker/WorkerThreadProject.d.ts +143 -0
  345. package/dist/lsp/worker/WorkerThreadProject.js +189 -0
  346. package/dist/lsp/worker/WorkerThreadProject.js.map +1 -0
  347. package/dist/lsp/worker/WorkerThreadProject.spec.d.ts +2 -0
  348. package/dist/lsp/worker/WorkerThreadProject.spec.js +71 -0
  349. package/dist/lsp/worker/WorkerThreadProject.spec.js.map +1 -0
  350. package/dist/lsp/worker/WorkerThreadProjectRunner.d.ts +15 -0
  351. package/dist/lsp/worker/WorkerThreadProjectRunner.js +58 -0
  352. package/dist/lsp/worker/WorkerThreadProjectRunner.js.map +1 -0
  353. package/dist/lsp/worker/run.d.ts +1 -0
  354. package/dist/lsp/worker/run.js +14 -0
  355. package/dist/lsp/worker/run.js.map +1 -0
  356. package/dist/parser/AstNode.d.ts +203 -0
  357. package/dist/parser/AstNode.js +303 -0
  358. package/dist/parser/AstNode.js.map +1 -0
  359. package/dist/parser/AstNode.spec.d.ts +1 -0
  360. package/dist/parser/AstNode.spec.js +1455 -0
  361. package/dist/parser/AstNode.spec.js.map +1 -0
  362. package/dist/parser/BrightScriptDocParser.d.ts +56 -0
  363. package/dist/parser/BrightScriptDocParser.js +294 -0
  364. package/dist/parser/BrightScriptDocParser.js.map +1 -0
  365. package/dist/parser/BrightScriptDocParser.spec.d.ts +1 -0
  366. package/dist/parser/BrightScriptDocParser.spec.js +310 -0
  367. package/dist/parser/BrightScriptDocParser.spec.js.map +1 -0
  368. package/dist/parser/BrsTranspileState.d.ts +22 -3
  369. package/dist/parser/BrsTranspileState.js +19 -0
  370. package/dist/parser/BrsTranspileState.js.map +1 -1
  371. package/dist/parser/Expression.d.ts +553 -221
  372. package/dist/parser/Expression.js +1414 -505
  373. package/dist/parser/Expression.js.map +1 -1
  374. package/dist/parser/Expression.spec.d.ts +1 -0
  375. package/dist/parser/Expression.spec.js +40 -0
  376. package/dist/parser/Expression.spec.js.map +1 -0
  377. package/dist/parser/Parser.Class.spec.js +255 -125
  378. package/dist/parser/Parser.Class.spec.js.map +1 -1
  379. package/dist/parser/Parser.d.ts +117 -124
  380. package/dist/parser/Parser.js +1669 -982
  381. package/dist/parser/Parser.js.map +1 -1
  382. package/dist/parser/Parser.spec.d.ts +3 -1
  383. package/dist/parser/Parser.spec.js +2111 -525
  384. package/dist/parser/Parser.spec.js.map +1 -1
  385. package/dist/parser/SGParser.d.ts +29 -13
  386. package/dist/parser/SGParser.js +85 -56
  387. package/dist/parser/SGParser.js.map +1 -1
  388. package/dist/parser/SGParser.spec.js +30 -45
  389. package/dist/parser/SGParser.spec.js.map +1 -1
  390. package/dist/parser/SGTypes.d.ts +134 -46
  391. package/dist/parser/SGTypes.js +206 -115
  392. package/dist/parser/SGTypes.js.map +1 -1
  393. package/dist/parser/Statement.d.ts +849 -267
  394. package/dist/parser/Statement.js +2412 -625
  395. package/dist/parser/Statement.js.map +1 -1
  396. package/dist/parser/Statement.spec.js +133 -36
  397. package/dist/parser/Statement.spec.js.map +1 -1
  398. package/dist/parser/TranspileState.d.ts +26 -12
  399. package/dist/parser/TranspileState.js +115 -24
  400. package/dist/parser/TranspileState.js.map +1 -1
  401. package/dist/parser/tests/Parser.spec.d.ts +3 -9
  402. package/dist/parser/tests/Parser.spec.js +7 -13
  403. package/dist/parser/tests/Parser.spec.js.map +1 -1
  404. package/dist/parser/tests/controlFlow/For.spec.js +83 -75
  405. package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
  406. package/dist/parser/tests/controlFlow/ForEach.spec.js +85 -51
  407. package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
  408. package/dist/parser/tests/controlFlow/If.spec.js +382 -239
  409. package/dist/parser/tests/controlFlow/If.spec.js.map +1 -1
  410. package/dist/parser/tests/controlFlow/While.spec.js +52 -45
  411. package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
  412. package/dist/parser/tests/expression/Additive.spec.js +51 -43
  413. package/dist/parser/tests/expression/Additive.spec.js.map +1 -1
  414. package/dist/parser/tests/expression/ArrayLiterals.spec.js +192 -142
  415. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  416. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +236 -160
  417. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  418. package/dist/parser/tests/expression/Boolean.spec.js +41 -34
  419. package/dist/parser/tests/expression/Boolean.spec.js.map +1 -1
  420. package/dist/parser/tests/expression/Call.spec.js +173 -55
  421. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  422. package/dist/parser/tests/expression/Exponential.spec.js +20 -20
  423. package/dist/parser/tests/expression/Exponential.spec.js.map +1 -1
  424. package/dist/parser/tests/expression/Function.spec.js +291 -282
  425. package/dist/parser/tests/expression/Function.spec.js.map +1 -1
  426. package/dist/parser/tests/expression/Indexing.spec.js +193 -110
  427. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  428. package/dist/parser/tests/expression/Multiplicative.spec.js +42 -42
  429. package/dist/parser/tests/expression/Multiplicative.spec.js.map +1 -1
  430. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +260 -115
  431. package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
  432. package/dist/parser/tests/expression/PrefixUnary.spec.js +58 -52
  433. package/dist/parser/tests/expression/PrefixUnary.spec.js.map +1 -1
  434. package/dist/parser/tests/expression/Primary.spec.js +76 -60
  435. package/dist/parser/tests/expression/Primary.spec.js.map +1 -1
  436. package/dist/parser/tests/expression/RegexLiteralExpression.spec.d.ts +1 -0
  437. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js +171 -0
  438. package/dist/parser/tests/expression/RegexLiteralExpression.spec.js.map +1 -0
  439. package/dist/parser/tests/expression/Relational.spec.js +50 -50
  440. package/dist/parser/tests/expression/Relational.spec.js.map +1 -1
  441. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js +31 -31
  442. package/dist/parser/tests/expression/SourceLiteralExpression.spec.js.map +1 -1
  443. package/dist/parser/tests/expression/TemplateStringExpression.spec.js +281 -94
  444. package/dist/parser/tests/expression/TemplateStringExpression.spec.js.map +1 -1
  445. package/dist/parser/tests/expression/TernaryExpression.spec.js +747 -192
  446. package/dist/parser/tests/expression/TernaryExpression.spec.js.map +1 -1
  447. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  448. package/dist/parser/tests/expression/TypeExpression.spec.js +126 -0
  449. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  450. package/dist/parser/tests/expression/UnaryExpression.spec.d.ts +1 -0
  451. package/dist/parser/tests/expression/UnaryExpression.spec.js +52 -0
  452. package/dist/parser/tests/expression/UnaryExpression.spec.js.map +1 -0
  453. package/dist/parser/tests/statement/AssignmentOperators.spec.js +44 -44
  454. package/dist/parser/tests/statement/AssignmentOperators.spec.js.map +1 -1
  455. package/dist/parser/tests/statement/ConstStatement.spec.d.ts +1 -0
  456. package/dist/parser/tests/statement/ConstStatement.spec.js +500 -0
  457. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -0
  458. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  459. package/dist/parser/tests/statement/Continue.spec.js +119 -0
  460. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  461. package/dist/parser/tests/statement/Declaration.spec.js +61 -55
  462. package/dist/parser/tests/statement/Declaration.spec.js.map +1 -1
  463. package/dist/parser/tests/statement/Dim.spec.js +29 -22
  464. package/dist/parser/tests/statement/Dim.spec.js.map +1 -1
  465. package/dist/parser/tests/statement/Enum.spec.d.ts +1 -0
  466. package/dist/parser/tests/statement/Enum.spec.js +744 -0
  467. package/dist/parser/tests/statement/Enum.spec.js.map +1 -0
  468. package/dist/parser/tests/statement/For.spec.d.ts +1 -0
  469. package/dist/parser/tests/statement/For.spec.js +45 -0
  470. package/dist/parser/tests/statement/For.spec.js.map +1 -0
  471. package/dist/parser/tests/statement/ForEach.spec.d.ts +1 -0
  472. package/dist/parser/tests/statement/ForEach.spec.js +36 -0
  473. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -0
  474. package/dist/parser/tests/statement/Function.spec.js +226 -215
  475. package/dist/parser/tests/statement/Function.spec.js.map +1 -1
  476. package/dist/parser/tests/statement/Goto.spec.js +16 -15
  477. package/dist/parser/tests/statement/Goto.spec.js.map +1 -1
  478. package/dist/parser/tests/statement/Increment.spec.js +64 -61
  479. package/dist/parser/tests/statement/Increment.spec.js.map +1 -1
  480. package/dist/parser/tests/statement/InterfaceStatement.spec.d.ts +1 -0
  481. package/dist/parser/tests/statement/InterfaceStatement.spec.js +110 -0
  482. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -0
  483. package/dist/parser/tests/statement/LibraryStatement.spec.js +22 -22
  484. package/dist/parser/tests/statement/LibraryStatement.spec.js.map +1 -1
  485. package/dist/parser/tests/statement/Misc.spec.js +127 -168
  486. package/dist/parser/tests/statement/Misc.spec.js.map +1 -1
  487. package/dist/parser/tests/statement/PrintStatement.spec.js +133 -114
  488. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  489. package/dist/parser/tests/statement/ReturnStatement.spec.js +57 -54
  490. package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
  491. package/dist/parser/tests/statement/Set.spec.js +131 -117
  492. package/dist/parser/tests/statement/Set.spec.js.map +1 -1
  493. package/dist/parser/tests/statement/Stop.spec.js +14 -13
  494. package/dist/parser/tests/statement/Stop.spec.js.map +1 -1
  495. package/dist/parser/tests/statement/Throw.spec.js +11 -8
  496. package/dist/parser/tests/statement/Throw.spec.js.map +1 -1
  497. package/dist/parser/tests/statement/TryCatch.spec.js +26 -15
  498. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  499. package/dist/preprocessor/Manifest.d.ts +6 -6
  500. package/dist/preprocessor/Manifest.js +17 -38
  501. package/dist/preprocessor/Manifest.js.map +1 -1
  502. package/dist/preprocessor/Manifest.spec.d.ts +1 -0
  503. package/dist/preprocessor/Manifest.spec.js +78 -103
  504. package/dist/preprocessor/Manifest.spec.js.map +1 -1
  505. package/dist/roku-types/data.json +20347 -0
  506. package/dist/roku-types/index.d.ts +5726 -0
  507. package/dist/roku-types/index.js +11 -0
  508. package/dist/roku-types/index.js.map +1 -0
  509. package/dist/types/ArrayType.d.ts +12 -5
  510. package/dist/types/ArrayType.js +89 -24
  511. package/dist/types/ArrayType.js.map +1 -1
  512. package/dist/types/ArrayType.spec.js +39 -11
  513. package/dist/types/ArrayType.spec.js.map +1 -1
  514. package/dist/types/AssociativeArrayType.d.ts +15 -0
  515. package/dist/types/AssociativeArrayType.js +64 -0
  516. package/dist/types/AssociativeArrayType.js.map +1 -0
  517. package/dist/types/BaseFunctionType.d.ts +10 -0
  518. package/dist/types/BaseFunctionType.js +26 -0
  519. package/dist/types/BaseFunctionType.js.map +1 -0
  520. package/dist/types/BooleanType.d.ts +9 -5
  521. package/dist/types/BooleanType.js +19 -8
  522. package/dist/types/BooleanType.js.map +1 -1
  523. package/dist/types/BooleanType.spec.js +10 -4
  524. package/dist/types/BooleanType.spec.js.map +1 -1
  525. package/dist/types/BscType.d.ts +41 -3
  526. package/dist/types/BscType.js +152 -0
  527. package/dist/types/BscType.js.map +1 -1
  528. package/dist/types/BscTypeKind.d.ts +28 -0
  529. package/dist/types/BscTypeKind.js +33 -0
  530. package/dist/types/BscTypeKind.js.map +1 -0
  531. package/dist/types/BuiltInInterfaceAdder.d.ts +28 -0
  532. package/dist/types/BuiltInInterfaceAdder.js +212 -0
  533. package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
  534. package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
  535. package/dist/types/BuiltInInterfaceAdder.spec.js +115 -0
  536. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
  537. package/dist/types/CallFuncableType.d.ts +24 -0
  538. package/dist/types/CallFuncableType.js +91 -0
  539. package/dist/types/CallFuncableType.js.map +1 -0
  540. package/dist/types/ClassType.d.ts +17 -0
  541. package/dist/types/ClassType.js +60 -0
  542. package/dist/types/ClassType.js.map +1 -0
  543. package/dist/types/ClassType.spec.d.ts +1 -0
  544. package/dist/types/ClassType.spec.js +76 -0
  545. package/dist/types/ClassType.spec.js.map +1 -0
  546. package/dist/types/ComponentType.d.ts +22 -0
  547. package/dist/types/ComponentType.js +107 -0
  548. package/dist/types/ComponentType.js.map +1 -0
  549. package/dist/types/DoubleType.d.ts +10 -5
  550. package/dist/types/DoubleType.js +21 -17
  551. package/dist/types/DoubleType.js.map +1 -1
  552. package/dist/types/DoubleType.spec.js +12 -4
  553. package/dist/types/DoubleType.spec.js.map +1 -1
  554. package/dist/types/DynamicType.d.ts +13 -5
  555. package/dist/types/DynamicType.js +26 -5
  556. package/dist/types/DynamicType.js.map +1 -1
  557. package/dist/types/DynamicType.spec.js +16 -5
  558. package/dist/types/DynamicType.spec.js.map +1 -1
  559. package/dist/types/EnumType.d.ts +42 -0
  560. package/dist/types/EnumType.js +98 -0
  561. package/dist/types/EnumType.js.map +1 -0
  562. package/dist/types/EnumType.spec.d.ts +1 -0
  563. package/dist/types/EnumType.spec.js +33 -0
  564. package/dist/types/EnumType.spec.js.map +1 -0
  565. package/dist/types/FloatType.d.ts +10 -5
  566. package/dist/types/FloatType.js +21 -17
  567. package/dist/types/FloatType.js.map +1 -1
  568. package/dist/types/FloatType.spec.js +4 -4
  569. package/dist/types/FloatType.spec.js.map +1 -1
  570. package/dist/types/FunctionType.d.ts +8 -22
  571. package/dist/types/FunctionType.js +25 -63
  572. package/dist/types/FunctionType.js.map +1 -1
  573. package/dist/types/InheritableType.d.ts +29 -0
  574. package/dist/types/InheritableType.js +173 -0
  575. package/dist/types/InheritableType.js.map +1 -0
  576. package/dist/types/InlineInterfaceType.d.ts +5 -0
  577. package/dist/types/InlineInterfaceType.js +17 -0
  578. package/dist/types/InlineInterfaceType.js.map +1 -0
  579. package/dist/types/IntegerType.d.ts +10 -5
  580. package/dist/types/IntegerType.js +21 -17
  581. package/dist/types/IntegerType.js.map +1 -1
  582. package/dist/types/IntegerType.spec.js +8 -4
  583. package/dist/types/IntegerType.spec.js.map +1 -1
  584. package/dist/types/InterfaceType.d.ts +14 -6
  585. package/dist/types/InterfaceType.js +30 -15
  586. package/dist/types/InterfaceType.js.map +1 -1
  587. package/dist/types/InterfaceType.spec.d.ts +1 -0
  588. package/dist/types/InterfaceType.spec.js +227 -0
  589. package/dist/types/InterfaceType.spec.js.map +1 -0
  590. package/dist/types/IntersectionType.d.ts +29 -0
  591. package/dist/types/IntersectionType.js +253 -0
  592. package/dist/types/IntersectionType.js.map +1 -0
  593. package/dist/types/IntersectionType.spec.d.ts +1 -0
  594. package/dist/types/IntersectionType.spec.js +150 -0
  595. package/dist/types/IntersectionType.spec.js.map +1 -0
  596. package/dist/types/InvalidType.d.ts +10 -5
  597. package/dist/types/InvalidType.js +21 -9
  598. package/dist/types/InvalidType.js.map +1 -1
  599. package/dist/types/InvalidType.spec.js +8 -4
  600. package/dist/types/InvalidType.spec.js.map +1 -1
  601. package/dist/types/LongIntegerType.d.ts +10 -5
  602. package/dist/types/LongIntegerType.js +21 -17
  603. package/dist/types/LongIntegerType.js.map +1 -1
  604. package/dist/types/LongIntegerType.spec.js +10 -4
  605. package/dist/types/LongIntegerType.spec.js.map +1 -1
  606. package/dist/types/NamespaceType.d.ts +12 -0
  607. package/dist/types/NamespaceType.js +28 -0
  608. package/dist/types/NamespaceType.js.map +1 -0
  609. package/dist/types/ObjectType.d.ts +12 -5
  610. package/dist/types/ObjectType.js +25 -8
  611. package/dist/types/ObjectType.js.map +1 -1
  612. package/dist/types/ObjectType.spec.js +3 -3
  613. package/dist/types/ObjectType.spec.js.map +1 -1
  614. package/dist/types/ReferenceType.d.ts +123 -0
  615. package/dist/types/ReferenceType.js +720 -0
  616. package/dist/types/ReferenceType.js.map +1 -0
  617. package/dist/types/ReferenceType.spec.d.ts +1 -0
  618. package/dist/types/ReferenceType.spec.js +151 -0
  619. package/dist/types/ReferenceType.spec.js.map +1 -0
  620. package/dist/types/StringType.d.ts +12 -5
  621. package/dist/types/StringType.js +23 -8
  622. package/dist/types/StringType.js.map +1 -1
  623. package/dist/types/StringType.spec.js +3 -3
  624. package/dist/types/StringType.spec.js.map +1 -1
  625. package/dist/types/TypeStatementType.d.ts +18 -0
  626. package/dist/types/TypeStatementType.js +45 -0
  627. package/dist/types/TypeStatementType.js.map +1 -0
  628. package/dist/types/TypedFunctionType.d.ts +34 -0
  629. package/dist/types/TypedFunctionType.js +147 -0
  630. package/dist/types/TypedFunctionType.js.map +1 -0
  631. package/dist/types/TypedFunctionType.spec.d.ts +1 -0
  632. package/dist/types/TypedFunctionType.spec.js +122 -0
  633. package/dist/types/TypedFunctionType.spec.js.map +1 -0
  634. package/dist/types/UninitializedType.d.ts +11 -6
  635. package/dist/types/UninitializedType.js +20 -11
  636. package/dist/types/UninitializedType.js.map +1 -1
  637. package/dist/types/UnionType.d.ts +27 -0
  638. package/dist/types/UnionType.js +193 -0
  639. package/dist/types/UnionType.js.map +1 -0
  640. package/dist/types/UnionType.spec.d.ts +1 -0
  641. package/dist/types/UnionType.spec.js +205 -0
  642. package/dist/types/UnionType.spec.js.map +1 -0
  643. package/dist/types/VoidType.d.ts +11 -5
  644. package/dist/types/VoidType.js +22 -8
  645. package/dist/types/VoidType.js.map +1 -1
  646. package/dist/types/VoidType.spec.js +3 -3
  647. package/dist/types/VoidType.spec.js.map +1 -1
  648. package/dist/types/helper.spec.d.ts +1 -0
  649. package/dist/types/helper.spec.js +174 -0
  650. package/dist/types/helper.spec.js.map +1 -0
  651. package/dist/types/helpers.d.ts +51 -0
  652. package/dist/types/helpers.js +323 -0
  653. package/dist/types/helpers.js.map +1 -0
  654. package/dist/types/index.d.ts +22 -0
  655. package/dist/types/index.js +39 -0
  656. package/dist/types/index.js.map +1 -0
  657. package/dist/types/roFunctionType.d.ts +11 -0
  658. package/dist/types/roFunctionType.js +37 -0
  659. package/dist/types/roFunctionType.js.map +1 -0
  660. package/dist/types/roFunctionType.spec.d.ts +1 -0
  661. package/dist/types/roFunctionType.spec.js +20 -0
  662. package/dist/types/roFunctionType.spec.js.map +1 -0
  663. package/dist/util.d.ts +288 -187
  664. package/dist/util.js +2018 -575
  665. package/dist/util.js.map +1 -1
  666. package/dist/validators/ClassValidator.d.ts +9 -15
  667. package/dist/validators/ClassValidator.js +93 -138
  668. package/dist/validators/ClassValidator.js.map +1 -1
  669. package/package.json +185 -138
  670. package/CHANGELOG.md +0 -1188
  671. package/dist/astUtils/index.d.ts +0 -7
  672. package/dist/astUtils/index.js +0 -26
  673. package/dist/astUtils/index.js.map +0 -1
  674. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.d.ts +0 -7
  675. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js +0 -63
  676. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.js.map +0 -1
  677. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js +0 -45
  678. package/dist/bscPlugin/semanticTokens/SemanticTokensProcessor.spec.js.map +0 -1
  679. package/dist/lexer/index.d.ts +0 -3
  680. package/dist/lexer/index.js +0 -17
  681. package/dist/lexer/index.js.map +0 -1
  682. package/dist/parser/SGTypes.spec.js +0 -351
  683. package/dist/parser/SGTypes.spec.js.map +0 -1
  684. package/dist/parser/index.d.ts +0 -3
  685. package/dist/parser/index.js +0 -16
  686. package/dist/parser/index.js.map +0 -1
  687. package/dist/preprocessor/Chunk.d.ts +0 -82
  688. package/dist/preprocessor/Chunk.js +0 -77
  689. package/dist/preprocessor/Chunk.js.map +0 -1
  690. package/dist/preprocessor/Preprocessor.d.ts +0 -60
  691. package/dist/preprocessor/Preprocessor.js +0 -156
  692. package/dist/preprocessor/Preprocessor.js.map +0 -1
  693. package/dist/preprocessor/Preprocessor.spec.js +0 -152
  694. package/dist/preprocessor/Preprocessor.spec.js.map +0 -1
  695. package/dist/preprocessor/PreprocessorParser.d.ts +0 -61
  696. package/dist/preprocessor/PreprocessorParser.js +0 -194
  697. package/dist/preprocessor/PreprocessorParser.js.map +0 -1
  698. package/dist/preprocessor/PreprocessorParser.spec.js +0 -116
  699. package/dist/preprocessor/PreprocessorParser.spec.js.map +0 -1
  700. package/dist/preprocessor/index.d.ts +0 -3
  701. package/dist/preprocessor/index.js +0 -16
  702. package/dist/preprocessor/index.js.map +0 -1
  703. package/dist/types/CustomType.d.ts +0 -10
  704. package/dist/types/CustomType.js +0 -35
  705. package/dist/types/CustomType.js.map +0 -1
  706. package/dist/types/FunctionType.spec.js +0 -29
  707. package/dist/types/FunctionType.spec.js.map +0 -1
  708. package/dist/types/LazyType.d.ts +0 -15
  709. package/dist/types/LazyType.js +0 -32
  710. package/dist/types/LazyType.js.map +0 -1
  711. /package/dist/{bscPlugin/semanticTokens/SemanticTokensProcessor.spec.d.ts → astUtils/CachedLookups.spec.d.ts} +0 -0
  712. /package/dist/{parser/SGTypes.spec.d.ts → astUtils/Editor.spec.d.ts} +0 -0
  713. /package/dist/{preprocessor/Preprocessor.spec.d.ts → bscPlugin/completions/CompletionsProcessor.spec.d.ts} +0 -0
  714. /package/dist/{preprocessor/PreprocessorParser.spec.d.ts → bscPlugin/definition/DefinitionProvider.spec.d.ts} +0 -0
  715. /package/dist/{types/FunctionType.spec.d.ts → bscPlugin/hover/HoverProcessor.spec.d.ts} +0 -0
@@ -1,130 +1,631 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SymbolTable = void 0;
4
- const DynamicType_1 = require("./types/DynamicType");
5
- const UninitializedType_1 = require("./types/UninitializedType");
4
+ const CacheVerifier_1 = require("./CacheVerifier");
5
+ const helpers_1 = require("./types/helpers");
6
+ const reflection_1 = require("./astUtils/reflection");
6
7
  /**
7
8
  * Stores the types associated with variables and functions in the Brighterscript code
8
9
  * Can be part of a hierarchy, so lookups can reference parent scopes
9
10
  */
10
11
  class SymbolTable {
11
- constructor(parent) {
12
- this.parent = parent;
12
+ constructor(name, parentProvider) {
13
+ this.name = name;
13
14
  /**
14
15
  * The map of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
15
16
  * Indexed by lower symbol name
16
17
  */
17
18
  this.symbolMap = new Map();
19
+ this.parentProviders = [];
20
+ this.siblings = new Set();
21
+ /**
22
+ * Does the order of symbols in this symbol table matter?
23
+ * Normally, this would only be for symbol tables referencing symbols declared within a function
24
+ */
25
+ this.isOrdered = false;
26
+ this.pocketTables = new Array();
27
+ this.isPocketTable = false;
28
+ this.complementsTables = new Set();
29
+ this.cachedCircularReferenceCheck = null;
30
+ this.resetTypeCache();
31
+ if (parentProvider) {
32
+ this.pushParentProvider(parentProvider);
33
+ }
18
34
  }
19
35
  /**
20
- * Get list of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
36
+ * Push a function that will provide a parent SymbolTable when requested
21
37
  */
22
- get ownSymbols() {
23
- return [].concat(...this.symbolMap.values());
38
+ pushParentProvider(provider) {
39
+ this.cachedCircularReferenceCheck = null;
40
+ this.parentProviders.push(provider);
41
+ return () => {
42
+ this.popParentProvider();
43
+ };
24
44
  }
25
45
  /**
26
- * Sets the parent table for lookups
27
- *
28
- * @param [parent]
46
+ * Pop the current parentProvider
29
47
  */
30
- setParent(parent) {
31
- this.parent = parent;
48
+ popParentProvider() {
49
+ this.cachedCircularReferenceCheck = null;
50
+ this.parentProviders.pop();
51
+ }
52
+ /**
53
+ * The parent SymbolTable (if there is one)
54
+ */
55
+ get parent() {
56
+ var _a, _b;
57
+ return (_b = (_a = this.parentProviders)[this.parentProviders.length - 1]) === null || _b === void 0 ? void 0 : _b.call(_a);
58
+ }
59
+ /**
60
+ * Add a sibling symbol table (which will be inspected first before walking upward to the parent
61
+ */
62
+ addSibling(sibling) {
63
+ this.siblings.add(sibling);
64
+ return () => {
65
+ this.siblings.delete(sibling);
66
+ };
67
+ }
68
+ /**
69
+ * Remove a sibling symbol table
70
+ */
71
+ removeSibling(sibling) {
72
+ this.siblings.delete(sibling);
73
+ }
74
+ addPocketTable(pocketTable) {
75
+ pocketTable.table.isPocketTable = true;
76
+ this.pocketTables.push(pocketTable);
77
+ return () => {
78
+ const index = this.pocketTables.findIndex(pt => pt === pocketTable);
79
+ if (index >= 0) {
80
+ this.pocketTables.splice(index, 1);
81
+ }
82
+ };
83
+ }
84
+ getCurrentPocketTableDepth() {
85
+ let depth = 0;
86
+ let currentTable = this;
87
+ while (currentTable.isPocketTable) {
88
+ depth++;
89
+ currentTable = currentTable.parent;
90
+ }
91
+ return depth;
92
+ }
93
+ getStatementIndexOfPocketTable(symbolTable) {
94
+ var _a, _b;
95
+ return (_b = (_a = this.pocketTables.find(pt => pt.table === symbolTable)) === null || _a === void 0 ? void 0 : _a.index) !== null && _b !== void 0 ? _b : -1;
96
+ }
97
+ /**
98
+ * This table complements this other table
99
+ * Eg. This is an else branch, it complements a then branch
100
+ */
101
+ complementOtherTable(otherTable) {
102
+ this.complementsTables.add(otherTable);
103
+ }
104
+ clearSymbols() {
105
+ this.symbolMap.clear();
32
106
  }
33
107
  /**
34
108
  * Checks if the symbol table contains the given symbol by name
35
109
  * If the identifier is not in this table, it will check the parent
36
110
  *
37
111
  * @param name the name to lookup
38
- * @param searchParent should we look to our parent if we don't have the symbol?
112
+ * @param bitFlags flags to match (See SymbolTypeFlags)
39
113
  * @returns true if this symbol is in the symbol table
40
114
  */
41
- hasSymbol(name, searchParent = true) {
42
- var _a;
43
- const key = name.toLowerCase();
44
- let result = this.symbolMap.has(key);
45
- if (!result && searchParent) {
46
- result = !!((_a = this.parent) === null || _a === void 0 ? void 0 : _a.hasSymbol(key));
47
- }
48
- return result;
115
+ hasSymbol(name, bitFlags) {
116
+ let currentTable = this;
117
+ const key = name === null || name === void 0 ? void 0 : name.toLowerCase();
118
+ let result;
119
+ do {
120
+ // look in our map first
121
+ if ((result = currentTable.symbolMap.get(key))) {
122
+ // eslint-disable-next-line no-bitwise
123
+ if (result.find(symbol => symbol.flags & bitFlags)) {
124
+ return true;
125
+ }
126
+ }
127
+ //look in pocket tables
128
+ for (let pocket of this.pocketTables) {
129
+ if ((result = pocket.table.symbolMap.get(key))) {
130
+ // eslint-disable-next-line no-bitwise
131
+ if (result.find(symbol => symbol.flags & bitFlags)) {
132
+ return true;
133
+ }
134
+ }
135
+ }
136
+ if ((result = currentTable.symbolMap.get(key))) {
137
+ // eslint-disable-next-line no-bitwise
138
+ if (result.find(symbol => symbol.flags & bitFlags)) {
139
+ return true;
140
+ }
141
+ }
142
+ //look through any sibling maps next
143
+ for (let sibling of currentTable.siblings) {
144
+ if ((result = sibling.symbolMap.get(key))) {
145
+ // eslint-disable-next-line no-bitwise
146
+ if (result.find(symbol => symbol.flags & bitFlags)) {
147
+ return true;
148
+ }
149
+ }
150
+ }
151
+ currentTable = currentTable.parent;
152
+ } while (currentTable);
153
+ return false;
49
154
  }
50
155
  /**
51
156
  * Gets the name/type pair for a given named variable or function name
52
157
  * If the identifier is not in this table, it will check the parent
53
158
  *
54
159
  * @param name the name to lookup
55
- * @param searchParent should we look to our parent if we don't have the symbol?
160
+ * @param bitFlags flags to match
56
161
  * @returns An array of BscSymbols - one for each time this symbol had a type implicitly defined
57
162
  */
58
- getSymbol(name, searchParent = true) {
163
+ getSymbol(name, bitFlags, additionalOptions = {}) {
164
+ var _a, _b, _c, _d;
165
+ let currentTable = this;
166
+ let previousTable;
167
+ const key = name === null || name === void 0 ? void 0 : name.toLowerCase();
168
+ let result;
169
+ let memberOfAncestor = false;
170
+ const addAncestorInfo = (symbol) => (Object.assign(Object.assign({}, symbol), { data: Object.assign(Object.assign({}, symbol.data), { memberOfAncestor: memberOfAncestor }) }));
171
+ let maxStatementIndex = Number.isInteger(additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.maxStatementIndex) ? additionalOptions.maxStatementIndex : Number.MAX_SAFE_INTEGER;
172
+ do {
173
+ if (previousTable) {
174
+ maxStatementIndex = currentTable.isOrdered ? currentTable.getStatementIndexOfPocketTable(previousTable) : Number.MAX_SAFE_INTEGER;
175
+ }
176
+ // look in our map first
177
+ let currentResults = currentTable.symbolMap.get(key);
178
+ if (currentResults) {
179
+ // eslint-disable-next-line no-bitwise
180
+ currentResults = currentResults.filter(symbol => symbol.flags & bitFlags)
181
+ .filter(this.getSymbolLookupFilter(currentTable, maxStatementIndex, memberOfAncestor));
182
+ }
183
+ let precedingAssignmentIndex = -1;
184
+ if ((currentResults === null || currentResults === void 0 ? void 0 : currentResults.length) > 0 && currentTable.isOrdered && maxStatementIndex >= 0) {
185
+ this.sortSymbolsByAssignmentOrderInPlace(currentResults);
186
+ const lastResult = currentResults[currentResults.length - 1];
187
+ currentResults = [lastResult];
188
+ precedingAssignmentIndex = (_c = (_b = (_a = lastResult.data) === null || _a === void 0 ? void 0 : _a.definingNode) === null || _b === void 0 ? void 0 : _b.statementIndex) !== null && _c !== void 0 ? _c : -1;
189
+ }
190
+ if ((result === null || result === void 0 ? void 0 : result.length) > 0) {
191
+ // we already have results from a deeper pocketTable
192
+ if ((currentResults === null || currentResults === void 0 ? void 0 : currentResults.length) > 0) {
193
+ result.push(...currentResults);
194
+ }
195
+ }
196
+ else if ((currentResults === null || currentResults === void 0 ? void 0 : currentResults.length) > 0) {
197
+ result = currentResults;
198
+ }
199
+ let depth = (_d = additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.depth) !== null && _d !== void 0 ? _d : currentTable.getCurrentPocketTableDepth();
200
+ const augmentationResult = currentTable.augmentSymbolResultsWithPocketTableResults(name, bitFlags, result, Object.assign(Object.assign({}, additionalOptions), { depth: depth, maxStatementIndex: maxStatementIndex, precedingAssignmentIndex: precedingAssignmentIndex }));
201
+ result = augmentationResult.symbols;
202
+ const needCheckParent = (!augmentationResult.exhaustive && depth > 0);
203
+ if ((result === null || result === void 0 ? void 0 : result.length) > 0 && !needCheckParent) {
204
+ result = result.map(addAncestorInfo);
205
+ break;
206
+ }
207
+ if (additionalOptions === null || additionalOptions === void 0 ? void 0 : additionalOptions.ignoreParentsAndSiblings) {
208
+ break;
209
+ }
210
+ //look through any sibling maps next
211
+ for (let sibling of currentTable.siblings) {
212
+ result = sibling.getSymbol(key, bitFlags);
213
+ if ((result === null || result === void 0 ? void 0 : result.length) > 0) {
214
+ return result.map(addAncestorInfo);
215
+ }
216
+ }
217
+ previousTable = currentTable;
218
+ currentTable = currentTable.parent;
219
+ memberOfAncestor = true;
220
+ } while (currentTable);
221
+ return result;
222
+ }
223
+ augmentSymbolResultsWithPocketTableResults(name, bitFlags, result, additionalOptions = {}) {
224
+ var _a, _b;
225
+ let pocketTableResults = [];
226
+ let pocketTablesWeFoundSomethingIn = this.getSymbolDataFromPocketTables(name, bitFlags, additionalOptions);
227
+ let pocketTablesAreExhaustive = false;
228
+ const depth = (_a = additionalOptions.depth) !== null && _a !== void 0 ? _a : 0;
229
+ for (let i = 0; i < pocketTablesWeFoundSomethingIn.length; i++) {
230
+ let tableData = pocketTablesWeFoundSomethingIn[i];
231
+ let pocketTable = tableData.pocketTable;
232
+ pocketTableResults.push(...tableData.results);
233
+ if (pocketTable.willAlwaysBeExecuted) {
234
+ // remove all results before this
235
+ pocketTableResults = [...tableData.results];
236
+ pocketTablesAreExhaustive = true;
237
+ }
238
+ if (i === 0) {
239
+ continue;
240
+ }
241
+ if (((_b = pocketTable.table.complementsTables) === null || _b === void 0 ? void 0 : _b.size) > 0) {
242
+ let tableSatisfied = true;
243
+ let allPossibleSatisfiedResults = [];
244
+ // need to check if all tables this complements are satisfied
245
+ for (const otherTable of pocketTable.table.complementsTables) {
246
+ const foundTableData = pocketTablesWeFoundSomethingIn.find((ptd => {
247
+ return otherTable === ptd.pocketTable.table;
248
+ }));
249
+ if (foundTableData) {
250
+ allPossibleSatisfiedResults.push(...foundTableData.results);
251
+ }
252
+ else {
253
+ tableSatisfied = false;
254
+ break;
255
+ }
256
+ }
257
+ if (tableSatisfied) {
258
+ // remove all results before this
259
+ pocketTableResults = [...allPossibleSatisfiedResults, ...tableData.results];
260
+ pocketTablesAreExhaustive = true;
261
+ }
262
+ }
263
+ }
264
+ if (pocketTablesAreExhaustive) {
265
+ result = pocketTableResults;
266
+ }
267
+ else {
268
+ // we need to take into account the types before the pocket tables
269
+ if (!result) {
270
+ // there was no result before the pocket tables
271
+ if (pocketTableResults.length > 0) {
272
+ if (depth === 0) {
273
+ // we got pocket tables results, and this is the top recursion
274
+ // add uninitialized
275
+ result = [{ name: name, type: SymbolTable.uninitializedTypeFactory(), data: {}, flags: bitFlags }, ...pocketTableResults];
276
+ }
277
+ else {
278
+ //just return pocket table results:
279
+ result = pocketTableResults;
280
+ }
281
+ }
282
+ else {
283
+ // result should be undefined
284
+ }
285
+ }
286
+ else {
287
+ // just add any pocket table results....
288
+ result.push(...pocketTableResults);
289
+ }
290
+ }
291
+ // Do the results cover all possible execution paths?
292
+ const areResultsExhaustive = pocketTablesAreExhaustive || pocketTablesWeFoundSomethingIn.length === 0;
293
+ return { symbols: result, exhaustive: areResultsExhaustive };
294
+ }
295
+ getSymbolDataFromPocketTables(name, bitFlags, additionalOptions = {}) {
59
296
  var _a;
60
- const key = name.toLowerCase();
61
- let result = this.symbolMap.get(key);
62
- if (!result && searchParent) {
63
- result = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbol(key);
297
+ const possiblePocketTables = this.getPossiblePocketTables({ statementIndex: additionalOptions.maxStatementIndex }, additionalOptions.precedingAssignmentIndex);
298
+ const depth = (_a = additionalOptions.depth) !== null && _a !== void 0 ? _a : 0;
299
+ const pocketTablesWeFoundSomethingIn = new Array();
300
+ for (const pocketTable of possiblePocketTables) {
301
+ const pocketTableTypes = pocketTable.table.getSymbol(name, bitFlags, {
302
+ ignoreParentsAndSiblings: true,
303
+ maxStatementIndex: Number.MAX_SAFE_INTEGER,
304
+ depth: depth + 1
305
+ });
306
+ if ((pocketTableTypes === null || pocketTableTypes === void 0 ? void 0 : pocketTableTypes.length) > 0) {
307
+ if (pocketTable.table.isOrdered) {
308
+ const lastResult = pocketTableTypes[pocketTableTypes.length - 1];
309
+ pocketTablesWeFoundSomethingIn.push({ pocketTable: pocketTable, results: [lastResult] });
310
+ }
311
+ else {
312
+ pocketTablesWeFoundSomethingIn.push({ pocketTable: pocketTable, results: pocketTableTypes });
313
+ }
314
+ }
64
315
  }
65
- return result;
316
+ return pocketTablesWeFoundSomethingIn;
66
317
  }
67
318
  /**
68
319
  * Adds a new symbol to the table
69
- * @param name
70
- * @param type
71
320
  */
72
- addSymbol(name, range, type) {
73
- const key = name.toLowerCase();
321
+ addSymbol(name, data, type, bitFlags) {
322
+ var _a;
323
+ if (!name) {
324
+ return;
325
+ }
326
+ const key = name === null || name === void 0 ? void 0 : name.toLowerCase();
74
327
  if (!this.symbolMap.has(key)) {
75
328
  this.symbolMap.set(key, []);
76
329
  }
77
- this.symbolMap.get(key).push({
330
+ (_a = this.symbolMap.get(key)) === null || _a === void 0 ? void 0 : _a.push({
78
331
  name: name,
79
- range: range,
80
- type: type
332
+ data: data,
333
+ type: type,
334
+ flags: bitFlags
81
335
  });
82
336
  }
83
337
  /**
84
- * Gets the type for a symbol
85
- * @param name the name of the symbol to get the type for
86
- * @param searchParent should we look to our parent if we don't have the symbol?
87
- * @returns The type, if found. If the type has ever changed, return DynamicType. If not found, returns UninitializedType
338
+ * Removes a new symbol from the table
88
339
  */
89
- getSymbolType(name, searchParent = true) {
90
- var _a, _b;
340
+ removeSymbol(name) {
91
341
  const key = name.toLowerCase();
92
- const symbols = this.symbolMap.get(key);
93
- if ((symbols === null || symbols === void 0 ? void 0 : symbols.length) > 1) {
94
- //Check if each time it was set, it was set to the same type
95
- // TODO handle union types
96
- let sameImpliedType = true;
97
- let impliedType = symbols[0].type;
98
- for (const symbol of symbols) {
99
- sameImpliedType = (impliedType.equals(symbol.type));
100
- if (!sameImpliedType) {
101
- break;
102
- }
103
- }
104
- return sameImpliedType ? impliedType : new DynamicType_1.DynamicType();
342
+ if (!this.symbolMap.has(key)) {
343
+ this.symbolMap.set(key, []);
344
+ }
345
+ this.symbolMap.delete(key);
346
+ }
347
+ getSymbolTypes(name, options, sortByStatementIndex = false) {
348
+ const symbolArray = this.getSymbol(name, options.flags, {
349
+ ignoreParentsAndSiblings: options.ignoreParentTables,
350
+ maxStatementIndex: Number.isInteger(options.statementIndex) ? options.statementIndex : -1
351
+ });
352
+ if (!symbolArray) {
353
+ return undefined;
105
354
  }
106
- else if ((symbols === null || symbols === void 0 ? void 0 : symbols.length) === 1) {
107
- return symbols[0].type;
355
+ let symbols = symbolArray === null || symbolArray === void 0 ? void 0 : symbolArray.map(symbol => ({ type: symbol.type, data: symbol.data, flags: symbol.flags }));
356
+ if (sortByStatementIndex) {
357
+ this.sortSymbolsByAssignmentOrderInPlace(symbols);
108
358
  }
109
- if (searchParent) {
110
- return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolType(name)) !== null && _b !== void 0 ? _b : new UninitializedType_1.UninitializedType();
359
+ return symbols;
360
+ }
361
+ getSymbolType(name, options) {
362
+ var _a, _b, _c;
363
+ const cacheEntry = options.ignoreCacheForRetrieval ? undefined : this.getCachedType(name, options);
364
+ let resolvedType = cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.type;
365
+ let doSetCache = !resolvedType;
366
+ const originalIsReferenceType = (0, reflection_1.isAnyReferenceType)(resolvedType);
367
+ let data = (cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.data) || {};
368
+ let foundFlags = cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.flags;
369
+ if (!resolvedType || originalIsReferenceType) {
370
+ let symbolTypes;
371
+ symbolTypes = this.getSymbolTypes(name, Object.assign(Object.assign({}, options), { statementIndex: options.statementIndex }));
372
+ data = (_a = symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes[0]) === null || _a === void 0 ? void 0 : _a.data;
373
+ foundFlags = (_b = symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes[0]) === null || _b === void 0 ? void 0 : _b.flags;
374
+ resolvedType = (0, helpers_1.getUniqueType)(symbolTypes === null || symbolTypes === void 0 ? void 0 : symbolTypes.map(symbol => symbol.type), SymbolTable.unionTypeFactory);
111
375
  }
112
- else {
113
- return new UninitializedType_1.UninitializedType();
376
+ if (!resolvedType && options.fullName && options.tableProvider) {
377
+ resolvedType = SymbolTable.referenceTypeFactory(name, options.fullName, options.flags, options.tableProvider);
378
+ }
379
+ const resolvedTypeIsReference = (0, reflection_1.isAnyReferenceType)(resolvedType);
380
+ const newNonReferenceType = originalIsReferenceType && !(0, reflection_1.isAnyReferenceType)(resolvedType) && resolvedType;
381
+ doSetCache = doSetCache && (options.onlyCacheResolvedTypes ? !resolvedTypeIsReference : true);
382
+ if (doSetCache || newNonReferenceType) {
383
+ this.setCachedType(name, { type: resolvedType, data: data, flags: foundFlags }, options);
384
+ }
385
+ (_c = options.data) !== null && _c !== void 0 ? _c : (options.data = {});
386
+ if (options.data) {
387
+ options.data.definingNode = data === null || data === void 0 ? void 0 : data.definingNode;
388
+ options.data.description = data === null || data === void 0 ? void 0 : data.description;
389
+ options.data.flags = foundFlags !== null && foundFlags !== void 0 ? foundFlags : options.flags;
390
+ options.data.memberOfAncestor = data === null || data === void 0 ? void 0 : data.memberOfAncestor;
391
+ options.data.doNotMerge = data === null || data === void 0 ? void 0 : data.doNotMerge;
392
+ options.data.isAlias = data === null || data === void 0 ? void 0 : data.isAlias;
393
+ options.data.isInstance = data === null || data === void 0 ? void 0 : data.isInstance;
394
+ options.data.isFromDocComment = data === null || data === void 0 ? void 0 : data.isFromDocComment;
395
+ options.data.isBuiltIn = data === null || data === void 0 ? void 0 : data.isBuiltIn;
396
+ options.data.isFromCallFunc = data === null || data === void 0 ? void 0 : data.isFromCallFunc;
397
+ options.data.isFromTypeStatement = data === null || data === void 0 ? void 0 : data.isFromTypeStatement;
114
398
  }
399
+ return resolvedType;
400
+ }
401
+ isSymbolTypeInstance(name) {
402
+ const data = {};
403
+ this.getSymbolType(name, { flags: 1 /* SymbolTypeFlag.runtime */, data: data });
404
+ return data === null || data === void 0 ? void 0 : data.isInstance;
115
405
  }
116
406
  /**
117
407
  * Adds all the symbols from another table to this one
118
408
  * It will overwrite any existing symbols in this table
119
- * @param symbolTable
120
409
  */
121
410
  mergeSymbolTable(symbolTable) {
122
- for (let [, value] of symbolTable.symbolMap) {
123
- for (const symbol of value) {
124
- this.addSymbol(symbol.name, symbol.range, symbol.type);
411
+ function mergeTables(intoTable, fromTable) {
412
+ var _a;
413
+ for (let [, value] of fromTable.symbolMap) {
414
+ for (const symbol of value) {
415
+ if ((_a = symbol.data) === null || _a === void 0 ? void 0 : _a.doNotMerge) {
416
+ continue;
417
+ }
418
+ intoTable.addSymbol(symbol.name, symbol.data, symbol.type, symbol.flags);
419
+ }
125
420
  }
126
421
  }
422
+ mergeTables(this, symbolTable);
423
+ for (let pocketTable of symbolTable.pocketTables) {
424
+ mergeTables(this, pocketTable.table);
425
+ }
426
+ }
427
+ mergeNamespaceSymbolTables(symbolTable) {
428
+ var _a;
429
+ const disposables = [];
430
+ for (let [_name, value] of symbolTable.symbolMap) {
431
+ const symbol = value[0];
432
+ if (symbol) {
433
+ if ((_a = symbol.data) === null || _a === void 0 ? void 0 : _a.doNotMerge) {
434
+ continue;
435
+ }
436
+ const existingRuntimeType = this.getSymbolType(symbol.name, { flags: symbol.flags });
437
+ if ((0, reflection_1.isNamespaceType)(existingRuntimeType) && (0, reflection_1.isNamespaceType)(symbol.type)) {
438
+ disposables.push(...existingRuntimeType.memberTable.mergeNamespaceSymbolTables(symbol.type.memberTable));
439
+ }
440
+ else {
441
+ this.addSymbol(symbol.name, symbol.data, symbol.type, symbol.flags);
442
+ disposables.push(() => this.removeSymbol(symbol.name));
443
+ }
444
+ }
445
+ }
446
+ for (let siblingTable of symbolTable.siblings) {
447
+ disposables.push(...this.mergeNamespaceSymbolTables(siblingTable));
448
+ }
449
+ return disposables;
450
+ }
451
+ /**
452
+ * Get list of symbols declared directly in this SymbolTable (excludes parent SymbolTable).
453
+ */
454
+ getOwnSymbols(bitFlags) {
455
+ let symbols = [].concat(...this.symbolMap.values());
456
+ // eslint-disable-next-line no-bitwise
457
+ symbols = symbols.filter(symbol => symbol.flags & bitFlags);
458
+ return symbols;
459
+ }
460
+ hasCircularReferenceWithAncestor() {
461
+ if (this.cachedCircularReferenceCheck === false || this.cachedCircularReferenceCheck === true) {
462
+ return this.cachedCircularReferenceCheck;
463
+ }
464
+ let foundCircReference = false;
465
+ let p = this.parent;
466
+ while (!foundCircReference && p) {
467
+ foundCircReference = p === this;
468
+ p = p.parent;
469
+ }
470
+ this.cachedCircularReferenceCheck = foundCircReference;
471
+ return foundCircReference;
472
+ }
473
+ /**
474
+ * Get list of all symbols declared in this SymbolTable (includes parent SymbolTable).
475
+ */
476
+ getAllSymbols(bitFlags) {
477
+ let symbols = [].concat(...this.symbolMap.values());
478
+ //look through any sibling maps next
479
+ for (let sibling of this.siblings) {
480
+ symbols = symbols.concat(sibling.getAllSymbols(bitFlags));
481
+ }
482
+ if (this.parent && !this.hasCircularReferenceWithAncestor()) {
483
+ symbols = symbols.concat(this.parent.getAllSymbols(bitFlags));
484
+ }
485
+ // eslint-disable-next-line no-bitwise
486
+ symbols = symbols.filter(symbol => symbol.flags & bitFlags);
487
+ //remove duplicate symbols
488
+ const symbolsMap = new Map();
489
+ for (const symbol of symbols) {
490
+ const lowerSymbolName = symbol.name.toLowerCase();
491
+ if (!symbolsMap.has(lowerSymbolName)) {
492
+ symbolsMap.set(lowerSymbolName, symbol);
493
+ }
494
+ }
495
+ return [...symbolsMap.values()];
496
+ }
497
+ resetTypeCache() {
498
+ var _a;
499
+ this.typeCache = [
500
+ undefined,
501
+ new Map(),
502
+ new Map(),
503
+ new Map() // SymbolTypeFlags.runtime & SymbolTypeFlags.typetime
504
+ ];
505
+ this.cacheToken = (_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.getToken();
506
+ }
507
+ getCachedType(name, options) {
508
+ var _a, _b;
509
+ if (SymbolTable.cacheVerifier) {
510
+ if (!((_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.checkToken(this.cacheToken))) {
511
+ // we have a bad token
512
+ this.resetTypeCache();
513
+ return;
514
+ }
515
+ }
516
+ else {
517
+ // no cache verifier
518
+ return;
519
+ }
520
+ const cacheKey = this.getCacheKey(name, options);
521
+ return (_b = this.typeCache[options.flags]) === null || _b === void 0 ? void 0 : _b.get(cacheKey);
522
+ }
523
+ setCachedType(name, cacheEntry, options) {
524
+ var _a, _b, _c;
525
+ if (!cacheEntry || !cacheEntry.type) {
526
+ return;
527
+ }
528
+ if (SymbolTable.cacheVerifier) {
529
+ if (!((_a = SymbolTable.cacheVerifier) === null || _a === void 0 ? void 0 : _a.checkToken(this.cacheToken))) {
530
+ // we have a bad token - remove all other caches
531
+ this.resetTypeCache();
532
+ }
533
+ }
534
+ else {
535
+ // no cache verifier
536
+ return;
537
+ }
538
+ const cacheKey = this.getCacheKey(name, options);
539
+ let existingCachedValue = (_b = this.typeCache[options.flags]) === null || _b === void 0 ? void 0 : _b.get(cacheKey);
540
+ if ((0, reflection_1.isReferenceType)(cacheEntry.type) && !(0, reflection_1.isReferenceType)(existingCachedValue)) {
541
+ // No need to overwrite a non-referenceType with a referenceType
542
+ return;
543
+ }
544
+ return (_c = this.typeCache[options.flags]) === null || _c === void 0 ? void 0 : _c.set(cacheKey, cacheEntry);
545
+ }
546
+ getCacheKey(name, options) {
547
+ var _a;
548
+ return this.isOrdered ? `${name.toLowerCase()}@${(_a = options.statementIndex) !== null && _a !== void 0 ? _a : '*'}` : `${name.toLowerCase()}`;
549
+ }
550
+ /**
551
+ * Serialize this SymbolTable to JSON (useful for debugging reasons)
552
+ */
553
+ toJSON() {
554
+ var _a;
555
+ return {
556
+ name: this.name,
557
+ siblings: [...this.siblings].map(sibling => sibling.toJSON()),
558
+ parent: (_a = this.parent) === null || _a === void 0 ? void 0 : _a.toJSON(),
559
+ symbols: [
560
+ ...new Set([...this.symbolMap.entries()].map(([key, symbols]) => {
561
+ return symbols.map(x => {
562
+ var _a;
563
+ return { name: x.name, type: (_a = x.type) === null || _a === void 0 ? void 0 : _a.__identifier };
564
+ });
565
+ }).flat().sort())
566
+ ]
567
+ };
568
+ }
569
+ sortSymbolsByAssignmentOrderInPlace(symbols) {
570
+ symbols.sort((a, b) => {
571
+ var _a, _b, _c, _d;
572
+ if (!Number.isInteger((_b = (_a = a.data) === null || _a === void 0 ? void 0 : _a.definingNode) === null || _b === void 0 ? void 0 : _b.statementIndex)) {
573
+ return -1;
574
+ }
575
+ if (!Number.isInteger((_d = (_c = b.data) === null || _c === void 0 ? void 0 : _c.definingNode) === null || _d === void 0 ? void 0 : _d.statementIndex)) {
576
+ return 1;
577
+ }
578
+ if (b.data.definingNode.statementIndex > a.data.definingNode.statementIndex) {
579
+ return -1;
580
+ }
581
+ if (b.data.definingNode.statementIndex < a.data.definingNode.statementIndex) {
582
+ return 1;
583
+ }
584
+ return -1;
585
+ });
586
+ return symbols;
587
+ }
588
+ getPossiblePocketTables(options, precedingAssignmentIndex = -1) {
589
+ if (!this.isOrdered) {
590
+ return this.pocketTables;
591
+ }
592
+ const pocketTablesBetweenAssignmentAndPosition = this.pocketTables.filter(pt => {
593
+ const isBeforePosition = options.statementIndex === 'end' ? true : options.statementIndex > pt.index;
594
+ let isAfterPrecedingAssignment = true;
595
+ if (Number.isInteger(precedingAssignmentIndex)) {
596
+ isAfterPrecedingAssignment = precedingAssignmentIndex < pt.index;
597
+ }
598
+ return isAfterPrecedingAssignment && isBeforePosition;
599
+ });
600
+ return pocketTablesBetweenAssignmentAndPosition;
601
+ }
602
+ getSymbolLookupFilter(currentTable, maxAllowedStatementIndex, memberOfAncestor) {
603
+ return (t) => {
604
+ var _a;
605
+ if (!currentTable.isOrdered) {
606
+ // order doesn't matter for current table
607
+ return true;
608
+ }
609
+ if (maxAllowedStatementIndex >= 0 && ((_a = t.data) === null || _a === void 0 ? void 0 : _a.definingNode)) {
610
+ if (memberOfAncestor) {
611
+ // if we've already gone up a level, it's possible to have a variable assigned and used
612
+ // in the same statement, eg. for loop
613
+ return t.data.definingNode.statementIndex <= maxAllowedStatementIndex;
614
+ }
615
+ else {
616
+ return t.data.definingNode.statementIndex < maxAllowedStatementIndex;
617
+ }
618
+ }
619
+ return true;
620
+ };
127
621
  }
128
622
  }
129
623
  exports.SymbolTable = SymbolTable;
624
+ /**
625
+ * Used to invalidate the cache for all symbol tables.
626
+ *
627
+ * This is not the most optimized solution as cache will be shared across all instances of SymbolTable across all programs,
628
+ * but this is the easiest way to handle nested/linked symbol table cache management so we can optimize this in the future some time...
629
+ */
630
+ SymbolTable.cacheVerifier = new CacheVerifier_1.CacheVerifier();
130
631
  //# sourceMappingURL=SymbolTable.js.map