brighterscript 1.0.0-alpha.26 → 1.0.0-alpha.27

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 (128) hide show
  1. package/CHANGELOG.md +21 -5
  2. package/dist/AstValidationSegmenter.d.ts +1 -1
  3. package/dist/AstValidationSegmenter.js +2 -3
  4. package/dist/AstValidationSegmenter.js.map +1 -1
  5. package/dist/DiagnosticMessages.d.ts +1 -3
  6. package/dist/DiagnosticMessages.js +5 -8
  7. package/dist/DiagnosticMessages.js.map +1 -1
  8. package/dist/Program.js +24 -25
  9. package/dist/Program.js.map +1 -1
  10. package/dist/Scope.d.ts +2 -8
  11. package/dist/Scope.js +20 -22
  12. package/dist/Scope.js.map +1 -1
  13. package/dist/SymbolTable.d.ts +1 -8
  14. package/dist/SymbolTable.js +1 -10
  15. package/dist/SymbolTable.js.map +1 -1
  16. package/dist/SymbolTableFlag.d.ts +8 -0
  17. package/dist/SymbolTableFlag.js +13 -0
  18. package/dist/SymbolTableFlag.js.map +1 -0
  19. package/dist/XmlScope.d.ts +1 -1
  20. package/dist/XmlScope.js +6 -7
  21. package/dist/XmlScope.js.map +1 -1
  22. package/dist/astUtils/CachedLookups.d.ts +1 -2
  23. package/dist/astUtils/CachedLookups.js +0 -11
  24. package/dist/astUtils/CachedLookups.js.map +1 -1
  25. package/dist/astUtils/creators.js +45 -6
  26. package/dist/astUtils/creators.js.map +1 -1
  27. package/dist/astUtils/reflection.d.ts +2 -0
  28. package/dist/astUtils/reflection.js +11 -3
  29. package/dist/astUtils/reflection.js.map +1 -1
  30. package/dist/astUtils/reflection.spec.js +1 -1
  31. package/dist/astUtils/reflection.spec.js.map +1 -1
  32. package/dist/bscPlugin/completions/CompletionsProcessor.js +20 -20
  33. package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
  34. package/dist/bscPlugin/hover/HoverProcessor.d.ts +1 -0
  35. package/dist/bscPlugin/hover/HoverProcessor.js +26 -6
  36. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  37. package/dist/bscPlugin/hover/HoverProcessor.spec.js +74 -2
  38. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  39. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +2 -3
  40. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  41. package/dist/bscPlugin/validation/BrsFileValidator.js +25 -26
  42. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  43. package/dist/bscPlugin/validation/ScopeValidator.d.ts +6 -0
  44. package/dist/bscPlugin/validation/ScopeValidator.js +70 -20
  45. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  46. package/dist/bscPlugin/validation/ScopeValidator.spec.js +92 -10
  47. package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
  48. package/dist/diagnosticUtils.d.ts +1 -1
  49. package/dist/files/BrsFile.Class.spec.js +4 -3
  50. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  51. package/dist/files/BrsFile.d.ts +3 -4
  52. package/dist/files/BrsFile.js +19 -112
  53. package/dist/files/BrsFile.js.map +1 -1
  54. package/dist/files/BrsFile.spec.js +56 -156
  55. package/dist/files/BrsFile.spec.js.map +1 -1
  56. package/dist/files/XmlFile.d.ts +2 -3
  57. package/dist/files/XmlFile.js +0 -2
  58. package/dist/files/XmlFile.js.map +1 -1
  59. package/dist/interfaces.d.ts +77 -83
  60. package/dist/interfaces.js +9 -9
  61. package/dist/interfaces.js.map +1 -1
  62. package/dist/parser/Expression.d.ts +85 -91
  63. package/dist/parser/Expression.js +50 -28
  64. package/dist/parser/Expression.js.map +1 -1
  65. package/dist/parser/Parser.Class.spec.js +15 -16
  66. package/dist/parser/Parser.Class.spec.js.map +1 -1
  67. package/dist/parser/Parser.d.ts +1 -2
  68. package/dist/parser/Parser.js +68 -62
  69. package/dist/parser/Parser.js.map +1 -1
  70. package/dist/parser/Parser.spec.js +27 -28
  71. package/dist/parser/Parser.spec.js.map +1 -1
  72. package/dist/parser/SGParser.js +49 -35
  73. package/dist/parser/SGParser.js.map +1 -1
  74. package/dist/parser/SGTypes.d.ts +36 -24
  75. package/dist/parser/SGTypes.js +26 -55
  76. package/dist/parser/SGTypes.js.map +1 -1
  77. package/dist/parser/Statement.d.ts +138 -139
  78. package/dist/parser/Statement.js +50 -37
  79. package/dist/parser/Statement.js.map +1 -1
  80. package/dist/parser/tests/expression/TypeExpression.spec.js +8 -9
  81. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -1
  82. package/dist/parser/tests/statement/TryCatch.spec.js +9 -2
  83. package/dist/parser/tests/statement/TryCatch.spec.js.map +1 -1
  84. package/dist/roku-types/data.json +70 -52
  85. package/dist/roku-types/index.d.ts +43 -21
  86. package/dist/types/ArrayType.js +1 -2
  87. package/dist/types/ArrayType.js.map +1 -1
  88. package/dist/types/ArrayType.spec.js +7 -8
  89. package/dist/types/ArrayType.spec.js.map +1 -1
  90. package/dist/types/AssociativeArrayType.js +2 -3
  91. package/dist/types/AssociativeArrayType.js.map +1 -1
  92. package/dist/types/BscType.d.ts +1 -1
  93. package/dist/types/BscType.js +2 -3
  94. package/dist/types/BscType.js.map +1 -1
  95. package/dist/types/BuiltInInterfaceAdder.js +7 -8
  96. package/dist/types/BuiltInInterfaceAdder.js.map +1 -1
  97. package/dist/types/BuiltInInterfaceAdder.spec.js +31 -32
  98. package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -1
  99. package/dist/types/ClassType.spec.js +10 -11
  100. package/dist/types/ClassType.spec.js.map +1 -1
  101. package/dist/types/ComponentType.d.ts +2 -1
  102. package/dist/types/ComponentType.js.map +1 -1
  103. package/dist/types/EnumType.js +2 -3
  104. package/dist/types/EnumType.js.map +1 -1
  105. package/dist/types/InheritableType.js +3 -4
  106. package/dist/types/InheritableType.js.map +1 -1
  107. package/dist/types/InterfaceType.js +2 -3
  108. package/dist/types/InterfaceType.js.map +1 -1
  109. package/dist/types/InterfaceType.spec.js +3 -4
  110. package/dist/types/InterfaceType.spec.js.map +1 -1
  111. package/dist/types/ObjectType.js +1 -2
  112. package/dist/types/ObjectType.js.map +1 -1
  113. package/dist/types/ReferenceType.d.ts +1 -1
  114. package/dist/types/ReferenceType.spec.js +21 -22
  115. package/dist/types/ReferenceType.spec.js.map +1 -1
  116. package/dist/types/UnionType.js +3 -3
  117. package/dist/types/UnionType.js.map +1 -1
  118. package/dist/types/UnionType.spec.js +37 -38
  119. package/dist/types/UnionType.spec.js.map +1 -1
  120. package/dist/types/helper.spec.js +4 -5
  121. package/dist/types/helper.spec.js.map +1 -1
  122. package/dist/util.d.ts +3 -3
  123. package/dist/util.js +20 -19
  124. package/dist/util.js.map +1 -1
  125. package/dist/validators/ClassValidator.d.ts +0 -9
  126. package/dist/validators/ClassValidator.js +3 -46
  127. package/dist/validators/ClassValidator.js.map +1 -1
  128. package/package.json +1 -1
