brighterscript 0.65.1 → 0.66.0-alpha.1

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 (254) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +8 -0
  3. package/dist/BsConfig.d.ts +5 -11
  4. package/dist/CacheVerifier.d.ts +8 -0
  5. package/dist/CacheVerifier.js +20 -0
  6. package/dist/CacheVerifier.js.map +1 -0
  7. package/dist/DiagnosticMessages.d.ts +9 -4
  8. package/dist/DiagnosticMessages.js +8 -3
  9. package/dist/DiagnosticMessages.js.map +1 -1
  10. package/dist/FunctionScope.d.ts +1 -0
  11. package/dist/FunctionScope.js +3 -0
  12. package/dist/FunctionScope.js.map +1 -1
  13. package/dist/PluginInterface.d.ts +0 -4
  14. package/dist/PluginInterface.js.map +1 -1
  15. package/dist/Program.d.ts +6 -39
  16. package/dist/Program.js +94 -68
  17. package/dist/Program.js.map +1 -1
  18. package/dist/ProgramBuilder.d.ts +4 -0
  19. package/dist/ProgramBuilder.js +33 -13
  20. package/dist/ProgramBuilder.js.map +1 -1
  21. package/dist/Scope.d.ts +1 -5
  22. package/dist/Scope.js +53 -37
  23. package/dist/Scope.js.map +1 -1
  24. package/dist/SymbolTable.d.ts +44 -6
  25. package/dist/SymbolTable.js +154 -26
  26. package/dist/SymbolTable.js.map +1 -1
  27. package/dist/XmlScope.js +11 -12
  28. package/dist/XmlScope.js.map +1 -1
  29. package/dist/astUtils/creators.d.ts +16 -6
  30. package/dist/astUtils/creators.js +39 -16
  31. package/dist/astUtils/creators.js.map +1 -1
  32. package/dist/astUtils/reflection.d.ts +46 -37
  33. package/dist/astUtils/reflection.js +145 -147
  34. package/dist/astUtils/reflection.js.map +1 -1
  35. package/dist/astUtils/reflection.spec.js +1 -6
  36. package/dist/astUtils/reflection.spec.js.map +1 -1
  37. package/dist/astUtils/visitors.d.ts +4 -11
  38. package/dist/astUtils/visitors.js +0 -7
  39. package/dist/astUtils/visitors.js.map +1 -1
  40. package/dist/astUtils/visitors.spec.js +8 -6
  41. package/dist/astUtils/visitors.spec.js.map +1 -1
  42. package/dist/astUtils/xml.d.ts +9 -9
  43. package/dist/astUtils/xml.js +6 -6
  44. package/dist/astUtils/xml.js.map +1 -1
  45. package/dist/bscPlugin/BscPlugin.d.ts +2 -3
  46. package/dist/bscPlugin/BscPlugin.js +6 -2
  47. package/dist/bscPlugin/BscPlugin.js.map +1 -1
  48. package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
  49. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +2 -2
  50. package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
  51. package/dist/bscPlugin/hover/HoverProcessor.js +71 -59
  52. package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
  53. package/dist/bscPlugin/hover/HoverProcessor.spec.js +110 -10
  54. package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
  55. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +6 -5
  56. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
  57. package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
  58. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +1 -1
  59. package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
  60. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +11 -0
  61. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +53 -0
  62. package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
  63. package/dist/bscPlugin/validation/BrsFileValidator.d.ts +4 -0
  64. package/dist/bscPlugin/validation/BrsFileValidator.js +37 -16
  65. package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
  66. package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1 -1
  67. package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
  68. package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
  69. package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
  70. package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
  71. package/dist/bscPlugin/validation/ScopeValidator.d.ts +1 -0
  72. package/dist/bscPlugin/validation/ScopeValidator.js +72 -18
  73. package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
  74. package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
  75. package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
  76. package/dist/files/BrsFile.Class.spec.js +9 -10
  77. package/dist/files/BrsFile.Class.spec.js.map +1 -1
  78. package/dist/files/BrsFile.d.ts +8 -10
  79. package/dist/files/BrsFile.js +72 -52
  80. package/dist/files/BrsFile.js.map +1 -1
  81. package/dist/files/BrsFile.spec.js +57 -15
  82. package/dist/files/BrsFile.spec.js.map +1 -1
  83. package/dist/files/XmlFile.d.ts +19 -19
  84. package/dist/files/XmlFile.js +24 -42
  85. package/dist/files/XmlFile.js.map +1 -1
  86. package/dist/files/XmlFile.spec.js +70 -17
  87. package/dist/files/XmlFile.spec.js.map +1 -1
  88. package/dist/files/tests/imports.spec.js +8 -11
  89. package/dist/files/tests/imports.spec.js.map +1 -1
  90. package/dist/globalCallables.js +2 -1
  91. package/dist/globalCallables.js.map +1 -1
  92. package/dist/index.d.ts +2 -0
  93. package/dist/index.js +2 -0
  94. package/dist/index.js.map +1 -1
  95. package/dist/interfaces.d.ts +107 -28
  96. package/dist/interfaces.js +13 -0
  97. package/dist/interfaces.js.map +1 -1
  98. package/dist/lexer/TokenKind.d.ts +2 -0
  99. package/dist/lexer/TokenKind.js +5 -1
  100. package/dist/lexer/TokenKind.js.map +1 -1
  101. package/dist/parser/AstNode.d.ts +78 -1
  102. package/dist/parser/AstNode.js +80 -1
  103. package/dist/parser/AstNode.js.map +1 -1
  104. package/dist/parser/Expression.d.ts +87 -53
  105. package/dist/parser/Expression.js +243 -139
  106. package/dist/parser/Expression.js.map +1 -1
  107. package/dist/parser/Parser.Class.spec.js +10 -7
  108. package/dist/parser/Parser.Class.spec.js.map +1 -1
  109. package/dist/parser/Parser.d.ts +9 -5
  110. package/dist/parser/Parser.js +125 -78
  111. package/dist/parser/Parser.js.map +1 -1
  112. package/dist/parser/Parser.spec.d.ts +2 -0
  113. package/dist/parser/Parser.spec.js +117 -5
  114. package/dist/parser/Parser.spec.js.map +1 -1
  115. package/dist/parser/SGParser.d.ts +42 -4
  116. package/dist/parser/SGParser.js +191 -195
  117. package/dist/parser/SGParser.js.map +1 -1
  118. package/dist/parser/SGParser.spec.js +13 -10
  119. package/dist/parser/SGParser.spec.js.map +1 -1
  120. package/dist/parser/SGTypes.d.ts +279 -51
  121. package/dist/parser/SGTypes.js +562 -185
  122. package/dist/parser/SGTypes.js.map +1 -1
  123. package/dist/parser/Statement.d.ts +88 -70
  124. package/dist/parser/Statement.js +212 -136
  125. package/dist/parser/Statement.js.map +1 -1
  126. package/dist/parser/TranspileState.d.ts +1 -1
  127. package/dist/parser/TranspileState.js +5 -2
  128. package/dist/parser/TranspileState.js.map +1 -1
  129. package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
  130. package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
  131. package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
  132. package/dist/types/ArrayType.d.ts +6 -4
  133. package/dist/types/ArrayType.js +30 -22
  134. package/dist/types/ArrayType.js.map +1 -1
  135. package/dist/types/ArrayType.spec.js +8 -8
  136. package/dist/types/ArrayType.spec.js.map +1 -1
  137. package/dist/types/BooleanType.d.ts +7 -4
  138. package/dist/types/BooleanType.js +13 -8
  139. package/dist/types/BooleanType.js.map +1 -1
  140. package/dist/types/BooleanType.spec.js +9 -3
  141. package/dist/types/BooleanType.spec.js.map +1 -1
  142. package/dist/types/BscType.d.ts +25 -2
  143. package/dist/types/BscType.js +64 -0
  144. package/dist/types/BscType.js.map +1 -1
  145. package/dist/types/BscTypeKind.d.ts +22 -0
  146. package/dist/types/BscTypeKind.js +27 -0
  147. package/dist/types/BscTypeKind.js.map +1 -0
  148. package/dist/types/ClassType.d.ts +11 -0
  149. package/dist/types/ClassType.js +31 -0
  150. package/dist/types/ClassType.js.map +1 -0
  151. package/dist/types/ClassType.spec.d.ts +1 -0
  152. package/dist/types/ClassType.spec.js +75 -0
  153. package/dist/types/ClassType.spec.js.map +1 -0
  154. package/dist/types/DoubleType.d.ts +7 -4
  155. package/dist/types/DoubleType.js +16 -20
  156. package/dist/types/DoubleType.js.map +1 -1
  157. package/dist/types/DoubleType.spec.js +11 -3
  158. package/dist/types/DoubleType.spec.js.map +1 -1
  159. package/dist/types/DynamicType.d.ts +9 -3
  160. package/dist/types/DynamicType.js +16 -2
  161. package/dist/types/DynamicType.js.map +1 -1
  162. package/dist/types/DynamicType.spec.js +15 -4
  163. package/dist/types/DynamicType.spec.js.map +1 -1
  164. package/dist/types/EnumType.d.ts +22 -0
  165. package/dist/types/EnumType.js +59 -0
  166. package/dist/types/EnumType.js.map +1 -0
  167. package/dist/types/EnumType.spec.d.ts +1 -0
  168. package/dist/types/EnumType.spec.js +33 -0
  169. package/dist/types/EnumType.spec.js.map +1 -0
  170. package/dist/types/FloatType.d.ts +7 -4
  171. package/dist/types/FloatType.js +16 -20
  172. package/dist/types/FloatType.js.map +1 -1
  173. package/dist/types/FloatType.spec.js +3 -3
  174. package/dist/types/FloatType.spec.js.map +1 -1
  175. package/dist/types/FunctionType.d.ts +6 -4
  176. package/dist/types/FunctionType.js +22 -19
  177. package/dist/types/FunctionType.js.map +1 -1
  178. package/dist/types/FunctionType.spec.js +5 -5
  179. package/dist/types/FunctionType.spec.js.map +1 -1
  180. package/dist/types/InheritableType.d.ts +25 -0
  181. package/dist/types/InheritableType.js +88 -0
  182. package/dist/types/InheritableType.js.map +1 -0
  183. package/dist/types/IntegerType.d.ts +7 -4
  184. package/dist/types/IntegerType.js +16 -20
  185. package/dist/types/IntegerType.js.map +1 -1
  186. package/dist/types/IntegerType.spec.js +7 -3
  187. package/dist/types/IntegerType.spec.js.map +1 -1
  188. package/dist/types/InterfaceType.d.ts +10 -10
  189. package/dist/types/InterfaceType.js +24 -45
  190. package/dist/types/InterfaceType.js.map +1 -1
  191. package/dist/types/InterfaceType.spec.js +59 -45
  192. package/dist/types/InterfaceType.spec.js.map +1 -1
  193. package/dist/types/InvalidType.d.ts +6 -4
  194. package/dist/types/InvalidType.js +12 -8
  195. package/dist/types/InvalidType.js.map +1 -1
  196. package/dist/types/InvalidType.spec.js +7 -3
  197. package/dist/types/InvalidType.spec.js.map +1 -1
  198. package/dist/types/LongIntegerType.d.ts +7 -4
  199. package/dist/types/LongIntegerType.js +16 -20
  200. package/dist/types/LongIntegerType.js.map +1 -1
  201. package/dist/types/LongIntegerType.spec.js +9 -3
  202. package/dist/types/LongIntegerType.spec.js.map +1 -1
  203. package/dist/types/NamespaceType.d.ts +11 -0
  204. package/dist/types/NamespaceType.js +25 -0
  205. package/dist/types/NamespaceType.js.map +1 -0
  206. package/dist/types/ObjectType.d.ts +8 -4
  207. package/dist/types/ObjectType.js +26 -7
  208. package/dist/types/ObjectType.js.map +1 -1
  209. package/dist/types/ObjectType.spec.js +2 -2
  210. package/dist/types/ObjectType.spec.js.map +1 -1
  211. package/dist/types/ReferenceType.d.ts +51 -0
  212. package/dist/types/ReferenceType.js +274 -0
  213. package/dist/types/ReferenceType.js.map +1 -0
  214. package/dist/types/ReferenceType.spec.d.ts +1 -0
  215. package/dist/types/ReferenceType.spec.js +122 -0
  216. package/dist/types/ReferenceType.spec.js.map +1 -0
  217. package/dist/types/StringType.d.ts +10 -4
  218. package/dist/types/StringType.js +16 -8
  219. package/dist/types/StringType.js.map +1 -1
  220. package/dist/types/StringType.spec.js +2 -2
  221. package/dist/types/StringType.spec.js.map +1 -1
  222. package/dist/types/UninitializedType.d.ts +6 -3
  223. package/dist/types/UninitializedType.js +14 -3
  224. package/dist/types/UninitializedType.js.map +1 -1
  225. package/dist/types/UnionType.d.ts +18 -0
  226. package/dist/types/UnionType.js +91 -0
  227. package/dist/types/UnionType.js.map +1 -0
  228. package/dist/types/UnionType.spec.d.ts +1 -0
  229. package/dist/types/UnionType.spec.js +103 -0
  230. package/dist/types/UnionType.spec.js.map +1 -0
  231. package/dist/types/VoidType.d.ts +7 -4
  232. package/dist/types/VoidType.js +13 -8
  233. package/dist/types/VoidType.js.map +1 -1
  234. package/dist/types/VoidType.spec.js +2 -2
  235. package/dist/types/VoidType.spec.js.map +1 -1
  236. package/dist/types/helper.spec.d.ts +1 -0
  237. package/dist/types/helper.spec.js +130 -0
  238. package/dist/types/helper.spec.js.map +1 -0
  239. package/dist/types/helpers.d.ts +19 -0
  240. package/dist/types/helpers.js +131 -0
  241. package/dist/types/helpers.js.map +1 -0
  242. package/dist/types/index.d.ts +22 -0
  243. package/dist/types/index.js +39 -0
  244. package/dist/types/index.js.map +1 -0
  245. package/dist/util.d.ts +9 -8
  246. package/dist/util.js +78 -32
  247. package/dist/util.js.map +1 -1
  248. package/dist/validators/ClassValidator.d.ts +0 -4
  249. package/dist/validators/ClassValidator.js +6 -30
  250. package/dist/validators/ClassValidator.js.map +1 -1
  251. package/package.json +2 -1
  252. package/dist/types/CustomType.d.ts +0 -9
  253. package/dist/types/CustomType.js +0 -32
  254. package/dist/types/CustomType.js.map +0 -1
