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.
- package/CHANGELOG.md +14 -0
- package/README.md +8 -0
- package/dist/BsConfig.d.ts +5 -11
- package/dist/CacheVerifier.d.ts +8 -0
- package/dist/CacheVerifier.js +20 -0
- package/dist/CacheVerifier.js.map +1 -0
- package/dist/DiagnosticMessages.d.ts +9 -4
- package/dist/DiagnosticMessages.js +8 -3
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/FunctionScope.d.ts +1 -0
- package/dist/FunctionScope.js +3 -0
- package/dist/FunctionScope.js.map +1 -1
- package/dist/PluginInterface.d.ts +0 -4
- package/dist/PluginInterface.js.map +1 -1
- package/dist/Program.d.ts +6 -39
- package/dist/Program.js +94 -68
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.d.ts +4 -0
- package/dist/ProgramBuilder.js +33 -13
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +1 -5
- package/dist/Scope.js +53 -37
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +44 -6
- package/dist/SymbolTable.js +154 -26
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.js +11 -12
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/creators.d.ts +16 -6
- package/dist/astUtils/creators.js +39 -16
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +46 -37
- package/dist/astUtils/reflection.js +145 -147
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +1 -6
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/astUtils/visitors.d.ts +4 -11
- package/dist/astUtils/visitors.js +0 -7
- package/dist/astUtils/visitors.js.map +1 -1
- package/dist/astUtils/visitors.spec.js +8 -6
- package/dist/astUtils/visitors.spec.js.map +1 -1
- package/dist/astUtils/xml.d.ts +9 -9
- package/dist/astUtils/xml.js +6 -6
- package/dist/astUtils/xml.js.map +1 -1
- package/dist/bscPlugin/BscPlugin.d.ts +2 -3
- package/dist/bscPlugin/BscPlugin.js +6 -2
- package/dist/bscPlugin/BscPlugin.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js +2 -2
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.js +71 -59
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +110 -10
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js +6 -5
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.js.map +1 -1
- package/dist/bscPlugin/semanticTokens/BrsFileSemanticTokensProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js +1 -1
- package/dist/bscPlugin/transpile/BrsFilePreTranspileProcessor.js.map +1 -1
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.d.ts +11 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js +53 -0
- package/dist/bscPlugin/transpile/XmlFilePreTranspileProcessor.js.map +1 -0
- package/dist/bscPlugin/validation/BrsFileValidator.d.ts +4 -0
- package/dist/bscPlugin/validation/BrsFileValidator.js +37 -16
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.spec.js.map +1 -1
- package/dist/bscPlugin/validation/ProgramValidator.d.ts +3 -3
- package/dist/bscPlugin/validation/ProgramValidator.js +6 -6
- package/dist/bscPlugin/validation/ProgramValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +1 -0
- package/dist/bscPlugin/validation/ScopeValidator.js +72 -18
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/XmlFileValidator.js +9 -9
- package/dist/bscPlugin/validation/XmlFileValidator.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +9 -10
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +8 -10
- package/dist/files/BrsFile.js +72 -52
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +57 -15
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +19 -19
- package/dist/files/XmlFile.js +24 -42
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +70 -17
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/files/tests/imports.spec.js +8 -11
- package/dist/files/tests/imports.spec.js.map +1 -1
- package/dist/globalCallables.js +2 -1
- package/dist/globalCallables.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +107 -28
- package/dist/interfaces.js +13 -0
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +2 -0
- package/dist/lexer/TokenKind.js +5 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +78 -1
- package/dist/parser/AstNode.js +80 -1
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +87 -53
- package/dist/parser/Expression.js +243 -139
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.Class.spec.js +10 -7
- package/dist/parser/Parser.Class.spec.js.map +1 -1
- package/dist/parser/Parser.d.ts +9 -5
- package/dist/parser/Parser.js +125 -78
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.d.ts +2 -0
- package/dist/parser/Parser.spec.js +117 -5
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGParser.d.ts +42 -4
- package/dist/parser/SGParser.js +191 -195
- package/dist/parser/SGParser.js.map +1 -1
- package/dist/parser/SGParser.spec.js +13 -10
- package/dist/parser/SGParser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +279 -51
- package/dist/parser/SGTypes.js +562 -185
- package/dist/parser/SGTypes.js.map +1 -1
- package/dist/parser/Statement.d.ts +88 -70
- package/dist/parser/Statement.js +212 -136
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/TranspileState.d.ts +1 -1
- package/dist/parser/TranspileState.js +5 -2
- package/dist/parser/TranspileState.js.map +1 -1
- package/dist/parser/tests/expression/TypeExpression.spec.d.ts +1 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js +127 -0
- package/dist/parser/tests/expression/TypeExpression.spec.js.map +1 -0
- package/dist/types/ArrayType.d.ts +6 -4
- package/dist/types/ArrayType.js +30 -22
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +8 -8
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/BooleanType.d.ts +7 -4
- package/dist/types/BooleanType.js +13 -8
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BooleanType.spec.js +9 -3
- package/dist/types/BooleanType.spec.js.map +1 -1
- package/dist/types/BscType.d.ts +25 -2
- package/dist/types/BscType.js +64 -0
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +22 -0
- package/dist/types/BscTypeKind.js +27 -0
- package/dist/types/BscTypeKind.js.map +1 -0
- package/dist/types/ClassType.d.ts +11 -0
- package/dist/types/ClassType.js +31 -0
- package/dist/types/ClassType.js.map +1 -0
- package/dist/types/ClassType.spec.d.ts +1 -0
- package/dist/types/ClassType.spec.js +75 -0
- package/dist/types/ClassType.spec.js.map +1 -0
- package/dist/types/DoubleType.d.ts +7 -4
- package/dist/types/DoubleType.js +16 -20
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DoubleType.spec.js +11 -3
- package/dist/types/DoubleType.spec.js.map +1 -1
- package/dist/types/DynamicType.d.ts +9 -3
- package/dist/types/DynamicType.js +16 -2
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/DynamicType.spec.js +15 -4
- package/dist/types/DynamicType.spec.js.map +1 -1
- package/dist/types/EnumType.d.ts +22 -0
- package/dist/types/EnumType.js +59 -0
- package/dist/types/EnumType.js.map +1 -0
- package/dist/types/EnumType.spec.d.ts +1 -0
- package/dist/types/EnumType.spec.js +33 -0
- package/dist/types/EnumType.spec.js.map +1 -0
- package/dist/types/FloatType.d.ts +7 -4
- package/dist/types/FloatType.js +16 -20
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FloatType.spec.js +3 -3
- package/dist/types/FloatType.spec.js.map +1 -1
- package/dist/types/FunctionType.d.ts +6 -4
- package/dist/types/FunctionType.js +22 -19
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/FunctionType.spec.js +5 -5
- package/dist/types/FunctionType.spec.js.map +1 -1
- package/dist/types/InheritableType.d.ts +25 -0
- package/dist/types/InheritableType.js +88 -0
- package/dist/types/InheritableType.js.map +1 -0
- package/dist/types/IntegerType.d.ts +7 -4
- package/dist/types/IntegerType.js +16 -20
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/IntegerType.spec.js +7 -3
- package/dist/types/IntegerType.spec.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +10 -10
- package/dist/types/InterfaceType.js +24 -45
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +59 -45
- package/dist/types/InterfaceType.spec.js.map +1 -1
- package/dist/types/InvalidType.d.ts +6 -4
- package/dist/types/InvalidType.js +12 -8
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/InvalidType.spec.js +7 -3
- package/dist/types/InvalidType.spec.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +7 -4
- package/dist/types/LongIntegerType.js +16 -20
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/LongIntegerType.spec.js +9 -3
- package/dist/types/LongIntegerType.spec.js.map +1 -1
- package/dist/types/NamespaceType.d.ts +11 -0
- package/dist/types/NamespaceType.js +25 -0
- package/dist/types/NamespaceType.js.map +1 -0
- package/dist/types/ObjectType.d.ts +8 -4
- package/dist/types/ObjectType.js +26 -7
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ObjectType.spec.js +2 -2
- package/dist/types/ObjectType.spec.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +51 -0
- package/dist/types/ReferenceType.js +274 -0
- package/dist/types/ReferenceType.js.map +1 -0
- package/dist/types/ReferenceType.spec.d.ts +1 -0
- package/dist/types/ReferenceType.spec.js +122 -0
- package/dist/types/ReferenceType.spec.js.map +1 -0
- package/dist/types/StringType.d.ts +10 -4
- package/dist/types/StringType.js +16 -8
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/StringType.spec.js +2 -2
- package/dist/types/StringType.spec.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +6 -3
- package/dist/types/UninitializedType.js +14 -3
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +18 -0
- package/dist/types/UnionType.js +91 -0
- package/dist/types/UnionType.js.map +1 -0
- package/dist/types/UnionType.spec.d.ts +1 -0
- package/dist/types/UnionType.spec.js +103 -0
- package/dist/types/UnionType.spec.js.map +1 -0
- package/dist/types/VoidType.d.ts +7 -4
- package/dist/types/VoidType.js +13 -8
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/VoidType.spec.js +2 -2
- package/dist/types/VoidType.spec.js.map +1 -1
- package/dist/types/helper.spec.d.ts +1 -0
- package/dist/types/helper.spec.js +130 -0
- package/dist/types/helper.spec.js.map +1 -0
- package/dist/types/helpers.d.ts +19 -0
- package/dist/types/helpers.js +131 -0
- package/dist/types/helpers.js.map +1 -0
- package/dist/types/index.d.ts +22 -0
- package/dist/types/index.js +39 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util.d.ts +9 -8
- package/dist/util.js +78 -32
- package/dist/util.js.map +1 -1
- package/dist/validators/ClassValidator.d.ts +0 -4
- package/dist/validators/ClassValidator.js +6 -30
- package/dist/validators/ClassValidator.js.map +1 -1
- package/package.json +2 -1
- package/dist/types/CustomType.d.ts +0 -9
- package/dist/types/CustomType.js +0 -32
- package/dist/types/CustomType.js.map +0 -1
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
}
|
package/dist/types/ObjectType.js
CHANGED
|
@@ -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
|
-
|
|
10
|
-
|
|
11
|
-
targetType
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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":";;;
|
|
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().
|
|
9
|
-
(0, chai_config_spec_1.expect)(new ObjectType_1.ObjectType().
|
|
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,
|
|
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
|
|
2
|
-
|
|
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
|
-
|
|
6
|
-
|
|
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
|
}
|
package/dist/types/StringType.js
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StringType = void 0;
|
|
4
|
-
const
|
|
5
|
-
|
|
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
|
-
|
|
10
|
-
return (targetType
|
|
11
|
-
|
|
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
|