@@ -8,10 +8,9 @@ const Parser_1 = require("./Parser");
8
8
  const visitors_1 = require("../astUtils/visitors");
9
9
  const reflection_1 = require("../astUtils/reflection");
10
10
  const interfaces_1 = require("../interfaces");
11
- const SymbolTable_1 = require("../SymbolTable");
12
11
  const creators_1 = require("../astUtils/creators");
13
12
  const DynamicType_1 = require("../types/DynamicType");
14
- const SymbolTable_2 = require("../SymbolTable");
13
+ const SymbolTable_1 = require("../SymbolTable");
15
14
  const AstNode_1 = require("./AstNode");
16
15
  const AstNode_2 = require("./AstNode");
17
16
  const ClassType_1 = require("../types/ClassType");
@@ -20,7 +19,7 @@ const NamespaceType_1 = require("../types/NamespaceType");
20
19
  const InterfaceType_1 = require("../types/InterfaceType");
21
20
  const VoidType_1 = require("../types/VoidType");
22
21
  const TypedFunctionType_1 = require("../types/TypedFunctionType");
23
- const types_1 = require("../types");
22
+ const ArrayType_1 = require("../types/ArrayType");
24
23
  class EmptyStatement extends AstNode_2.Statement {
25
24
  constructor(options) {
26
25
  var _a;
@@ -45,7 +44,7 @@ class Body extends AstNode_2.Statement {
45
44
  super();
46
45
  this.statements = [];
47
46
  this.kind = AstNode_1.AstNodeKind.Body;
48
- this.symbolTable = new SymbolTable_2.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
47
+ this.symbolTable = new SymbolTable_1.SymbolTable('Body', () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
49
48
  this.statements = (_a = options === null || options === void 0 ? void 0 : options.statements) !== null && _a !== void 0 ? _a : [];
50
49
  }
51
50
  get range() {
@@ -139,7 +138,7 @@ class AssignmentStatement extends AstNode_2.Statement {
139
138
  const variableType = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }))) !== null && _b !== void 0 ? _b : this.value.getType(Object.assign(Object.assign({}, options), { typeChain: undefined }));
140
139
  // Note: compound assignments (eg. +=) are internally dealt with via the RHS being a BinaryExpression
141
140
  // so this.value will be a BinaryExpression, and BinaryExpressions can figure out their own types
142
- (_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry(this.tokens.name.text, variableType, options.data, this.tokens.name.range));
141
+ (_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry({ name: this.tokens.name.text, type: variableType, data: options.data, range: this.tokens.name.range, kind: this.kind }));
143
142
  return variableType;
144
143
  }
