brighterscript 0.57.2 → 0.59.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (124) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +16 -6
  3. package/bsconfig.schema.json +11 -0
  4. package/dist/BsConfig.d.ts +11 -0
  5. package/dist/DiagnosticMessages.d.ts +7 -2
  6. package/dist/DiagnosticMessages.js +7 -2
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/Program.d.ts +12 -2
  9. package/dist/Program.js +69 -24
  10. package/dist/Program.js.map +1 -1
  11. package/dist/ProgramBuilder.js +1 -1
  12. package/dist/ProgramBuilder.js.map +1 -1
  13. package/dist/Scope.d.ts +6 -3
  14. package/dist/Scope.js +24 -17
  15. package/dist/Scope.js.map +1 -1
  16. package/dist/astUtils/AstEditor.d.ts +2 -3
  17. package/dist/astUtils/AstEditor.js.map +1 -1
  18. package/dist/astUtils/creators.d.ts +4 -4
  19. package/dist/astUtils/creators.js +6 -6
  20. package/dist/astUtils/creators.js.map +1 -1
  21. package/dist/astUtils/reflection.d.ts +67 -64
  22. package/dist/astUtils/reflection.js +10 -2
  23. package/dist/astUtils/reflection.js.map +1 -1
  24. package/dist/astUtils/reflection.spec.js +8 -3
  25. package/dist/astUtils/reflection.spec.js.map +1 -1
  26. package/dist/astUtils/visitors.d.ts +33 -31
  27. package/dist/astUtils/visitors.js.map +1 -1
  28. package/dist/astUtils/visitors.spec.js.map +1 -1
  29. package/dist/bscPlugin/BscPlugin.js +4 -0
  30. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  31. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +6 -6
  32. package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
  33. package/dist/bscPlugin/hover/HoverProcessor.spec.js +40 -34
  34. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  35. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -2
  36. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  37. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js +2 -2
  38. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  39. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js +4 -5
  40. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.spec.js.map +1 -1
  41. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +2 -0
  42. package/dist/bscPlugin/validation/BrsFileValidator.js +166 -12
  43. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  44. package/dist/bscPlugin/validation/ScopeValidator.d.ts +21 -19
  45. package/dist/bscPlugin/validation/ScopeValidator.js +164 -179
  46. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  47. package/dist/bscPlugin/validation/XmlFileValidator.d.ts +8 -0
  48. package/dist/bscPlugin/validation/XmlFileValidator.js +44 -0
  49. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -0
  50. package/dist/files/BrsFile.Class.spec.js +33 -35
  51. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  52. package/dist/files/BrsFile.d.ts +11 -5
  53. package/dist/files/BrsFile.js +15 -47
  54. package/dist/files/BrsFile.js.map +1 -1
  55. package/dist/files/BrsFile.spec.js +107 -79
  56. package/dist/files/BrsFile.spec.js.map +1 -1
  57. package/dist/files/XmlFile.d.ts +9 -4
  58. package/dist/files/XmlFile.js +6 -30
  59. package/dist/files/XmlFile.js.map +1 -1
  60. package/dist/files/XmlFile.spec.js +57 -90
  61. package/dist/files/XmlFile.spec.js.map +1 -1
  62. package/dist/files/tests/imports.spec.js +13 -15
  63. package/dist/files/tests/imports.spec.js.map +1 -1
  64. package/dist/files/tests/optionalChaning.spec.js +10 -12
  65. package/dist/files/tests/optionalChaning.spec.js.map +1 -1
  66. package/dist/index.d.ts +1 -0
  67. package/dist/index.js +1 -0
  68. package/dist/index.js.map +1 -1
  69. package/dist/interfaces.d.ts +2 -3
  70. package/dist/lexer/Lexer.spec.js +6 -0
  71. package/dist/lexer/Lexer.spec.js.map +1 -1
  72. package/dist/lexer/TokenKind.d.ts +1 -0
  73. package/dist/lexer/TokenKind.js +6 -2
  74. package/dist/lexer/TokenKind.js.map +1 -1
  75. package/dist/parser/AstNode.d.ts +65 -0
  76. package/dist/parser/AstNode.js +93 -0
  77. package/dist/parser/AstNode.js.map +1 -0
  78. package/dist/parser/AstNode.spec.d.ts +1 -0
  79. package/dist/parser/AstNode.spec.js +42 -0
  80. package/dist/parser/AstNode.spec.js.map +1 -0
  81. package/dist/parser/Expression.d.ts +6 -43
  82. package/dist/parser/Expression.js +53 -81
  83. package/dist/parser/Expression.js.map +1 -1
  84. package/dist/parser/Parser.d.ts +15 -12
  85. package/dist/parser/Parser.js +130 -117
  86. package/dist/parser/Parser.js.map +1 -1
  87. package/dist/parser/Parser.spec.d.ts +1 -1
  88. package/dist/parser/Parser.spec.js.map +1 -1
  89. package/dist/parser/SGParser.spec.js +2 -3
  90. package/dist/parser/SGParser.spec.js.map +1 -1
  91. package/dist/parser/Statement.d.ts +28 -44
  92. package/dist/parser/Statement.js +118 -104
  93. package/dist/parser/Statement.js.map +1 -1
  94. package/dist/parser/Statement.spec.js +16 -10
  95. package/dist/parser/Statement.spec.js.map +1 -1
  96. package/dist/parser/tests/expression/ArrayLiterals.spec.js +37 -0
  97. package/dist/parser/tests/expression/ArrayLiterals.spec.js.map +1 -1
  98. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js +41 -0
  99. package/dist/parser/tests/expression/AssociativeArrayLiterals.spec.js.map +1 -1
  100. package/dist/parser/tests/expression/Call.spec.js +109 -1
  101. package/dist/parser/tests/expression/Call.spec.js.map +1 -1
  102. package/dist/parser/tests/expression/Indexing.spec.js +49 -4
  103. package/dist/parser/tests/expression/Indexing.spec.js.map +1 -1
  104. package/dist/parser/tests/statement/ConstStatement.spec.js +7 -7
  105. package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
  106. package/dist/parser/tests/statement/Continue.spec.d.ts +1 -0
  107. package/dist/parser/tests/statement/Continue.spec.js +92 -0
  108. package/dist/parser/tests/statement/Continue.spec.js.map +1 -0
  109. package/dist/parser/tests/statement/Enum.spec.js +36 -9
  110. package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
  111. package/dist/parser/tests/statement/For.spec.js +3 -4
  112. package/dist/parser/tests/statement/For.spec.js.map +1 -1
  113. package/dist/parser/tests/statement/ForEach.spec.js +4 -5
  114. package/dist/parser/tests/statement/ForEach.spec.js.map +1 -1
  115. package/dist/parser/tests/statement/InterfaceStatement.spec.js +4 -5
  116. package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
  117. package/dist/parser/tests/statement/PrintStatement.spec.js +3 -4
  118. package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
  119. package/dist/util.d.ts +11 -5
  120. package/dist/util.js +57 -6
  121. package/dist/util.js.map +1 -1
  122. package/dist/validators/ClassValidator.js +22 -19
  123. package/dist/validators/ClassValidator.js.map +1 -1
  124. package/package.json +2 -2
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.FieldStatement = exports.ClassMethodStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = exports.Statement = void 0;
3
+ exports.ContinueStatement = exports.ConstStatement = exports.EnumMemberStatement = exports.EnumStatement = exports.ThrowStatement = exports.CatchStatement = exports.TryCatchStatement = exports.ClassFieldStatement = exports.FieldStatement = exports.ClassMethodStatement = exports.MethodStatement = exports.ClassStatement = exports.InterfaceMethodStatement = exports.InterfaceFieldStatement = exports.InterfaceStatement = exports.ImportStatement = exports.NamespaceStatement = exports.LibraryStatement = exports.IndexedSetStatement = exports.DottedSetStatement = exports.WhileStatement = exports.ForEachStatement = exports.ForStatement = exports.StopStatement = exports.EndStatement = exports.ReturnStatement = exports.LabelStatement = exports.GotoStatement = exports.DimStatement = exports.PrintStatement = exports.IncrementStatement = exports.IfStatement = exports.FunctionStatement = exports.ExitWhileStatement = exports.ExitForStatement = exports.CommentStatement = exports.ExpressionStatement = exports.Block = exports.AssignmentStatement = exports.Body = exports.EmptyStatement = void 0;
4
4
  const TokenKind_1 = require("../lexer/TokenKind");