@@ -1,9 +1,13 @@
1
- import type { BscType } from './BscType';
2
- export declare class ObjectType implements BscType {
1
+ import type { GetTypeOptions } from '../interfaces';
2
+ import { BscType } from './BscType';
3
+ import { BscTypeKind } from './BscTypeKind';
4
+ export declare class ObjectType extends BscType {
3
5
  typeText?: string;
4
6
  constructor(typeText?: string);
5
- isAssignableTo(targetType: BscType): boolean;
6
- isConvertibleTo(targetType: BscType): boolean;
7
+ readonly kind = BscTypeKind.ObjectType;
8
+ isTypeCompatible(targetType: BscType): boolean;
7
9
  toString(): string;
8
10
  toTypeString(): string;
11
+ getMemberType(name: string, options: GetTypeOptions): BscType;
12
+ isEqual(otherType: BscType): any;
9
13
  }
@@ -1,17 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ObjectType = void 0;
4
+ const SymbolTable_1 = require("../SymbolTable");
5
+ const reflection_1 = require("../astUtils/reflection");
6
+ const BscType_1 = require("./BscType");
7
+ const BscTypeKind_1 = require("./BscTypeKind");
4
8
  const DynamicType_1 = require("./DynamicType");
5
- class ObjectType {
9
+ class ObjectType extends BscType_1.BscType {
6
10
  constructor(typeText) {
11
+ super();
7
12
  this.typeText = typeText;
13
+ this.kind = BscTypeKind_1.BscTypeKind.ObjectType;
8
14
  }
9
- isAssignableTo(targetType) {
10
- return (targetType instanceof ObjectType ||
11
- targetType instanceof DynamicType_1.DynamicType);
12
- }
13
- isConvertibleTo(targetType) {
14
- return this.isAssignableTo(targetType);
15
+ isTypeCompatible(targetType) {
16
+ if ((0, reflection_1.isUnionType)(targetType)) {
17
+ return targetType.checkAllMemberTypes((type) => type.isTypeCompatible(this));
18
+ }
19
+ else if ((0, reflection_1.isObjectType)(targetType) ||
20
+ (0, reflection_1.isDynamicType)(targetType) ||
21
+ (0, reflection_1.isInheritableType)(targetType)) {
22
+ return true;
23
+ }
24
+ return false;
15
25
  }
16
26
  toString() {
17
27
  var _a;
@@ -20,6 +30,15 @@ class ObjectType {
20
30
  toTypeString() {
21
31
  return this.toString();
22
32
  }
33
+ getMemberType(name, options) {
34
+ var _a;
35
+ // TODO: How should we handle accessing properties of an object?
36
+ // For example, we could add fields as properties to m.top, but there could be other members added programmatically
37
+ return (_a = super.getMemberType(name, options)) !== null && _a !== void 0 ? _a : DynamicType_1.DynamicType.instance;
38
+ }
39
+ isEqual(otherType) {
40
+ return (0, reflection_1.isObjectType)(otherType) && this.checkCompatibilityBasedOnMembers(otherType, SymbolTable_1.SymbolTypeFlag.runtime);
41
+ }
23
42
  }
24
43
  exports.ObjectType = ObjectType;
25
44
  //# sourceMappingURL=ObjectType.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectType.js","sourceRoot":"","sources":["../../src/types/ObjectType.ts"],"names":[],"mappings":";;;AACA,+CAA4C;AAE5C,MAAa,UAAU;IACnB,YACW,QAAiB;QAAjB,aAAQ,GAAR,QAAQ,CAAS;IACxB,CAAC;IAEE,cAAc,CAAC,UAAmB;QACrC,OAAO,CACH,UAAU,YAAY,UAAU;YAChC,UAAU,YAAY,yBAAW,CACpC,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,UAAmB;QACtC,OAAO,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;IAC3C,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,QAAQ,CAAC;IACrC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACJ;AAvBD,gCAuBC"}
1
+ {"version":3,"file":"ObjectType.js","sourceRoot":"","sources":["../../src/types/ObjectType.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,uDAAqG;AAErG,uCAAoC;AACpC,+CAA4C;AAC5C,+CAA4C;AAE5C,MAAa,UAAW,SAAQ,iBAAO;IACnC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,UAAU,CAAC;IAF9C,CAAC;IAIM,gBAAgB,CAAC,UAAmB;QACvC,IAAI,IAAA,wBAAW,EAAC,UAAU,CAAC,EAAE;YACzB,OAAO,UAAU,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;SAChF;aAAM,IAAI,IAAA,yBAAY,EAAC,UAAU,CAAC;YAC/B,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,8BAAiB,EAAC,UAAU,CAAC,EAC/B;YACE,OAAO,IAAI,CAAC;SACf;QACD,OAAO,KAAK,CAAC;IACjB,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,QAAQ,CAAC;IACrC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAED,aAAa,CAAC,IAAY,EAAE,OAAuB;;QAC/C,gEAAgE;QAChE,mHAAmH;QACnH,OAAO,MAAA,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,mCAAI,yBAAW,CAAC,QAAQ,CAAC;IACtE,CAAC;IAED,OAAO,CAAC,SAAkB;QACtB,OAAO,IAAA,yBAAY,EAAC,SAAS,CAAC,IAAI,IAAI,CAAC,gCAAgC,CAAC,SAAS,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;IAC/G,CAAC;CACJ;AAtCD,gCAsCC"}
@@ -5,8 +5,8 @@ const DynamicType_1 = require("./DynamicType");
5
5
  const ObjectType_1 = require("./ObjectType");
6
6
  describe('ObjectType', () => {
7
7
  it('is equivalent to other object types', () => {
8
- (0, chai_config_spec_1.expect)(new ObjectType_1.ObjectType().isAssignableTo(new ObjectType_1.ObjectType())).to.be.true;
9
- (0, chai_config_spec_1.expect)(new ObjectType_1.ObjectType().isAssignableTo(new DynamicType_1.DynamicType())).to.be.true;
8
+ (0, chai_config_spec_1.expect)(new ObjectType_1.ObjectType().isTypeCompatible(new ObjectType_1.ObjectType())).to.be.true;
9
+ (0, chai_config_spec_1.expect)(new ObjectType_1.ObjectType().isTypeCompatible(new DynamicType_1.DynamicType())).to.be.true;
10
10
  });
11
11
  });
12
12
  //# sourceMappingURL=ObjectType.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ObjectType.spec.js","sourceRoot":"","sources":["../../src/types/ObjectType.spec.ts"],"names":[],"mappings":";;AAAA,0DAA6C;AAE7C,+CAA4C;AAC5C,6CAA0C;AAE1C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,IAAA,yBAAM,EAAC,IAAI,uBAAU,EAAE,CAAC,cAAc,CAAC,IAAI,uBAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrE,IAAA,yBAAM,EAAC,IAAI,uBAAU,EAAE,CAAC,cAAc,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC1E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ObjectType.spec.js","sourceRoot":"","sources":["../../src/types/ObjectType.spec.ts"],"names":[],"mappings":";;AAAA,0DAA6C;AAE7C,+CAA4C;AAC5C,6CAA0C;AAE1C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC3C,IAAA,yBAAM,EAAC,IAAI,uBAAU,EAAE,CAAC,gBAAgB,CAAC,IAAI,uBAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvE,IAAA,yBAAM,EAAC,IAAI,uBAAU,EAAE,CAAC,gBAAgB,CAAC,IAAI,yBAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5E,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { CacheVerifierProvider } from '../CacheVerifier';
2
+ import type { SymbolTypeGetterProvider } from '../SymbolTable';
3
+ import type { SymbolTypeFlag } from '../SymbolTable';
4
+ import { BscType } from './BscType';
5
+ import { BscTypeKind } from './BscTypeKind';
6
+ export declare function referenceTypeFactory(memberKey: string, fullName: any, flags: SymbolTypeFlag, tableProvider: SymbolTypeGetterProvider): ReferenceType;
7
+ export declare class ReferenceType extends BscType {
8
+ memberKey: string;
9
+ fullName: any;
10
+ flags: SymbolTypeFlag;
11
+ private tableProvider;
12
+ private cacheVerifierProvider?;
13
+ /**
14
+ * ReferenceTypes are used when the actual type may be resolved later from a Symbol table
15
+ * @param memberKey which key do we use to look up this type in the given table?
16
+ * @param fullName the full/display name for this type
17
+ * @param flags is this type available at typetime, runtime, etc.
18
+ * @param tableProvider function that returns a SymbolTable that we use for the lookup.
19
+ */
20
+ constructor(memberKey: string, fullName: any, flags: SymbolTypeFlag, tableProvider: SymbolTypeGetterProvider, cacheVerifierProvider?: CacheVerifierProvider);
21
+ readonly kind = BscTypeKind.ReferenceType;
22
+ /**
23
+ * Resolves the type based on the original name and the table provider
24
+ */
25
+ private resolve;
26
+ get __reflection(): {
27
+ name: string;
28
+ };
29
+ makeMemberFullName(memberName: string): string;
30
+ private circRefCount;
31
+ private referenceChain;
32
+ private propertyTypeReference;
33
+ private memberTypeReferences;
34
+ private futureMemberTableProvider;
35
+ }
36
+ /**
37
+ * Use this class for when you need to reference a property of a BscType, and that property is also a BscType,
38
+ * Especially when the instance with the property may not have been instantiated/discovered yet
39
+ *
40
+ * For Example, FunctionType.returnType --- if the FunctionExpression has not been walked yet, it will be a ReferenceType
41
+ * if we just access .returnType on a ReferenceType that doesn't have access to an actual FunctionType yet, .returnType will be undefined
42
+ * So when we use this class, it maintains that reference to a potential ReferenceType, and this class will change from
43
+ * returning undefined to the ACTUAL .returnType when the ReferenceType can be resolved.
44
+ *
45
+ * This is really cool. It's like programming with time-travel.
46
+ */
47
+ export declare class TypePropertyReferenceType extends BscType {
48
+ outerType: BscType;
49
+ propertyName: string;
50
+ constructor(outerType: BscType, propertyName: string);
51
+ }
@@ -0,0 +1,274 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TypePropertyReferenceType = exports.ReferenceType = exports.referenceTypeFactory = void 0;
4
+ const reflection_1 = require("../astUtils/reflection");
5
+ const BscType_1 = require("./BscType");
6
+ const DynamicType_1 = require("./DynamicType");
7
+ const BscTypeKind_1 = require("./BscTypeKind");
8
+ function referenceTypeFactory(memberKey, fullName, flags, tableProvider) {
9
+ return new ReferenceType(memberKey, fullName, flags, tableProvider);
10
+ }
11
+ exports.referenceTypeFactory = referenceTypeFactory;
12
+ class ReferenceType extends BscType_1.BscType {
13
+ /**
14
+ * ReferenceTypes are used when the actual type may be resolved later from a Symbol table
15
+ * @param memberKey which key do we use to look up this type in the given table?
16
+ * @param fullName the full/display name for this type
17
+ * @param flags is this type available at typetime, runtime, etc.
18
+ * @param tableProvider function that returns a SymbolTable that we use for the lookup.
19
+ */
20
+ constructor(memberKey, fullName, flags, tableProvider, cacheVerifierProvider) {
21
+ super(memberKey);
22
+ this.memberKey = memberKey;
23
+ this.fullName = fullName;
24
+ this.flags = flags;
25
+ this.tableProvider = tableProvider;
26
+ this.cacheVerifierProvider = cacheVerifierProvider;
27
+ this.kind = BscTypeKind_1.BscTypeKind.ReferenceType;
28
+ this.circRefCount = 0;
29
+ this.referenceChain = new Set();
30
+ this.propertyTypeReference = new Map();
31
+ this.memberTypeReferences = new Map();
32
+ this.futureMemberTableProvider = () => {
33
+ return {
34
+ getSymbolType: (innerName, innerOptions) => {
35
+ const resolvedType = this.resolve();
36
+ if (resolvedType) {
37
+ return resolvedType.getMemberType(innerName, innerOptions);
38
+ }
39
+ }
40
+ };
41
+ };
42
+ // eslint-disable-next-line no-constructor-return
43
+ return new Proxy(this, {
44
+ get: (target, propName, receiver) => {
45
+ if (propName === '__reflection') {
46
+ // Cheeky way to get `isReferenceType` reflection to work
47
+ return this.__reflection;
48
+ }
49
+ if (propName === '__identifier') {
50
+ // Cheeky way to get `isReferenceType` reflection to work
51
+ return this.__identifier;
52
+ }
53
+ if (propName === 'fullName') {
54
+ return this.fullName;
55
+ }
56
+ if (propName === 'isResolvable') {
57
+ return () => {
58
+ let resultSoFar = this.resolve();
59
+ while ((0, reflection_1.isReferenceType)(resultSoFar)) {
60
+ resultSoFar = resultSoFar.getTarget();
61
+ }
62
+ return !!resultSoFar;
63
+ };
64
+ }
65
+ if (propName === 'getTarget') {
66
+ return () => {
67
+ return this.resolve();
68
+ };
69
+ }
70
+ if (propName === 'tableProvider') {
71
+ return this.tableProvider;
72
+ }
73
+ if (propName === 'isEqual') {
74
+ //Need to be able to check equality without resolution, because resolution need to check equality
75
+ //To see if you need to make a UnionType
76
+ return (targetType) => {
77
+ const resolvedType = this.resolve();
78
+ if (resolvedType && !(0, reflection_1.isReferenceType)(resolvedType)) {
79
+ return resolvedType.isEqual(targetType);
80
+ }
81
+ else if ((0, reflection_1.isReferenceType)(targetType)) {
82
+ return this.fullName.toLowerCase() === targetType.fullName.toLowerCase() &&
83
+ this.tableProvider === targetType.tableProvider;
84
+ }
85
+ return targetType.isEqual(this);
86
+ };
87
+ }
88
+ //There may be some need to specifically get members on ReferenceType in the future
89
+ // eg: if (Reflect.has(target, name)) {
90
+ // return Reflect.get(target, propName, receiver);
91
+ let innerType = this.resolve();
92
+ if (!innerType) {
93
+ // No real BscType found - we may need to handle some specific cases
94
+ if (propName === 'getMemberType') {
95
+ // We're looking for a member of a reference type
96
+ // Since we don't know what type this is, yet, return ReferenceType
97
+ return (memberName, options) => {
98
+ const resolvedType = this.resolve();
99
+ if (resolvedType) {
100
+ return resolvedType.getMemberType(memberName, options);
101
+ }
102
+ const refLookUp = `${memberName.toLowerCase()}-${options.flags}`;
103
+ let memberTypeReference = this.memberTypeReferences.get(refLookUp);
104
+ if (memberTypeReference) {
105
+ return memberTypeReference;
106
+ }
107
+ memberTypeReference = new ReferenceType(memberName, this.makeMemberFullName(memberName), options.flags, this.futureMemberTableProvider, this.cacheVerifierProvider);
108
+ this.memberTypeReferences.set(refLookUp, memberTypeReference);
109
+ return memberTypeReference;
110
+ };
111
+ }
112
+ else if (propName === 'toString') {
113
+ // This type was never found
114
+ // For diagnostics, we should return the expected name of of the type
115
+ return () => this.fullName;
116
+ }
117
+ else if (propName === 'toTypeString') {
118
+ // For transpilation, we should 'dynamic'
119
+ return () => 'dynamic';
120
+ }
121
+ else if (propName === 'returnType') {
122
+ let propRefType = this.propertyTypeReference.get(propName);
123
+ if (!propRefType) {
124
+ propRefType = new TypePropertyReferenceType(this, propName);
125
+ this.propertyTypeReference.set(propName, propRefType);
126
+ }
127
+ return propRefType;
128
+ }
129
+ else if (propName === 'memberTable') {
130
+ return this.memberTable;
131
+ }
132
+ else if (propName === 'isTypeCompatible') {
133
+ return (targetType) => {
134
+ return (0, reflection_1.isDynamicType)(targetType);
135
+ };
136
+ }
137
+ else if (propName === 'isEqual') {
138
+ return (targetType) => {
139
+ if ((0, reflection_1.isReferenceType)(targetType)) {
140
+ return this.fullName.toLowerCase() === targetType.toString().toLowerCase() &&
141
+ this.tableProvider() === targetType.tableProvider();
142
+ }
143
+ return false;
144
+ };
145
+ }
146
+ }
147
+ if (!innerType) {
148
+ innerType = DynamicType_1.DynamicType.instance;
149
+ }
150
+ const result = Reflect.get(innerType, propName, innerType);
151
+ return result;
152
+ },
153
+ set: (target, name, value, receiver) => {
154
+ //There may be some need to specifically set members on ReferenceType in the future
155
+ // eg: if (Reflect.has(target, name)) {
156
+ // return Reflect.set(target, name, value, receiver);
157
+ let innerType = this.resolve();
158
+ // Look for circular references
159
+ if (!innerType || this.referenceChain.has(innerType)) {
160
+ innerType = DynamicType_1.DynamicType.instance;
161
+ }
162
+ const result = Reflect.set(innerType, name, value, innerType);
163
+ this.referenceChain.clear();
164
+ return result;
165
+ }
166
+ });
167
+ }
168
+ /**
169
+ * Resolves the type based on the original name and the table provider
170
+ */
171
+ resolve() {
172
+ const symbolTable = this.tableProvider();
173
+ if (!symbolTable) {
174
+ return;
175
+ }
176
+ // Look for circular references
177
+ let resolvedType = symbolTable.getSymbolType(this.memberKey, { flags: this.flags });
178
+ if (!resolvedType) {
179
+ // could not find this member
180
+ return;
181
+ }
182
+ if ((0, reflection_1.isReferenceType)(resolvedType)) {
183
+ if (this.referenceChain.has(resolvedType)) {
184
+ // this is a circular reference
185
+ this.circRefCount++;
186
+ }
187
+ if (this.circRefCount > 1) {
188
+ //It is possible that we could properly resolve the case that one reference points to itself
189
+ //see test: '[Scope][symbolTable lookups with enhanced typing][finds correct class field type with default value enums are used]
190
+ return;
191
+ }
192
+ this.referenceChain.add(resolvedType);
193
+ }
194
+ else {
195
+ this.circRefCount = 0;
196
+ this.referenceChain.clear();
197
+ }
198
+ return resolvedType;
199
+ }
200
+ get __reflection() {
201
+ return { name: 'ReferenceType' };
202
+ }
203
+ makeMemberFullName(memberName) {
204
+ return this.fullName + '.' + memberName;
205
+ }
206
+ }
207
+ exports.ReferenceType = ReferenceType;
208
+ /**
209
+ * Use this class for when you need to reference a property of a BscType, and that property is also a BscType,
210
+ * Especially when the instance with the property may not have been instantiated/discovered yet
211
+ *
212
+ * For Example, FunctionType.returnType --- if the FunctionExpression has not been walked yet, it will be a ReferenceType
213
+ * if we just access .returnType on a ReferenceType that doesn't have access to an actual FunctionType yet, .returnType will be undefined
214
+ * So when we use this class, it maintains that reference to a potential ReferenceType, and this class will change from
215
+ * returning undefined to the ACTUAL .returnType when the ReferenceType can be resolved.
216
+ *
217
+ * This is really cool. It's like programming with time-travel.
218
+ */
219
+ class TypePropertyReferenceType extends BscType_1.BscType {
220
+ constructor(outerType, propertyName) {
221
+ super(propertyName);
222
+ this.outerType = outerType;
223
+ this.propertyName = propertyName;
224
+ // eslint-disable-next-line no-constructor-return
225
+ return new Proxy(this, {
226
+ get: (target, propName, receiver) => {
227
+ if (propName === '__reflection') {
228
+ // Cheeky way to get `isTypePropertyReferenceType` reflection to work
229
+ return { name: 'TypePropertyReferenceType' };
230
+ }
231
+ if ((0, reflection_1.isReferenceType)(this.outerType) && !this.outerType.isResolvable()) {
232
+ if (propName === 'getMemberType') {
233
+ //If we're calling `getMemberType()`, we need it to proxy to using the actual symbol table
234
+ //So if that symbol is ever populated, the correct type is passed through
235
+ return (memberName, options) => {
236
+ const fullMemberName = this.outerType.toString() + '.' + memberName;
237
+ return new ReferenceType(memberName, fullMemberName, options.flags, () => {
238
+ return {
239
+ getSymbolType: (innerName, innerOptions) => {
240
+ var _a, _b;
241
+ return (_b = (_a = this.outerType) === null || _a === void 0 ? void 0 : _a[this.propertyName]) === null || _b === void 0 ? void 0 : _b.getMemberType(innerName, innerOptions);
242
+ }
243
+ };
244
+ });
245
+ };
246
+ }
247
+ if (propName === 'isResolvable') {
248
+ return () => false;
249
+ }
250
+ }
251
+ let inner = this.outerType[this.propertyName];
252
+ if (!inner) {
253
+ inner = DynamicType_1.DynamicType.instance;
254
+ }
255
+ if (inner) {
256
+ const result = Reflect.get(inner, propName, inner);
257
+ return result;
258
+ }
259
+ },
260
+ set: (target, name, value, receiver) => {
261
+ //There may be some need to specifically set members on ReferenceType in the future
262
+ // eg: if (Reflect.has(target, name)) {
263
+ // return Reflect.set(target, name, value, receiver);
264
+ let inner = this.outerType[this.propertyName];
265
+ if (inner) {
266
+ const result = Reflect.set(inner, name, value, inner);
267
+ return result;
268
+ }
269
+ }
270
+ });
271
+ }
272
+ }
273
+ exports.TypePropertyReferenceType = TypePropertyReferenceType;
274
+ //# sourceMappingURL=ReferenceType.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceType.js","sourceRoot":"","sources":["../../src/types/ReferenceType.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const chai_1 = require("chai");
4
+ const SymbolTable_1 = require("../SymbolTable");
5
+ const SymbolTable_2 = require("../SymbolTable");
6
+ const testHelpers_spec_1 = require("../testHelpers.spec");
7
+ const DynamicType_1 = require("./DynamicType");
8
+ const IntegerType_1 = require("./IntegerType");
9
+ const ReferenceType_1 = require("./ReferenceType");
10
+ const StringType_1 = require("./StringType");
11
+ const FloatType_1 = require("./FloatType");
12
+ const ClassType_1 = require("./ClassType");
13
+ const reflection_1 = require("../astUtils/reflection");
14
+ const FunctionType_1 = require("./FunctionType");
15
+ const NamespaceType_1 = require("./NamespaceType");
16
+ const runtimeFlag = SymbolTable_2.SymbolTypeFlag.runtime;
17
+ describe('ReferenceType', () => {
18
+ it('can be checked with reflection', () => {
19
+ const table = new SymbolTable_1.SymbolTable('test');
20
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
21
+ (0, chai_1.expect)((0, reflection_1.isReferenceType)(ref)).to.be.true;
22
+ });
23
+ it('defaults to dynamic type if it can not resolve', () => {
24
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => undefined), DynamicType_1.DynamicType);
25
+ const table = new SymbolTable_1.SymbolTable('testTable');
26
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => table), DynamicType_1.DynamicType);
27
+ table.addSymbol('someVar', null, StringType_1.StringType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
28
+ (0, testHelpers_spec_1.expectTypeToBe)(new ReferenceType_1.ReferenceType('test', 'test', runtimeFlag, () => table), DynamicType_1.DynamicType);
29
+ });
30
+ it('can resolve based on a symbol table', () => {
31
+ const table = new SymbolTable_1.SymbolTable('test');
32
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
33
+ table.addSymbol('someVar', null, StringType_1.StringType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
34
+ (0, testHelpers_spec_1.expectTypeToBe)(ref, StringType_1.StringType);
35
+ });
36
+ it('resolves before checking assigning and convertible', () => {
37
+ const table = new SymbolTable_1.SymbolTable('test');
38
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
39
+ table.addSymbol('someVar', null, IntegerType_1.IntegerType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
40
+ (0, chai_1.expect)(ref.isTypeCompatible(FloatType_1.FloatType.instance)).to.be.true;
41
+ });
42
+ it('resolves before stringifying', () => {
43
+ const table = new SymbolTable_1.SymbolTable('test');
44
+ const ref = new ReferenceType_1.ReferenceType('someKlass', 'someKlass', runtimeFlag, () => table);
45
+ table.addSymbol('someKlass', null, new ClassType_1.ClassType('SomeKlass'), SymbolTable_2.SymbolTypeFlag.runtime);
46
+ (0, chai_1.expect)(ref.toString()).to.eq('SomeKlass');
47
+ });
48
+ describe('circular references', () => {
49
+ it('catches circular references', () => {
50
+ const table = new SymbolTable_1.SymbolTable('test');
51
+ const ref = new ReferenceType_1.ReferenceType('someVar', 'someVar', runtimeFlag, () => table);
52
+ table.addSymbol('someVar', null, ref, SymbolTable_2.SymbolTypeFlag.runtime);
53
+ (0, testHelpers_spec_1.expectTypeToBe)(ref, DynamicType_1.DynamicType);
54
+ });
55
+ it('catches circular references of many levels', () => {
56
+ const table = new SymbolTable_1.SymbolTable('test');
57
+ const ref1 = new ReferenceType_1.ReferenceType('someVar1', 'someVar1', runtimeFlag, () => table);
58
+ const ref2 = new ReferenceType_1.ReferenceType('someVar2', 'someVar2', runtimeFlag, () => table);
59
+ const ref3 = new ReferenceType_1.ReferenceType('someVar3', 'someVar3', runtimeFlag, () => table);
60
+ table.addSymbol('someVar0', null, ref1, SymbolTable_2.SymbolTypeFlag.runtime);
61
+ table.addSymbol('someVar1', null, ref2, SymbolTable_2.SymbolTypeFlag.runtime);
62
+ table.addSymbol('someVar2', null, ref3, SymbolTable_2.SymbolTypeFlag.runtime);
63
+ table.addSymbol('someVar3', null, ref1, SymbolTable_2.SymbolTypeFlag.runtime);
64
+ (0, testHelpers_spec_1.expectTypeToBe)(table.getSymbol('someVar0', SymbolTable_2.SymbolTypeFlag.runtime)[0].type, DynamicType_1.DynamicType);
65
+ });
66
+ });
67
+ });
68
+ describe('PropertyReferenceType', () => {
69
+ it('can be checked with reflection', () => {
70
+ const func = new FunctionType_1.FunctionType(StringType_1.StringType.instance);
71
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(func, 'returnType');
72
+ (0, chai_1.expect)((0, reflection_1.isTypePropertyReferenceType)(propRef)).to.be.true;
73
+ });
74
+ it('can resolve a FunctionType.returnType', () => {
75
+ const func = new FunctionType_1.FunctionType(StringType_1.StringType.instance);
76
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(func, 'returnType');
77
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, StringType_1.StringType);
78
+ });
79
+ it('can resolve a property on a ReferenceType', () => {
80
+ const table = new SymbolTable_1.SymbolTable('test');
81
+ const ref = new ReferenceType_1.ReferenceType('someFunc', 'someFunc', runtimeFlag, () => table);
82
+ const propRef = new ReferenceType_1.TypePropertyReferenceType(ref, 'returnType');
83
+ // `ref` will resolve to DynamicType, and its returnType is DynamicType.Instance
84
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, DynamicType_1.DynamicType);
85
+ // Set ref to resolve to a function
86
+ table.addSymbol('someFunc', null, new FunctionType_1.FunctionType(IntegerType_1.IntegerType.instance), SymbolTable_2.SymbolTypeFlag.runtime);
87
+ (0, testHelpers_spec_1.expectTypeToBe)(propRef, IntegerType_1.IntegerType);
88
+ });
89
+ it('resolves members of a property on a ReferenceType', () => {
90
+ const table = new SymbolTable_1.SymbolTable('test');
91
+ const fnRef = new ReferenceType_1.ReferenceType('someFunc', 'someFunc', runtimeFlag, () => table);
92
+ const returnRef = new ReferenceType_1.TypePropertyReferenceType(fnRef, 'returnType');
93
+ const returnPropRef = returnRef.getMemberType('myNum', { flags: SymbolTable_2.SymbolTypeFlag.runtime });
94
+ // `ref` will resolve to DynamicType, and its returnType is DynamicType.Instance
95
+ (0, testHelpers_spec_1.expectTypeToBe)(returnPropRef, DynamicType_1.DynamicType);
96
+ // Set fnRef to resolve to a function that returns a complex type
97
+ const klassType = new ClassType_1.ClassType('Klass');
98
+ klassType.addMember('myNum', null, IntegerType_1.IntegerType.instance, SymbolTable_2.SymbolTypeFlag.runtime);
99
+ table.addSymbol('someFunc', null, new FunctionType_1.FunctionType(klassType), SymbolTable_2.SymbolTypeFlag.runtime);
100
+ // returnPropRef = someFunc().myNum
101
+ (0, testHelpers_spec_1.expectTypeToBe)(fnRef, FunctionType_1.FunctionType);
102
+ (0, testHelpers_spec_1.expectTypeToBe)(returnRef, ClassType_1.ClassType);
103
+ (0, testHelpers_spec_1.expectTypeToBe)(returnPropRef, IntegerType_1.IntegerType);
104
+ });
105
+ describe('toString', () => {
106
+ it('returns the full name, if resolvable or not', () => {
107
+ let nsA = new NamespaceType_1.NamespaceType('Alpha');
108
+ let nsAB = new NamespaceType_1.NamespaceType('Alpha.Beta');
109
+ let nsABC = new NamespaceType_1.NamespaceType('Alpha.Beta.Charlie');
110
+ nsA.addMember('Beta', null, nsAB, SymbolTable_2.SymbolTypeFlag.typetime);
111
+ nsAB.addMember('Charlie', null, nsABC, SymbolTable_2.SymbolTypeFlag.typetime);
112
+ let myRef = new ReferenceType_1.ReferenceType('MyKlass', 'Alpha.Beta.Charlie.MyKlass', SymbolTable_2.SymbolTypeFlag.typetime, () => nsABC.memberTable);
113
+ (0, chai_1.expect)(myRef.isResolvable()).to.be.false;
114
+ (0, chai_1.expect)(myRef.toString()).to.eq('Alpha.Beta.Charlie.MyKlass');
115
+ let myKlass = new ClassType_1.ClassType('Alpha.Beta.Charlie.MyKlass');
116
+ nsABC.addMember('MyKlass', null, myKlass, SymbolTable_2.SymbolTypeFlag.typetime);
117
+ (0, chai_1.expect)(myRef.isResolvable()).to.be.true;
118
+ (0, chai_1.expect)(myRef.toString()).to.eq('Alpha.Beta.Charlie.MyKlass');
119
+ });
120
+ });
121
+ });
122
+ //# sourceMappingURL=ReferenceType.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ReferenceType.spec.js","sourceRoot":"","sources":["../../src/types/ReferenceType.spec.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,15 @@
1
- import type { BscType } from './BscType';
2
- export declare class StringType implements BscType {
1
+ import { BscType } from './BscType';
2
+ import { BscTypeKind } from './BscTypeKind';
3
+ export declare class StringType extends BscType {
3
4
  typeText?: string;
4
5
  constructor(typeText?: string);
5
- isAssignableTo(targetType: BscType): boolean;
6
- isConvertibleTo(targetType: BscType): boolean;
6
+ readonly kind = BscTypeKind.StringType;
7
+ /**
8
+ * A static instance that can be used to reduce memory and constructor costs, since there's nothing unique about this
9
+ */
10
+ static instance: StringType;
11
+ isTypeCompatible(targetType: BscType): boolean;
7
12
  toString(): string;
8
13
  toTypeString(): string;
14
+ isEqual(targetType: BscType): boolean;
9
15
  }
@@ -1,17 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.StringType = void 0;
4
- const DynamicType_1 = require("./DynamicType");
5
- class StringType {
4
+ const reflection_1 = require("../astUtils/reflection");
5
+ const BscType_1 = require("./BscType");
6
+ const BscTypeKind_1 = require("./BscTypeKind");
7
+ class StringType extends BscType_1.BscType {
6
8
  constructor(typeText) {
9
+ super();
7
10
  this.typeText = typeText;
11
+ this.kind = BscTypeKind_1.BscTypeKind.StringType;
8
12
  }
9
- isAssignableTo(targetType) {
10
- return (targetType instanceof StringType ||
11
- targetType instanceof DynamicType_1.DynamicType);
12
- }
13
- isConvertibleTo(targetType) {
14
- return this.isAssignableTo(targetType);
13
+ isTypeCompatible(targetType) {
14
+ return ((0, reflection_1.isStringType)(targetType) ||
15
+ (0, reflection_1.isDynamicType)(targetType));
15
16
  }
16
17
  toString() {
17
18
  var _a;
@@ -20,6 +21,13 @@ class StringType {
20
21
  toTypeString() {
21
22
  return this.toString();
22
23
  }
24
+ isEqual(targetType) {
25
+ return (0, reflection_1.isStringType)(targetType);
26
+ }
23
27
  }
24
28
  exports.StringType = StringType;
29
+ /**
30
+ * A static instance that can be used to reduce memory and constructor costs, since there's nothing unique about this
31
+ */
32
+ StringType.instance = new StringType('string');
25
33
  //# sourceMappingURL=StringType.js.map