145
144
  }
@@ -151,7 +150,7 @@ class Block extends AstNode_2.Statement {
151
150
  this.kind = AstNode_1.AstNodeKind.Block;
152
151
  this.statements = options.statements;
153
152
  this.startingRange = options.startingRange;
154
- this.range = util_1.util.createBoundingRange({ range: this.startingRange }, ...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
153
+ this.range = util_1.util.createBoundingRange(this.startingRange, ...((_a = this.statements) !== null && _a !== void 0 ? _a : []));
155
154
  }
156
155
  transpile(state) {
157
156
  state.blockDepth++;
@@ -282,12 +281,15 @@ class ExitWhileStatement extends AstNode_2.Statement {
282
281
  exports.ExitWhileStatement = ExitWhileStatement;
283
282
  class FunctionStatement extends AstNode_2.Statement {
284
283
  constructor(options) {
284
+ var _a;
285
285
  super();
286
286
  this.kind = AstNode_1.AstNodeKind.FunctionStatement;
287
287
  this.tokens = {
288
288
  name: options.name
289
289
  };
290
290
  this.func = options.func;
291
+ this.func.symbolTable.name += `: '${(_a = this.tokens.name) === null || _a === void 0 ? void 0 : _a.text}'`;
292
+ this.func.functionStatement = this;
291
293
  this.range = this.func.range;
292
294
  }
293
295
  /**
@@ -539,9 +541,9 @@ class DimStatement extends AstNode_2.Statement {
539
541
  getType(options) {
540
542
  var _a, _b;
541
543
  const numDimensions = (_b = (_a = this.dimensions) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 1;
542
- let type = new types_1.ArrayType();
544
+ let type = new ArrayType_1.ArrayType();
543
545
  for (let i = 0; i < numDimensions - 1; i++) {
544
- type = new types_1.ArrayType(type);
546
+ type = new ArrayType_1.ArrayType(type);
545
547
  }
546
548
  return type;
547
549
  }
@@ -834,7 +836,12 @@ class DottedSetStatement extends AstNode_2.Statement {
834
836
  var _a, _b, _c, _d, _e, _f;
835
837
  const objType = (_a = this.obj) === null || _a === void 0 ? void 0 : _a.getType(options);
836
838
  const result = objType === null || objType === void 0 ? void 0 : objType.getMemberType((_b = this.tokens.name) === null || _b === void 0 ? void 0 : _b.text, options);
837
- (_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry((_d = this.tokens.name) === null || _d === void 0 ? void 0 : _d.text, result, options.data, (_f = (_e = this.tokens.name) === null || _e === void 0 ? void 0 : _e.range) !== null && _f !== void 0 ? _f : this.range));
839
+ (_c = options.typeChain) === null || _c === void 0 ? void 0 : _c.push(new interfaces_1.TypeChainEntry({
840
+ name: (_d = this.tokens.name) === null || _d === void 0 ? void 0 : _d.text,
841
+ type: result, data: options.data,
842
+ range: (_f = (_e = this.tokens.name) === null || _e === void 0 ? void 0 : _e.range) !== null && _f !== void 0 ? _f : this.range,
843
+ kind: this.kind
844
+ }));
838
845
  return result;
839
846
  }
840
847
  }
@@ -924,7 +931,7 @@ class NamespaceStatement extends AstNode_2.Statement {
924
931
  this.nameExpression = options.nameExpression;
925
932
  this.body = options.body;
926
933
  this.name = this.getName(Parser_1.ParseMode.BrighterScript);
927
- this.symbolTable = new SymbolTable_2.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
934
+ this.symbolTable = new SymbolTable_1.SymbolTable(`NamespaceStatement: '${this.name}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
928
935
  }
929
936
  get range() {
930
937
  return this.cacheRange();
@@ -993,14 +1000,14 @@ class ImportStatement extends AstNode_2.Statement {
993
1000
  this.kind = AstNode_1.AstNodeKind.ImportStatement;
994
1001
  this.tokens = {
995
1002
  import: options.import,
996
- filePath: options.filePath
1003
+ path: options.path
997
1004
  };
998
- this.range = util_1.util.createBoundingRange(this.tokens.import, this.tokens.filePath);
999
- if (this.tokens.filePath) {
1005
+ this.range = util_1.util.createBoundingRange(this.tokens.import, this.tokens.path);
1006
+ if (this.tokens.path) {
1000
1007
  //remove quotes
1001
- this.filePath = this.tokens.filePath.text.replace(/"/g, '');
1008
+ this.filePath = this.tokens.path.text.replace(/"/g, '');
1002
1009
  //adjust the range to exclude the quotes
1003
- this.tokens.filePath.range = util_1.util.createRange(this.tokens.filePath.range.start.line, this.tokens.filePath.range.start.character + 1, this.tokens.filePath.range.end.line, this.tokens.filePath.range.end.character - 1);
1010
+ this.tokens.path.range = util_1.util.createRange(this.tokens.path.range.start.line, this.tokens.path.range.start.character + 1, this.tokens.path.range.end.line, this.tokens.path.range.end.character - 1);
1004
1011
  }
1005
1012
  }
1006
1013
  transpile(state) {
@@ -1010,7 +1017,7 @@ class ImportStatement extends AstNode_2.Statement {
1010
1017
  `'`,
1011
1018
  state.transpileToken(this.tokens.import, 'import'),
1012
1019
  ' ',
1013
- state.transpileToken(this.tokens.filePath)
1020
+ state.transpileToken(this.tokens.path)
1014
1021
  ];
1015
1022
  }
1016
1023
  /**
@@ -1022,7 +1029,7 @@ class ImportStatement extends AstNode_2.Statement {
1022
1029
  (_b = (_a = this.tokens.import) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : 'import',
1023
1030
  ' ',
1024
1031
  //replace any `.bs` extension with `.brs`
1025
- this.tokens.filePath.text.replace(/\.bs"?$/i, '.brs"')
1032
+ this.tokens.path.text.replace(/\.bs"?$/i, '.brs"')
1026
1033
  ];
1027
1034
  }
1028
1035
  walk(visitor, options) {
@@ -1145,15 +1152,21 @@ class InterfaceStatement extends AstNode_2.Statement {
1145
1152
  const resultType = new InterfaceType_1.InterfaceType(this.getName(Parser_1.ParseMode.BrighterScript), superIface);
1146
1153
  for (const statement of this.methods) {
1147
1154
  const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1148
- const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
1155
+ const flag = statement.isOptional ? 1 /* SymbolTypeFlag.runtime */ | 4 /* SymbolTypeFlag.optional */ : 1 /* SymbolTypeFlag.runtime */;
1149
1156
  resultType.addMember((_b = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _b === void 0 ? void 0 : _b.text, { definingNode: statement }, memberType, flag);
1150
1157
  }
1151
1158
  for (const statement of this.fields) {
1152
1159
  const memberType = statement === null || statement === void 0 ? void 0 : statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); // no typechain info needed
1153
- const flag = statement.isOptional ? SymbolTable_1.SymbolTypeFlag.runtime | SymbolTable_1.SymbolTypeFlag.optional : SymbolTable_1.SymbolTypeFlag.runtime;
1160
+ const flag = statement.isOptional ? 1 /* SymbolTypeFlag.runtime */ | 4 /* SymbolTypeFlag.optional */ : 1 /* SymbolTypeFlag.runtime */;
1154
1161
  resultType.addMember((_c = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, memberType, flag);
1155
1162
  }
1156
- (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(this.getName(Parser_1.ParseMode.BrighterScript), resultType, options.data, this.range));
1163
+ (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry({
1164
+ name: this.getName(Parser_1.ParseMode.BrighterScript),
1165
+ type: resultType,
1166
+ data: options.data,
1167
+ range: this.range,
1168
+ kind: this.kind
1169
+ }));
1157
1170
  return resultType;
1158
1171
  }
1159
1172
  }
@@ -1299,7 +1312,7 @@ class InterfaceMethodStatement extends AstNode_2.Statement {
1299
1312
  }
1300
1313
  let funcName = this.getName(Parser_1.ParseMode.BrighterScript);
1301
1314
  resultType.setName(funcName);
1302
- (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
1315
+ (_d = options.typeChain) === null || _d === void 0 ? void 0 : _d.push(new interfaces_1.TypeChainEntry({ name: resultType.name, type: resultType, data: options.data, range: this.range, kind: this.kind }));
1303
1316
  return resultType;
1304
1317
  }
1305
1318
  }
@@ -1320,7 +1333,7 @@ class ClassStatement extends AstNode_2.Statement {
1320
1333
  extends: options.extends
1321
1334
  };
1322
1335
  this.parentClassName = options.parentClassName;
1323
- this.symbolTable = new SymbolTable_2.SymbolTable(`ClassStatement: '${(_b = this.tokens.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
1336
+ this.symbolTable = new SymbolTable_1.SymbolTable(`ClassStatement: '${(_b = this.tokens.name) === null || _b === void 0 ? void 0 : _b.text}'`, () => { var _a; return (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getSymbolTable(); });
1324
1337
  for (let statement of this.body) {
1325
1338
  if ((0, reflection_1.isMethodStatement)(statement)) {
1326
1339
  this.methods.push(statement);
@@ -1459,8 +1472,8 @@ class ClassStatement extends AstNode_2.Statement {
1459
1472
  }
1460
1473
  getConstructorType() {
1461
1474
  var _a, _b;
1462
- const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime })) !== null && _b !== void 0 ? _b : new TypedFunctionType_1.TypedFunctionType(null);
1463
- constructorType.returnType = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.runtime });
1475
+ const constructorType = (_b = (_a = this.getConstructorFunction()) === null || _a === void 0 ? void 0 : _a.getType({ flags: 1 /* SymbolTypeFlag.runtime */ })) !== null && _b !== void 0 ? _b : new TypedFunctionType_1.TypedFunctionType(null);
1476
+ constructorType.returnType = this.getType({ flags: 1 /* SymbolTypeFlag.runtime */ });
1464
1477
  return constructorType;
1465
1478
  }
1466
1479
  /**
@@ -1605,30 +1618,30 @@ class ClassStatement extends AstNode_2.Statement {
1605
1618
  const resultType = new ClassType_1.ClassType(this.getName(Parser_1.ParseMode.BrighterScript), superClass);
1606
1619
  for (const statement of this.methods) {
1607
1620
  const funcType = statement === null || statement === void 0 ? void 0 : statement.func.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1608
- let flag = SymbolTable_1.SymbolTypeFlag.runtime;
1621
+ let flag = 1 /* SymbolTypeFlag.runtime */;
1609
1622
  if (((_b = statement.accessModifier) === null || _b === void 0 ? void 0 : _b.kind) === TokenKind_1.TokenKind.Private) {
1610
- flag |= SymbolTable_1.SymbolTypeFlag.private;
1623
+ flag |= 8 /* SymbolTypeFlag.private */;
1611
1624
  }
1612
1625
  if (((_c = statement.accessModifier) === null || _c === void 0 ? void 0 : _c.kind) === TokenKind_1.TokenKind.Protected) {
1613
- flag |= SymbolTable_1.SymbolTypeFlag.protected;
1626
+ flag |= 16 /* SymbolTypeFlag.protected */;
1614
1627
  }
1615
1628
  resultType.addMember((_d = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _d === void 0 ? void 0 : _d.text, { definingNode: statement }, funcType, flag);
1616
1629
  }
1617
1630
  for (const statement of this.fields) {
1618
1631
  const fieldType = statement.getType(Object.assign(Object.assign({}, options), { typeChain: undefined })); //no typechain needed
1619
- let flag = SymbolTable_1.SymbolTypeFlag.runtime;
1632
+ let flag = 1 /* SymbolTypeFlag.runtime */;
1620
1633
  if (statement.isOptional) {
1621
- flag |= SymbolTable_1.SymbolTypeFlag.optional;
1634
+ flag |= 4 /* SymbolTypeFlag.optional */;
1622
1635
  }
1623
1636
  if (((_e = statement.tokens.accessModifier) === null || _e === void 0 ? void 0 : _e.kind) === TokenKind_1.TokenKind.Private) {
1624
- flag |= SymbolTable_1.SymbolTypeFlag.private;
1637
+ flag |= 8 /* SymbolTypeFlag.private */;
1625
1638
  }
1626
1639
  if (((_f = statement.tokens.accessModifier) === null || _f === void 0 ? void 0 : _f.kind) === TokenKind_1.TokenKind.Protected) {
1627
- flag |= SymbolTable_1.SymbolTypeFlag.protected;
1640
+ flag |= 16 /* SymbolTypeFlag.protected */;
1628
1641
  }
1629
1642
  resultType.addMember((_g = statement === null || statement === void 0 ? void 0 : statement.tokens.name) === null || _g === void 0 ? void 0 : _g.text, { definingNode: statement }, fieldType, flag);
1630
1643
  }
1631
- (_h = options.typeChain) === null || _h === void 0 ? void 0 : _h.push(new interfaces_1.TypeChainEntry(resultType.name, resultType, options.data, this.range));
1644
+ (_h = options.typeChain) === null || _h === void 0 ? void 0 : _h.push(new interfaces_1.TypeChainEntry({ name: resultType.name, type: resultType, data: options.data, range: this.range, kind: this.kind }));
1632
1645
  return resultType;
1633
1646
  }
1634
1647
  }
@@ -1822,7 +1835,7 @@ class FieldStatement extends AstNode_2.Statement {
1822
1835
  */
1823
1836
  getType(options) {
1824
1837
  var _a, _b, _c, _d;
1825
- return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.typetime }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: SymbolTable_1.SymbolTypeFlag.runtime }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
1838
+ return (_d = (_b = (_a = this.typeExpression) === null || _a === void 0 ? void 0 : _a.getType(Object.assign(Object.assign({}, options), { flags: 2 /* SymbolTypeFlag.typetime */ }))) !== null && _b !== void 0 ? _b : (_c = this.initialValue) === null || _c === void 0 ? void 0 : _c.getType(Object.assign(Object.assign({}, options), { flags: 1 /* SymbolTypeFlag.runtime */ }))) !== null && _d !== void 0 ? _d : DynamicType_1.DynamicType.instance;
1826
1839
  }
1827
1840
  getLeadingTrivia() {
1828
1841
  var _a, _b, _c, _d, _e, _f;
@@ -1841,7 +1854,7 @@ class FieldStatement extends AstNode_2.Statement {
1841
1854
  for (let annotation of (_a = this.annotations) !== null && _a !== void 0 ? _a : []) {
1842
1855
  result.push(...annotation.getTypedef(state), state.newline, state.indent());
1843
1856
  }
1844
- let type = this.getType({ flags: SymbolTable_1.SymbolTypeFlag.typetime });
1857
+ let type = this.getType({ flags: 2 /* SymbolTypeFlag.typetime */ });
1845
1858
  if ((0, reflection_1.isInvalidType)(type) || (0, reflection_1.isVoidType)(type)) {
1846
1859
  type = new DynamicType_1.DynamicType();
1847
1860
  }
@@ -1958,13 +1971,13 @@ class EnumStatement extends AstNode_2.Statement {
1958
1971
  var _a;
1959
1972
  super();
1960
1973
  this.kind = AstNode_1.AstNodeKind.EnumStatement;
1961
- this.symbolTable = new SymbolTable_2.SymbolTable('Enum');
1962
1974
  this.tokens = {
1963
1975
  enum: options.enum,
1964
1976
  name: options.name,
1965
1977
  endEnum: options.endEnum
1966
1978
  };
1967
- this.body = (_a = this.body) !== null && _a !== void 0 ? _a : [];
1979
+ this.symbolTable = new SymbolTable_1.SymbolTable('Enum');
1980
+ this.body = (_a = options.body) !== null && _a !== void 0 ? _a : [];
1968
1981
  }
1969
1982
  get range() {
1970
1983
  return util_1.util.createBoundingRange(this.tokens.enum, this.tokens.name, ...this.body, this.tokens.endEnum);
@@ -2081,7 +2094,7 @@ class EnumStatement extends AstNode_2.Statement {
2081
2094
  const resultType = new EnumType_1.EnumType(this.fullName, (_a = members[0]) === null || _a === void 0 ? void 0 : _a.getType(options).underlyingType);
2082
2095
  resultType.pushMemberProvider(() => this.getSymbolTable());
2083
2096
  for (const statement of members) {
2084
- resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), SymbolTable_1.SymbolTypeFlag.runtime);
2097
+ resultType.addMember((_c = (_b = statement === null || statement === void 0 ? void 0 : statement.tokens) === null || _b === void 0 ? void 0 : _b.name) === null || _c === void 0 ? void 0 : _c.text, { definingNode: statement }, statement.getType(options), 1 /* SymbolTypeFlag.runtime */);
2085
2098
  }
2086
2099
  return resultType;
2087
2100
  }