5
5
  const Expression_1 = require("./Expression");
6
6
  const util_1 = require("../util");
@@ -11,26 +11,8 @@ 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
- /**
15
- * A BrightScript statement
16
- */
17
- class Statement {
18
- constructor() {
19
- /**
20
- * When being considered by the walk visitor, this describes what type of element the current class is.
21
- */
22
- this.visitMode = visitors_1.InternalWalkMode.visitStatements;
23
- }
24
- /**
25
- * Get the closest symbol table for this node. Should be overridden in children that directly contain a symbol table
26
- */
27
- getSymbolTable() {
28
- var _a;
29
- return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable();
30
- }
31
- }
32
- exports.Statement = Statement;
33
- class EmptyStatement extends Statement {
14
+ const AstNode_1 = require("./AstNode");
15
+ class EmptyStatement extends AstNode_1.Statement {
34
16
  constructor(
35
17
  /**
36
18
  * Create a negative range to indicate this is an interpolated location
@@ -50,14 +32,11 @@ exports.EmptyStatement = EmptyStatement;
50
32
  /**
51
33
  * This is a top-level statement. Consider this the root of the AST
52
34
  */
53
- class Body extends Statement {
54
- constructor(statements = [], symbolTable = new SymbolTable_1.SymbolTable()) {
35
+ class Body extends AstNode_1.Statement {
36
+ constructor(statements = []) {
55
37
  super();
56
38
  this.statements = statements;
57
- this.symbolTable = symbolTable;
58
- }
59
- getSymbolTable() {
60
- return this.symbolTable;
39
+ this.symbolTable = new SymbolTable_1.SymbolTable();
61
40
  }
62
41
  get range() {
63
42
  var _a, _b, _c, _d;
@@ -109,7 +88,7 @@ class Body extends Statement {
109
88
  }
110
89
  }
111
90
  exports.Body = Body;
112
- class AssignmentStatement extends Statement {
91
+ class AssignmentStatement extends AstNode_1.Statement {
113
92
  constructor(equals, name, value, containingFunction) {
114
93
  super();
115
94
  this.equals = equals;
@@ -141,11 +120,12 @@ class AssignmentStatement extends Statement {
141
120
  }
142
121
  }
143
122
  exports.AssignmentStatement = AssignmentStatement;
144
- class Block extends Statement {
123
+ class Block extends AstNode_1.Statement {
145
124
  constructor(statements, startingRange) {
146
125
  super();
147
126
  this.statements = statements;
148
127
  this.startingRange = startingRange;
128
+ this.symbolTable = new SymbolTable_1.SymbolTable();
149
129
  this.range = util_1.util.createRangeFromPositions(this.startingRange.start, this.statements.length
150
130
  ? this.statements[this.statements.length - 1].range.end
151
131
  : this.startingRange.start);
@@ -181,7 +161,7 @@ class Block extends Statement {
181
161
  }
182
162
  }
183
163
  exports.Block = Block;
184
- class ExpressionStatement extends Statement {
164
+ class ExpressionStatement extends AstNode_1.Statement {
185
165
  constructor(expression) {
186
166
  super();
187
167
  this.expression = expression;
@@ -197,7 +177,7 @@ class ExpressionStatement extends Statement {
197
177
  }
198
178
  }
199
179
  exports.ExpressionStatement = ExpressionStatement;
200
- class CommentStatement extends Statement {
180
+ class CommentStatement extends AstNode_1.Statement {
201
181
  constructor(comments) {
202
182
  var _a;
203
183
  super();
@@ -233,7 +213,7 @@ class CommentStatement extends Statement {
233
213
  }
234
214
  }
235
215
  exports.CommentStatement = CommentStatement;
236
- class ExitForStatement extends Statement {
216
+ class ExitForStatement extends AstNode_1.Statement {
237
217
  constructor(tokens) {
238
218
  super();
239
219
  this.tokens = tokens;
@@ -249,7 +229,7 @@ class ExitForStatement extends Statement {
249
229
  }
250
230
  }
251
231
  exports.ExitForStatement = ExitForStatement;
252
- class ExitWhileStatement extends Statement {
232
+ class ExitWhileStatement extends AstNode_1.Statement {
253
233
  constructor(tokens) {
254
234
  super();
255
235
  this.tokens = tokens;
@@ -265,22 +245,23 @@ class ExitWhileStatement extends Statement {
265
245
  }
266
246
  }
267
247
  exports.ExitWhileStatement = ExitWhileStatement;
268
- class FunctionStatement extends Statement {
269
- constructor(name, func, namespaceName) {
248
+ class FunctionStatement extends AstNode_1.Statement {
249
+ constructor(name, func) {
270
250
  super();
271
251
  this.name = name;
272
252
  this.func = func;
273
- this.namespaceName = namespaceName;
274
253
  this.range = this.func.range;
275
254
  }
276
255
  /**
277
256
  * Get the name of this expression based on the parse mode
278
257
  */
279
258
  getName(parseMode) {
280
- if (this.namespaceName) {
259
+ var _a;
260
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
261
+ if (namespace) {
281
262
  let delimiter = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
282
- let namespaceName = this.namespaceName.getName(parseMode);
283
- return namespaceName + delimiter + this.name.text;
263
+ let namespaceName = namespace.getName(parseMode);
264
+ return namespaceName + delimiter + ((_a = this.name) === null || _a === void 0 ? void 0 : _a.text);
284
265
  }
285
266
  else {
286
267
  return this.name.text;
@@ -307,7 +288,7 @@ class FunctionStatement extends Statement {
307
288
  }
308
289
  }
309
290
  exports.FunctionStatement = FunctionStatement;
310
- class IfStatement extends Statement {
291
+ class IfStatement extends AstNode_1.Statement {
311
292
  constructor(tokens, condition, thenBranch, elseBranch, isInline) {
312
293
  var _a, _b;
313
294
  super();
@@ -394,7 +375,7 @@ class IfStatement extends Statement {
394
375
  }
395
376
  }
396
377
  exports.IfStatement = IfStatement;
397
- class IncrementStatement extends Statement {
378
+ class IncrementStatement extends AstNode_1.Statement {
398
379
  constructor(value, operator) {
399
380
  super();
400
381
  this.value = value;
@@ -417,7 +398,7 @@ exports.IncrementStatement = IncrementStatement;
417
398
  /**
418
399
  * Represents a `print` statement within BrightScript.
419
400
  */
420
- class PrintStatement extends Statement {
401
+ class PrintStatement extends AstNode_1.Statement {
421
402
  /**
422
403
  * Creates a new internal representation of a BrightScript `print` statement.
423
404
  * @param expressions an array of expressions or `PrintSeparator`s to be
@@ -460,7 +441,7 @@ class PrintStatement extends Statement {
460
441
  }
461
442
  }
462
443
  exports.PrintStatement = PrintStatement;
463
- class DimStatement extends Statement {
444
+ class DimStatement extends AstNode_1.Statement {
464
445
  constructor(dimToken, identifier, openingSquare, dimensions, closingSquare) {
465
446
  var _a, _b, _c, _d;
466
447
  super();
@@ -495,7 +476,7 @@ class DimStatement extends Statement {
495
476
  }
496
477
  }
497
478
  exports.DimStatement = DimStatement;
498
- class GotoStatement extends Statement {
479
+ class GotoStatement extends AstNode_1.Statement {
499
480
  constructor(tokens) {
500
481
  super();
501
482
  this.tokens = tokens;
@@ -513,7 +494,7 @@ class GotoStatement extends Statement {
513
494
  }
514
495
  }
515
496
  exports.GotoStatement = GotoStatement;
516
- class LabelStatement extends Statement {
497
+ class LabelStatement extends AstNode_1.Statement {
517
498
  constructor(tokens) {
518
499
  super();
519
500
  this.tokens = tokens;
@@ -530,7 +511,7 @@ class LabelStatement extends Statement {
530
511
  }
531
512
  }
532
513
  exports.LabelStatement = LabelStatement;
533
- class ReturnStatement extends Statement {
514
+ class ReturnStatement extends AstNode_1.Statement {
534
515
  constructor(tokens, value) {
535
516
  var _a;
536
517
  super();
@@ -554,7 +535,7 @@ class ReturnStatement extends Statement {
554
535
  }
555
536
  }
556
537
  exports.ReturnStatement = ReturnStatement;
557
- class EndStatement extends Statement {
538
+ class EndStatement extends AstNode_1.Statement {
558
539
  constructor(tokens) {
559
540
  super();
560
541
  this.tokens = tokens;
@@ -570,7 +551,7 @@ class EndStatement extends Statement {
570
551
  }
571
552
  }
572
553
  exports.EndStatement = EndStatement;
573
- class StopStatement extends Statement {
554
+ class StopStatement extends AstNode_1.Statement {
574
555
  constructor(tokens) {
575
556
  super();
576
557
  this.tokens = tokens;
@@ -586,7 +567,7 @@ class StopStatement extends Statement {
586
567
  }
587
568
  }
588
569
  exports.StopStatement = StopStatement;
589
- class ForStatement extends Statement {
570
+ class ForStatement extends AstNode_1.Statement {
590
571
  constructor(forToken, counterDeclaration, toToken, finalValue, body, endForToken, stepToken, increment) {
591
572
  var _a, _b;
592
573
  super();
@@ -639,7 +620,7 @@ class ForStatement extends Statement {
639
620
  }
640
621
  }
641
622
  exports.ForStatement = ForStatement;
642
- class ForEachStatement extends Statement {
623
+ class ForEachStatement extends AstNode_1.Statement {
643
624
  constructor(tokens, item, target, body) {
644
625
  var _a, _b;
645
626
  super();
@@ -680,7 +661,7 @@ class ForEachStatement extends Statement {
680
661
  }
681
662
  }
682
663
  exports.ForEachStatement = ForEachStatement;
683
- class WhileStatement extends Statement {
664
+ class WhileStatement extends AstNode_1.Statement {
684
665
  constructor(tokens, condition, body) {
685
666
  var _a, _b;
686
667
  super();
@@ -716,7 +697,7 @@ class WhileStatement extends Statement {
716
697
  }
717
698
  }
718
699
  exports.WhileStatement = WhileStatement;
719
- class DottedSetStatement extends Statement {
700
+ class DottedSetStatement extends AstNode_1.Statement {
720
701
  constructor(obj, name, value) {
721
702
  super();
722
703
  this.obj = obj;
@@ -751,7 +732,7 @@ class DottedSetStatement extends Statement {
751
732
  }
752
733
  }
753
734
  exports.DottedSetStatement = DottedSetStatement;
754
- class IndexedSetStatement extends Statement {
735
+ class IndexedSetStatement extends AstNode_1.Statement {
755
736
  constructor(obj, index, value, openingSquare, closingSquare) {
756
737
  super();
757
738
  this.obj = obj;
@@ -793,7 +774,7 @@ class IndexedSetStatement extends Statement {
793
774
  }
794
775
  }
795
776
  exports.IndexedSetStatement = IndexedSetStatement;
796
- class LibraryStatement extends Statement {
777
+ class LibraryStatement extends AstNode_1.Statement {
797
778
  constructor(tokens) {
798
779
  super();
799
780
  this.tokens = tokens;
@@ -816,21 +797,19 @@ class LibraryStatement extends Statement {
816
797
  }
817
798
  }
818
799
  exports.LibraryStatement = LibraryStatement;
819
- class NamespaceStatement extends Statement {
800
+ class NamespaceStatement extends AstNode_1.Statement {
820
801
  constructor(keyword,
821
802
  //this should technically only be a VariableExpression or DottedGetExpression, but that can be enforced elsewhere
822
- nameExpression, body, endKeyword, parentSymbolTable) {
803
+ nameExpression, body, endKeyword) {
823
804
  super();
824
805
  this.keyword = keyword;
825
806
  this.nameExpression = nameExpression;
826
807
  this.body = body;
827
808
  this.endKeyword = endKeyword;
828
- this.parentSymbolTable = parentSymbolTable;
829
- this.name = this.nameExpression.getName(Parser_1.ParseMode.BrighterScript);
830
- this.symbolTable = new SymbolTable_1.SymbolTable(parentSymbolTable);
809
+ this.name = this.getName(Parser_1.ParseMode.BrighterScript);
831
810
  }
832
811
  getSymbolTable() {
833
- return this.symbolTable;
812
+ return this.body.symbolTable;
834
813
  }
835
814
  get range() {
836
815
  return this.cacheRange();
@@ -852,7 +831,7 @@ class NamespaceStatement extends Statement {
852
831
  getTypedef(state) {
853
832
  let result = [
854
833
  'namespace ',
855
- ...this.nameExpression.getName(Parser_1.ParseMode.BrighterScript),
834
+ ...this.getName(Parser_1.ParseMode.BrighterScript),
856
835
  state.newline
857
836
  ];
858
837
  state.blockDepth++;
@@ -871,7 +850,7 @@ class NamespaceStatement extends Statement {
871
850
  }
872
851
  }
873
852
  exports.NamespaceStatement = NamespaceStatement;
874
- class ImportStatement extends Statement {
853
+ class ImportStatement extends AstNode_1.Statement {
875
854
  constructor(importToken, filePathToken) {
876
855
  super();
877
856
  this.importToken = importToken;
@@ -910,12 +889,11 @@ class ImportStatement extends Statement {
910
889
  }
911
890
  }
912
891
  exports.ImportStatement = ImportStatement;
913
- class InterfaceStatement extends Statement {
914
- constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken, namespaceName) {
892
+ class InterfaceStatement extends AstNode_1.Statement {
893
+ constructor(interfaceToken, name, extendsToken, parentInterfaceName, body, endInterfaceToken) {
915
894
  super();
916
895
  this.parentInterfaceName = parentInterfaceName;
917
896
  this.body = body;
918
- this.namespaceName = namespaceName;
919
897
  this.tokens = {};
920
898
  this.tokens.interface = interfaceToken;
921
899
  this.tokens.name = name;
@@ -936,8 +914,9 @@ class InterfaceStatement extends Statement {
936
914
  var _a;
937
915
  const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
938
916
  if (name) {
939
- if (this.namespaceName) {
940
- let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
917
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
918
+ if (namespace) {
919
+ let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
941
920
  return `${namespaceName}.${name}`;
942
921
  }
943
922
  else {
@@ -960,9 +939,10 @@ class InterfaceStatement extends Statement {
960
939
  * Get the name of this expression based on the parse mode
961
940
  */
962
941
  getName(parseMode) {
963
- if (this.namespaceName) {
942
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
943
+ if (namespace) {
964
944
  let delimiter = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
965
- let namespaceName = this.namespaceName.getName(parseMode);
945
+ let namespaceName = namespace.getName(parseMode);
966
946
  return namespaceName + delimiter + this.name;
967
947
  }
968
948
  else {
@@ -1009,7 +989,7 @@ class InterfaceStatement extends Statement {
1009
989
  }
1010
990
  }
1011
991
  exports.InterfaceStatement = InterfaceStatement;
1012
- class InterfaceFieldStatement extends Statement {
992
+ class InterfaceFieldStatement extends AstNode_1.Statement {
1013
993
  constructor(nameToken, asToken, typeToken, type) {
1014
994
  super();
1015
995
  this.type = type;
@@ -1045,7 +1025,7 @@ class InterfaceFieldStatement extends Statement {
1045
1025
  }
1046
1026
  }
1047
1027
  exports.InterfaceFieldStatement = InterfaceFieldStatement;
1048
- class InterfaceMethodStatement extends Statement {
1028
+ class InterfaceMethodStatement extends AstNode_1.Statement {
1049
1029
  constructor(functionTypeToken, nameToken, leftParen, params, rightParen, asToken, returnTypeToken, returnType) {
1050
1030
  super();
1051
1031
  this.params = params;
@@ -1094,12 +1074,12 @@ class InterfaceMethodStatement extends Statement {
1094
1074
  }
1095
1075
  }
1096
1076
  exports.InterfaceMethodStatement = InterfaceMethodStatement;
1097
- class ClassStatement extends Statement {
1077
+ class ClassStatement extends AstNode_1.Statement {
1098
1078
  constructor(classKeyword,
1099
1079
  /**
1100
1080
  * The name of the class (without namespace prefix)
1101
1081
  */
1102
- name, body, end, extendsKeyword, parentClassName, namespaceName) {
1082
+ name, body, end, extendsKeyword, parentClassName) {
1103
1083
  var _a, _b, _c;
1104
1084
  super();
1105
1085
  this.classKeyword = classKeyword;
@@ -1108,7 +1088,6 @@ class ClassStatement extends Statement {
1108
1088
  this.end = end;
1109
1089
  this.extendsKeyword = extendsKeyword;
1110
1090
  this.parentClassName = parentClassName;
1111
- this.namespaceName = namespaceName;
1112
1091
  this.memberMap = {};
1113
1092
  this.methods = [];
1114
1093
  this.fields = [];
@@ -1129,8 +1108,9 @@ class ClassStatement extends Statement {
1129
1108
  var _a;
1130
1109
  const name = (_a = this.name) === null || _a === void 0 ? void 0 : _a.text;
1131
1110
  if (name) {
1132
- if (this.namespaceName) {
1133
- let namespaceName = this.namespaceName.getName(parseMode);
1111
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1112
+ if (namespace) {
1113
+ let namespaceName = namespace.getName(parseMode);
1134
1114
  let separator = parseMode === Parser_1.ParseMode.BrighterScript ? '.' : '_';
1135
1115
  return namespaceName + separator + name;
1136
1116
  }
@@ -1153,14 +1133,15 @@ class ClassStatement extends Statement {
1153
1133
  return result;
1154
1134
  }
1155
1135
  getTypedef(state) {
1156
- var _a, _b;
1136
+ var _a;
1157
1137
  const result = [];
1158
1138
  for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
1159
1139
  result.push(...annotation.getTypedef(state), state.newline, state.indent());
1160
1140
  }
1161
1141
  result.push('class ', this.name.text);
1162
1142
  if (this.extendsKeyword && this.parentClassName) {
1163
- const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(Parser_1.ParseMode.BrighterScript), (_b = this.namespaceName) === null || _b === void 0 ? void 0 : _b.getName(Parser_1.ParseMode.BrighterScript));
1143
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1144
+ const fqName = util_1.util.getFullyQualifiedClassName(this.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript));
1164
1145
  result.push(` extends ${fqName}`);
1165
1146
  }
1166
1147
  result.push(state.newline);
@@ -1188,13 +1169,14 @@ class ClassStatement extends Statement {
1188
1169
  * The base class is index 0, its child is index 1, and so on.
1189
1170
  */
1190
1171
  getParentClassIndex(state) {
1191
- var _a, _b;
1172
+ var _a;
1192
1173
  let myIndex = 0;
1193
1174
  let stmt = this;
1194
1175
  while (stmt) {
1195
1176
  if (stmt.parentClassName) {
1177
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1196
1178
  //find the parent class
1197
- stmt = (_b = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), (_a = stmt.namespaceName) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript))) === null || _b === void 0 ? void 0 : _b.item;
1179
+ stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1198
1180
  myIndex++;
1199
1181
  }
1200
1182
  else {
@@ -1217,12 +1199,13 @@ class ClassStatement extends Statement {
1217
1199
  * This will return an empty array if no ancestors were found
1218
1200
  */
1219
1201
  getAncestors(state) {
1220
- var _a, _b;
1202
+ var _a;
1221
1203
  let ancestors = [];
1222
1204
  let stmt = this;
1223
1205
  while (stmt) {
1224
1206
  if (stmt.parentClassName) {
1225
- stmt = (_b = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), (_a = this.namespaceName) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript))) === null || _b === void 0 ? void 0 : _b.item;
1207
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1208
+ stmt = (_a = state.file.getClassFileLink(stmt.parentClassName.getName(Parser_1.ParseMode.BrighterScript), namespace === null || namespace === void 0 ? void 0 : namespace.getName(Parser_1.ParseMode.BrighterScript))) === null || _a === void 0 ? void 0 : _a.item;
1226
1209
  ancestors.push(stmt);
1227
1210
  }
1228
1211
  else {
@@ -1264,7 +1247,6 @@ class ClassStatement extends Statement {
1264
1247
  * without instantiating the parent constructor at that point in time.
1265
1248
  */
1266
1249
  getTranspiledBuilder(state) {
1267
- var _a;
1268
1250
  let result = [];
1269
1251
  result.push(`function ${this.getBuilderName(this.getName(Parser_1.ParseMode.BrightScript))}()\n`);
1270
1252
  state.blockDepth++;
@@ -1276,7 +1258,8 @@ class ClassStatement extends Statement {
1276
1258
  let ancestors = this.getAncestors(state);
1277
1259
  //construct parent class or empty object
1278
1260
  if (ancestors[0]) {
1279
- let fullyQualifiedClassName = util_1.util.getFullyQualifiedClassName(ancestors[0].getName(Parser_1.ParseMode.BrighterScript), (_a = ancestors[0].namespaceName) === null || _a === void 0 ? void 0 : _a.getName(Parser_1.ParseMode.BrighterScript));
1261
+ const ancestorNamespace = ancestors[0].findAncestor(reflection_1.isNamespaceStatement);
1262
+ let fullyQualifiedClassName = util_1.util.getFullyQualifiedClassName(ancestors[0].getName(Parser_1.ParseMode.BrighterScript), ancestorNamespace === null || ancestorNamespace === void 0 ? void 0 : ancestorNamespace.getName(Parser_1.ParseMode.BrighterScript));
1280
1263
  result.push('instance = ', this.getBuilderName(fullyQualifiedClassName), '()');
1281
1264
  }
1282
1265
  else {
@@ -1381,7 +1364,7 @@ const accessModifiers = [
1381
1364
  class MethodStatement extends FunctionStatement {
1382
1365
  constructor(modifiers, name, func, override) {
1383
1366
  var _a;
1384
- super(name, func, undefined);
1367
+ super(name, func);
1385
1368
  this.override = override;
1386
1369
  this.modifiers = [];
1387
1370
  if (modifiers) {
@@ -1397,6 +1380,12 @@ class MethodStatement extends FunctionStatement {
1397
1380
  get accessModifier() {
1398
1381
  return this.modifiers.find(x => accessModifiers.includes(x.kind));
1399
1382
  }
1383
+ /**
1384
+ * Get the name of this method.
1385
+ */
1386
+ getName(parseMode) {
1387
+ return this.name.text;
1388
+ }
1400
1389
  transpile(state) {
1401
1390
  if (this.name.text.toLowerCase() === 'new') {
1402
1391
  this.ensureSuperConstructorCall(state);
@@ -1468,7 +1457,7 @@ class MethodStatement extends FunctionStatement {
1468
1457
  isReserved: false,
1469
1458
  range: state.classStatement.name.range,
1470
1459
  leadingWhitespace: ''
1471
- }, null), {
1460
+ }), {
1472
1461
  kind: TokenKind_1.TokenKind.LeftParen,
1473
1462
  text: '(',
1474
1463
  isReserved: false,
@@ -1480,7 +1469,7 @@ class MethodStatement extends FunctionStatement {
1480
1469
  isReserved: false,
1481
1470
  range: state.classStatement.name.range,
1482
1471
  leadingWhitespace: ''
1483
- }, [], null));
1472
+ }, []));
1484
1473
  state.editor.arrayUnshift(this.func.body.statements, superCall);
1485
1474
  }
1486
1475
  /**
@@ -1516,7 +1505,7 @@ exports.MethodStatement = MethodStatement;
1516
1505
  class ClassMethodStatement extends MethodStatement {
1517
1506
  }
1518
1507
  exports.ClassMethodStatement = ClassMethodStatement;
1519
- class FieldStatement extends Statement {
1508
+ class FieldStatement extends AstNode_1.Statement {
1520
1509
  constructor(accessModifier, name, as, type, equal, initialValue) {
1521
1510
  var _a, _b, _c, _d;
1522
1511
  super();
@@ -1574,7 +1563,7 @@ exports.FieldStatement = FieldStatement;
1574
1563
  class ClassFieldStatement extends FieldStatement {
1575
1564
  }
1576
1565
  exports.ClassFieldStatement = ClassFieldStatement;
1577
- class TryCatchStatement extends Statement {
1566
+ class TryCatchStatement extends AstNode_1.Statement {
1578
1567
  constructor(tokens, tryBranch, catchStatement) {
1579
1568
  super();
1580
1569
  this.tokens = tokens;
@@ -1606,7 +1595,7 @@ class TryCatchStatement extends Statement {
1606
1595
  }
1607
1596
  }
1608
1597
  exports.TryCatchStatement = TryCatchStatement;
1609
- class CatchStatement extends Statement {
1598
+ class CatchStatement extends AstNode_1.Statement {
1610
1599
  constructor(tokens, exceptionVariable, catchBranch) {
1611
1600
  super();
1612
1601
  this.tokens = tokens;
@@ -1633,7 +1622,7 @@ class CatchStatement extends Statement {
1633
1622
  }
1634
1623
  }
1635
1624
  exports.CatchStatement = CatchStatement;
1636
- class ThrowStatement extends Statement {
1625
+ class ThrowStatement extends AstNode_1.Statement {
1637
1626
  constructor(throwToken, expression) {
1638
1627
  var _a;
1639
1628
  super();
@@ -1663,13 +1652,12 @@ class ThrowStatement extends Statement {
1663
1652
  }
1664
1653
  }
1665
1654
  exports.ThrowStatement = ThrowStatement;
1666
- class EnumStatement extends Statement {
1667
- constructor(tokens, body, namespaceName) {
1655
+ class EnumStatement extends AstNode_1.Statement {
1656
+ constructor(tokens, body) {
1668
1657
  var _a;
1669
1658
  super();
1670
1659
  this.tokens = tokens;
1671
1660
  this.body = body;
1672
- this.namespaceName = namespaceName;
1673
1661
  this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
1674
1662
  }
1675
1663
  get range() {
@@ -1690,7 +1678,7 @@ class EnumStatement extends Statement {
1690
1678
  * All values are stored as their AST LiteralExpression representation (i.e. string enum values include the wrapping quotes)
1691
1679
  */
1692
1680
  getMemberValueMap() {
1693
- var _a, _b, _c, _d, _e, _f, _g;
1681
+ var _a, _b, _c, _d, _e, _f, _g, _h;
1694
1682
  const result = new Map();
1695
1683
  const members = this.getMembers();
1696
1684
  let currentIntValue = 0;
@@ -1709,10 +1697,14 @@ class EnumStatement extends Statement {
1709
1697
  currentIntValue++;
1710
1698
  }
1711
1699
  result.set((_c = member.name) === null || _c === void 0 ? void 0 : _c.toLowerCase(), member.value.token.text);
1700
+ //simple unary expressions (like `-1`)
1701
+ }
1702
+ else if ((0, reflection_1.isUnaryExpression)(member.value) && (0, reflection_1.isLiteralExpression)(member.value.right)) {
1703
+ result.set((_d = member.name) === null || _d === void 0 ? void 0 : _d.toLowerCase(), member.value.operator.text + member.value.right.token.text);
1712
1704
  //all other values
1713
1705
  }
1714
1706
  else {
1715
- result.set((_d = member.name) === null || _d === void 0 ? void 0 : _d.toLowerCase(), (_g = (_f = (_e = member.value) === null || _e === void 0 ? void 0 : _e.token) === null || _f === void 0 ? void 0 : _f.text) !== null && _g !== void 0 ? _g : 'invalid');
1707
+ result.set((_e = member.name) === null || _e === void 0 ? void 0 : _e.toLowerCase(), (_h = (_g = (_f = member.value) === null || _f === void 0 ? void 0 : _f.token) === null || _g === void 0 ? void 0 : _g.text) !== null && _h !== void 0 ? _h : 'invalid');
1716
1708
  }
1717
1709
  }
1718
1710
  return result;
@@ -1734,8 +1726,9 @@ class EnumStatement extends Statement {
1734
1726
  var _a;
1735
1727
  const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
1736
1728
  if (name) {
1737
- if (this.namespaceName) {
1738
- let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
1729
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1730
+ if (namespace) {
1731
+ let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
1739
1732
  return `${namespaceName}.${name}`;
1740
1733
  }
1741
1734
  else {
@@ -1776,7 +1769,7 @@ class EnumStatement extends Statement {
1776
1769
  }
1777
1770
  }
1778
1771
  exports.EnumStatement = EnumStatement;
1779
- class EnumMemberStatement extends Statement {
1772
+ class EnumMemberStatement extends AstNode_1.Statement {
1780
1773
  constructor(tokens, value) {
1781
1774
  super();
1782
1775
  this.tokens = tokens;
@@ -1814,12 +1807,11 @@ class EnumMemberStatement extends Statement {
1814
1807
  }
1815
1808
  }
1816
1809
  exports.EnumMemberStatement = EnumMemberStatement;
1817
- class ConstStatement extends Statement {
1818
- constructor(tokens, value, namespaceName) {
1810
+ class ConstStatement extends AstNode_1.Statement {
1811
+ constructor(tokens, value) {
1819
1812
  super();
1820
1813
  this.tokens = tokens;
1821
1814
  this.value = value;
1822
- this.namespaceName = namespaceName;
1823
1815
  this.range = util_1.util.createBoundingRange(this.tokens.const, this.tokens.name, this.tokens.equals, this.value);
1824
1816
  }
1825
1817
  get name() {
@@ -1832,8 +1824,9 @@ class ConstStatement extends Statement {
1832
1824
  var _a;
1833
1825
  const name = (_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text;
1834
1826
  if (name) {
1835
- if (this.namespaceName) {
1836
- let namespaceName = this.namespaceName.getName(Parser_1.ParseMode.BrighterScript);
1827
+ const namespace = this.findAncestor(reflection_1.isNamespaceStatement);
1828
+ if (namespace) {
1829
+ let namespaceName = namespace.getName(Parser_1.ParseMode.BrighterScript);
1837
1830
  return `${namespaceName}.${name}`;
1838
1831
  }
1839
1832
  else {
@@ -1867,4 +1860,25 @@ class ConstStatement extends Statement {
1867
1860
  }
1868
1861
  }
1869
1862
  exports.ConstStatement = ConstStatement;
1863
+ class ContinueStatement extends AstNode_1.Statement {
1864
+ constructor(tokens) {
1865
+ super();
1866
+ this.tokens = tokens;
1867
+ }
1868
+ get range() {
1869
+ return this.tokens.continue.range;
1870
+ }
1871
+ transpile(state) {
1872
+ var _a, _b, _c, _d, _e;
1873
+ return [
1874
+ state.sourceNode(this.tokens.continue, (_b = (_a = this.tokens.continue) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : 'continue'),
1875
+ (_d = (_c = this.tokens.loopType) === null || _c === void 0 ? void 0 : _c.leadingWhitespace) !== null && _d !== void 0 ? _d : ' ',
1876
+ state.sourceNode(this.tokens.continue, (_e = this.tokens.loopType) === null || _e === void 0 ? void 0 : _e.text)
1877
+ ];
1878
+ }
1879
+ walk(visitor, options) {
1880
+ //nothing to walk
1881
+ }
1882
+ }
1883
+ exports.ContinueStatement = ContinueStatement;
1870
1884
  //# sourceMappingURL=Statement.js.map