brighterscript 0.66.0-alpha.4 → 0.66.0-alpha.6
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 +29 -0
- package/dist/DiagnosticMessages.d.ts +21 -3
- package/dist/DiagnosticMessages.js +35 -2
- package/dist/DiagnosticMessages.js.map +1 -1
- package/dist/LanguageServer.d.ts +1 -0
- package/dist/LanguageServer.js +8 -5
- package/dist/LanguageServer.js.map +1 -1
- package/dist/Program.d.ts +20 -8
- package/dist/Program.js +107 -60
- package/dist/Program.js.map +1 -1
- package/dist/ProgramBuilder.js +14 -2
- package/dist/ProgramBuilder.js.map +1 -1
- package/dist/Scope.d.ts +15 -13
- package/dist/Scope.js +26 -65
- package/dist/Scope.js.map +1 -1
- package/dist/SymbolTable.d.ts +17 -10
- package/dist/SymbolTable.js +48 -26
- package/dist/SymbolTable.js.map +1 -1
- package/dist/XmlScope.d.ts +2 -0
- package/dist/XmlScope.js +38 -0
- package/dist/XmlScope.js.map +1 -1
- package/dist/astUtils/creators.d.ts +3 -1
- package/dist/astUtils/creators.js +14 -4
- package/dist/astUtils/creators.js.map +1 -1
- package/dist/astUtils/reflection.d.ts +24 -5
- package/dist/astUtils/reflection.js +58 -13
- package/dist/astUtils/reflection.js.map +1 -1
- package/dist/astUtils/reflection.spec.js +85 -3
- package/dist/astUtils/reflection.spec.js.map +1 -1
- package/dist/bscPlugin/CallExpressionInfo.d.ts +3 -3
- package/dist/bscPlugin/CallExpressionInfo.js.map +1 -1
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js +4 -4
- package/dist/bscPlugin/codeActions/CodeActionsProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.d.ts +44 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.js +353 -20
- package/dist/bscPlugin/completions/CompletionsProcessor.js.map +1 -1
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.d.ts +1 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js +1452 -0
- package/dist/bscPlugin/completions/CompletionsProcessor.spec.js.map +1 -0
- package/dist/bscPlugin/hover/HoverProcessor.d.ts +9 -4
- package/dist/bscPlugin/hover/HoverProcessor.js +64 -67
- package/dist/bscPlugin/hover/HoverProcessor.js.map +1 -1
- package/dist/bscPlugin/hover/HoverProcessor.spec.js +162 -4
- package/dist/bscPlugin/hover/HoverProcessor.spec.js.map +1 -1
- package/dist/bscPlugin/validation/BrsFileValidator.js +20 -16
- package/dist/bscPlugin/validation/BrsFileValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.d.ts +22 -1
- package/dist/bscPlugin/validation/ScopeValidator.js +194 -42
- package/dist/bscPlugin/validation/ScopeValidator.js.map +1 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js +621 -1
- package/dist/bscPlugin/validation/ScopeValidator.spec.js.map +1 -1
- package/dist/diagnosticUtils.d.ts +7 -2
- package/dist/diagnosticUtils.js +43 -15
- package/dist/diagnosticUtils.js.map +1 -1
- package/dist/files/BrsFile.Class.spec.js +10 -8
- package/dist/files/BrsFile.Class.spec.js.map +1 -1
- package/dist/files/BrsFile.d.ts +3 -20
- package/dist/files/BrsFile.js +7 -355
- package/dist/files/BrsFile.js.map +1 -1
- package/dist/files/BrsFile.spec.js +2 -248
- package/dist/files/BrsFile.spec.js.map +1 -1
- package/dist/files/XmlFile.d.ts +1 -6
- package/dist/files/XmlFile.js +0 -13
- package/dist/files/XmlFile.js.map +1 -1
- package/dist/files/XmlFile.spec.js +0 -36
- package/dist/files/XmlFile.spec.js.map +1 -1
- package/dist/globalCallables.js +1 -5
- package/dist/globalCallables.js.map +1 -1
- package/dist/interfaces.d.ts +22 -2
- package/dist/interfaces.js +4 -1
- package/dist/interfaces.js.map +1 -1
- package/dist/lexer/Lexer.d.ts +12 -0
- package/dist/lexer/Lexer.js +27 -2
- package/dist/lexer/Lexer.js.map +1 -1
- package/dist/lexer/Lexer.spec.js +40 -0
- package/dist/lexer/Lexer.spec.js.map +1 -1
- package/dist/lexer/Token.d.ts +4 -0
- package/dist/lexer/Token.js.map +1 -1
- package/dist/lexer/TokenKind.d.ts +4 -0
- package/dist/lexer/TokenKind.js +10 -1
- package/dist/lexer/TokenKind.js.map +1 -1
- package/dist/parser/AstNode.d.ts +8 -1
- package/dist/parser/AstNode.js +16 -0
- package/dist/parser/AstNode.js.map +1 -1
- package/dist/parser/Expression.d.ts +16 -1
- package/dist/parser/Expression.js +75 -11
- package/dist/parser/Expression.js.map +1 -1
- package/dist/parser/Parser.d.ts +7 -0
- package/dist/parser/Parser.js +55 -7
- package/dist/parser/Parser.js.map +1 -1
- package/dist/parser/Parser.spec.js +330 -4
- package/dist/parser/Parser.spec.js.map +1 -1
- package/dist/parser/SGTypes.d.ts +1 -1
- package/dist/parser/Statement.d.ts +18 -6
- package/dist/parser/Statement.js +54 -16
- package/dist/parser/Statement.js.map +1 -1
- package/dist/parser/tests/Parser.spec.js +2 -1
- package/dist/parser/tests/Parser.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/For.spec.js +16 -8
- package/dist/parser/tests/controlFlow/For.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/ForEach.spec.js +12 -6
- package/dist/parser/tests/controlFlow/ForEach.spec.js.map +1 -1
- package/dist/parser/tests/controlFlow/While.spec.js +8 -4
- package/dist/parser/tests/controlFlow/While.spec.js.map +1 -1
- package/dist/parser/tests/expression/Call.spec.js +4 -4
- package/dist/parser/tests/expression/Call.spec.js.map +1 -1
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js +13 -13
- package/dist/parser/tests/expression/NullCoalescenceExpression.spec.js.map +1 -1
- package/dist/parser/tests/statement/ConstStatement.spec.js +1 -34
- package/dist/parser/tests/statement/ConstStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Enum.spec.js +1 -257
- package/dist/parser/tests/statement/Enum.spec.js.map +1 -1
- package/dist/parser/tests/statement/InterfaceStatement.spec.js +8 -0
- package/dist/parser/tests/statement/InterfaceStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/PrintStatement.spec.js +6 -3
- package/dist/parser/tests/statement/PrintStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/ReturnStatement.spec.js +5 -3
- package/dist/parser/tests/statement/ReturnStatement.spec.js.map +1 -1
- package/dist/parser/tests/statement/Set.spec.js +26 -13
- package/dist/parser/tests/statement/Set.spec.js.map +1 -1
- package/dist/roku-types/data.json +156 -111
- package/dist/roku-types/index.d.ts +2 -27
- package/dist/types/ArrayType.d.ts +4 -1
- package/dist/types/ArrayType.js +43 -7
- package/dist/types/ArrayType.js.map +1 -1
- package/dist/types/ArrayType.spec.js +31 -2
- package/dist/types/ArrayType.spec.js.map +1 -1
- package/dist/types/AssociativeArrayType.d.ts +11 -0
- package/dist/types/AssociativeArrayType.js +52 -0
- package/dist/types/AssociativeArrayType.js.map +1 -0
- package/dist/types/BaseFunctionType.d.ts +2 -1
- package/dist/types/BaseFunctionType.js +1 -1
- package/dist/types/BaseFunctionType.js.map +1 -1
- package/dist/types/BooleanType.d.ts +2 -4
- package/dist/types/BooleanType.js +6 -7
- package/dist/types/BooleanType.js.map +1 -1
- package/dist/types/BscType.d.ts +8 -4
- package/dist/types/BscType.js +42 -14
- package/dist/types/BscType.js.map +1 -1
- package/dist/types/BscTypeKind.d.ts +2 -0
- package/dist/types/BscTypeKind.js +2 -0
- package/dist/types/BscTypeKind.js.map +1 -1
- package/dist/types/BuiltInInterfaceAdder.d.ts +20 -0
- package/dist/types/BuiltInInterfaceAdder.js +139 -0
- package/dist/types/BuiltInInterfaceAdder.js.map +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.d.ts +1 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js +109 -0
- package/dist/types/BuiltInInterfaceAdder.spec.js.map +1 -0
- package/dist/types/ClassType.d.ts +6 -1
- package/dist/types/ClassType.js +26 -2
- package/dist/types/ClassType.js.map +1 -1
- package/dist/types/ComponentType.d.ts +26 -0
- package/dist/types/ComponentType.js +80 -0
- package/dist/types/ComponentType.js.map +1 -0
- package/dist/types/DoubleType.d.ts +2 -4
- package/dist/types/DoubleType.js +6 -7
- package/dist/types/DoubleType.js.map +1 -1
- package/dist/types/DynamicType.d.ts +2 -2
- package/dist/types/DynamicType.js +3 -1
- package/dist/types/DynamicType.js.map +1 -1
- package/dist/types/EnumType.d.ts +4 -5
- package/dist/types/EnumType.js +8 -7
- package/dist/types/EnumType.js.map +1 -1
- package/dist/types/FloatType.d.ts +2 -4
- package/dist/types/FloatType.js +6 -7
- package/dist/types/FloatType.js.map +1 -1
- package/dist/types/FunctionType.d.ts +2 -1
- package/dist/types/FunctionType.js +6 -2
- package/dist/types/FunctionType.js.map +1 -1
- package/dist/types/IntegerType.d.ts +2 -4
- package/dist/types/IntegerType.js +6 -7
- package/dist/types/IntegerType.js.map +1 -1
- package/dist/types/InterfaceType.d.ts +2 -1
- package/dist/types/InterfaceType.js +8 -4
- package/dist/types/InterfaceType.js.map +1 -1
- package/dist/types/InterfaceType.spec.js +2 -2
- package/dist/types/InvalidType.d.ts +1 -1
- package/dist/types/InvalidType.js +5 -1
- package/dist/types/InvalidType.js.map +1 -1
- package/dist/types/LongIntegerType.d.ts +2 -4
- package/dist/types/LongIntegerType.js +6 -7
- package/dist/types/LongIntegerType.js.map +1 -1
- package/dist/types/ObjectType.d.ts +3 -3
- package/dist/types/ObjectType.js +3 -1
- package/dist/types/ObjectType.js.map +1 -1
- package/dist/types/ReferenceType.d.ts +14 -0
- package/dist/types/ReferenceType.js +114 -13
- package/dist/types/ReferenceType.js.map +1 -1
- package/dist/types/ReferenceType.spec.js +15 -0
- package/dist/types/ReferenceType.spec.js.map +1 -1
- package/dist/types/StringType.d.ts +2 -4
- package/dist/types/StringType.js +5 -6
- package/dist/types/StringType.js.map +1 -1
- package/dist/types/TypedFunctionType.d.ts +2 -1
- package/dist/types/TypedFunctionType.js +10 -3
- package/dist/types/TypedFunctionType.js.map +1 -1
- package/dist/types/UninitializedType.d.ts +2 -1
- package/dist/types/UninitializedType.js +1 -1
- package/dist/types/UninitializedType.js.map +1 -1
- package/dist/types/UnionType.d.ts +4 -2
- package/dist/types/UnionType.js +25 -4
- package/dist/types/UnionType.js.map +1 -1
- package/dist/types/UnionType.spec.js +46 -19
- package/dist/types/UnionType.spec.js.map +1 -1
- package/dist/types/VoidType.d.ts +2 -1
- package/dist/types/VoidType.js +6 -2
- package/dist/types/VoidType.js.map +1 -1
- package/dist/types/helpers.d.ts +2 -0
- package/dist/types/helpers.js +18 -3
- package/dist/types/helpers.js.map +1 -1
- package/dist/util.d.ts +25 -2
- package/dist/util.js +179 -13
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
|
@@ -23,8 +23,8 @@ describe('UnionType', () => {
|
|
|
23
23
|
const myUnion = new UnionType_1.UnionType([FloatType_1.FloatType.instance, iFace, StringType_1.StringType.instance]);
|
|
24
24
|
(0, chai_1.expect)(myUnion.isTypeCompatible(FloatType_1.FloatType.instance)).to.be.true;
|
|
25
25
|
(0, chai_1.expect)(myUnion.isTypeCompatible(StringType_1.StringType.instance)).to.be.true;
|
|
26
|
-
(0, chai_1.expect)(myUnion.isTypeCompatible(otheriFaceWithSameMembers)).to.be.
|
|
27
|
-
(0, chai_1.expect)(otheriFaceWithSameMembers.isTypeCompatible(myUnion)).to.be.
|
|
26
|
+
(0, chai_1.expect)(myUnion.isTypeCompatible(otheriFaceWithSameMembers)).to.be.true;
|
|
27
|
+
(0, chai_1.expect)(otheriFaceWithSameMembers.isTypeCompatible(myUnion)).to.be.false;
|
|
28
28
|
});
|
|
29
29
|
it('can assign to a more general Union', () => {
|
|
30
30
|
const myUnion = new UnionType_1.UnionType([StringType_1.StringType.instance, FloatType_1.FloatType.instance]);
|
|
@@ -42,30 +42,31 @@ describe('UnionType', () => {
|
|
|
42
42
|
const otheriFaceWithSameMembers = new InterfaceType_1.InterfaceType('OtherIface');
|
|
43
43
|
otheriFaceWithSameMembers.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
44
44
|
otheriFaceWithSameMembers.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
45
|
+
otheriFaceWithSameMembers.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
45
46
|
const otherUnion = new UnionType_1.UnionType([FloatType_1.FloatType.instance, otheriFaceWithSameMembers, StringType_1.StringType.instance]);
|
|
46
47
|
(0, chai_1.expect)(myUnion.isTypeCompatible(otherUnion)).to.be.true;
|
|
47
48
|
(0, chai_1.expect)(otherUnion.isTypeCompatible(myUnion)).to.be.false;
|
|
48
49
|
});
|
|
49
50
|
it('will get a string representation in order given', () => {
|
|
50
51
|
const iFace1 = new InterfaceType_1.InterfaceType('SomeIface');
|
|
51
|
-
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
52
|
-
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
53
|
-
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
52
|
+
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
53
|
+
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
54
|
+
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
54
55
|
const myUnion = new UnionType_1.UnionType([FloatType_1.FloatType.instance, StringType_1.StringType.instance, BooleanType_1.BooleanType.instance, iFace1]);
|
|
55
56
|
(0, chai_1.expect)(myUnion.toString()).to.eq('float or string or boolean or SomeIface');
|
|
56
57
|
});
|
|
57
58
|
describe('getMemberType', () => {
|
|
58
59
|
it('will find the union of inner types', () => {
|
|
59
60
|
const iFace1 = new InterfaceType_1.InterfaceType('iFace1');
|
|
60
|
-
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
61
|
-
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
62
|
-
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
61
|
+
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
62
|
+
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
63
|
+
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
63
64
|
const iFace2 = new InterfaceType_1.InterfaceType('iFace2');
|
|
64
|
-
iFace2.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
65
|
-
iFace2.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
66
|
-
iFace2.addMember('height', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
65
|
+
iFace2.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
66
|
+
iFace2.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
67
|
+
iFace2.addMember('height', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
67
68
|
const myUnion = new UnionType_1.UnionType([iFace1, iFace2]);
|
|
68
|
-
const options = { flags: SymbolTable_1.SymbolTypeFlag.
|
|
69
|
+
const options = { flags: SymbolTable_1.SymbolTypeFlag.runtime };
|
|
69
70
|
const ageType = myUnion.getMemberType('age', options);
|
|
70
71
|
(0, testHelpers_spec_1.expectTypeToBe)(ageType, IntegerType_1.IntegerType);
|
|
71
72
|
const nameType = myUnion.getMemberType('name', options);
|
|
@@ -78,14 +79,14 @@ describe('UnionType', () => {
|
|
|
78
79
|
});
|
|
79
80
|
it('will return reference types if any inner type does not include the member', () => {
|
|
80
81
|
const iFace1 = new InterfaceType_1.InterfaceType('iFace1');
|
|
81
|
-
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
82
|
-
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
83
|
-
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
82
|
+
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
83
|
+
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
84
|
+
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
84
85
|
const iFace2 = new InterfaceType_1.InterfaceType('iFace2');
|
|
85
|
-
iFace2.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
86
|
-
iFace2.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
86
|
+
iFace2.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
87
|
+
iFace2.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
87
88
|
const myUnion = new UnionType_1.UnionType([iFace1, iFace2]);
|
|
88
|
-
const options = { flags: SymbolTable_1.SymbolTypeFlag.
|
|
89
|
+
const options = { flags: SymbolTable_1.SymbolTypeFlag.runtime };
|
|
89
90
|
const heightType1 = myUnion.getMemberType('height', options);
|
|
90
91
|
(0, testHelpers_spec_1.expectTypeToBe)(heightType1, UnionType_1.UnionType);
|
|
91
92
|
const heightTypes1 = heightType1.types;
|
|
@@ -94,10 +95,36 @@ describe('UnionType', () => {
|
|
|
94
95
|
// height does not exist in iFace2
|
|
95
96
|
(0, chai_1.expect)((0, reflection_1.isReferenceType)(heightTypes1[1])).to.be.true;
|
|
96
97
|
(0, chai_1.expect)(heightTypes1[1].isResolvable()).to.be.false;
|
|
97
|
-
iFace2.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.
|
|
98
|
+
iFace2.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
98
99
|
const heightType2 = myUnion.getMemberType('height', options);
|
|
99
100
|
(0, testHelpers_spec_1.expectTypeToBe)(heightType2, FloatType_1.FloatType);
|
|
100
101
|
});
|
|
101
102
|
});
|
|
103
|
+
describe('getMemberTable', () => {
|
|
104
|
+
it('get an intersection of all member types', () => {
|
|
105
|
+
const iFace1 = new InterfaceType_1.InterfaceType('iFace1');
|
|
106
|
+
iFace1.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
107
|
+
iFace1.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
108
|
+
iFace1.addMember('height', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
109
|
+
iFace1.addMember('weight', null, FloatType_1.FloatType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
110
|
+
const iFace2 = new InterfaceType_1.InterfaceType('iFace2');
|
|
111
|
+
iFace2.addMember('age', null, IntegerType_1.IntegerType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
112
|
+
iFace2.addMember('name', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
113
|
+
iFace2.addMember('height', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
114
|
+
iFace2.addMember('address', null, StringType_1.StringType.instance, SymbolTable_1.SymbolTypeFlag.runtime);
|
|
115
|
+
const myUnion = new UnionType_1.UnionType([iFace1, iFace2]);
|
|
116
|
+
const unionMemberTable = myUnion.getMemberTable();
|
|
117
|
+
const options = { flags: SymbolTable_1.SymbolTypeFlag.runtime };
|
|
118
|
+
(0, testHelpers_spec_1.expectTypeToBe)(unionMemberTable.getSymbolType('age', options), IntegerType_1.IntegerType);
|
|
119
|
+
(0, testHelpers_spec_1.expectTypeToBe)(unionMemberTable.getSymbolType('name', options), StringType_1.StringType);
|
|
120
|
+
const heightType1 = unionMemberTable.getSymbolType('height', options);
|
|
121
|
+
(0, testHelpers_spec_1.expectTypeToBe)(heightType1, UnionType_1.UnionType);
|
|
122
|
+
const heightTypes1 = heightType1.types;
|
|
123
|
+
(0, chai_1.expect)(heightTypes1.length).to.eq(2);
|
|
124
|
+
(0, testHelpers_spec_1.expectTypeToBe)(heightTypes1[0], FloatType_1.FloatType);
|
|
125
|
+
(0, chai_1.expect)(unionMemberTable.getSymbolType('weight', options)).to.be.undefined;
|
|
126
|
+
(0, chai_1.expect)(unionMemberTable.getSymbolType('address', options)).to.be.undefined;
|
|
127
|
+
});
|
|
128
|
+
});
|
|
102
129
|
});
|
|
103
130
|
//# sourceMappingURL=UnionType.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UnionType.spec.js","sourceRoot":"","sources":["../../src/types/UnionType.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6CAA0C;AAC1C,+CAA4C;AAC5C,2CAAwC;AACxC,2CAAwC;AACxC,mDAAgD;AAChD,gDAAgD;AAChD,+CAA4C;AAC5C,0DAAqD;AACrD,uDAAyD;AAGzD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAC/E,MAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,aAAa,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC3D,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAE3E,MAAM,yBAAyB,GAAG,IAAI,6BAAa,CAAC,YAAY,CAAC,CAAC;QAClE,yBAAyB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAEhG,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,uBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhF,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAChE,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,uBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"UnionType.spec.js","sourceRoot":"","sources":["../../src/types/UnionType.spec.ts"],"names":[],"mappings":";;AAAA,+BAA8B;AAC9B,6CAA0C;AAC1C,+CAA4C;AAC5C,2CAAwC;AACxC,2CAAwC;AACxC,mDAAgD;AAChD,gDAAgD;AAChD,+CAA4C;AAC5C,0DAAqD;AACrD,uDAAyD;AAGzD,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QAC/E,MAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,aAAa,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC3D,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAE3E,MAAM,yBAAyB,GAAG,IAAI,6BAAa,CAAC,YAAY,CAAC,CAAC;QAClE,yBAAyB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAEhG,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,uBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEhF,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAChE,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,uBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjE,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACvE,IAAA,aAAM,EAAC,yBAAyB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC1C,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,uBAAU,CAAC,QAAQ,EAAE,qBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QACzE,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,uBAAU,CAAC,QAAQ,EAAE,yBAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAElG,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACzD,IAAA,aAAM,EAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC1D,MAAM,WAAW,GAAG,IAAI,6BAAa,CAAC,aAAa,CAAC,CAAC;QACrD,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QACjF,MAAM,KAAK,GAAG,IAAI,6BAAa,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QAC3D,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC3E,KAAK,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,KAAK,EAAE,uBAAU,CAAC,QAAQ,EAAE,yBAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEtG,MAAM,yBAAyB,GAAG,IAAI,6BAAa,CAAC,YAAY,CAAC,CAAC;QAClE,yBAAyB,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC/F,yBAAyB,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAEhG,MAAM,UAAU,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,yBAAyB,EAAE,uBAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;QAEvG,IAAA,aAAM,EAAC,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACxD,IAAA,aAAM,EAAC,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,WAAW,CAAC,CAAC;QAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;QAC7E,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,qBAAS,CAAC,QAAQ,EAAE,uBAAU,CAAC,QAAQ,EAAE,yBAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC;QAEvG,IAAA,aAAM,EAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,yCAAyC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC1C,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE9E,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAEhD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,4BAAc,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YACtD,IAAA,iCAAc,EAAC,OAAO,EAAE,yBAAW,CAAC,CAAC;YACrC,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxD,IAAA,iCAAc,EAAC,QAAQ,EAAE,uBAAU,CAAC,CAAC;YACrC,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAA,iCAAc,EAAC,UAAU,EAAE,qBAAS,CAAC,CAAC;YACtC,MAAM,WAAW,GAAI,UAAwB,CAAC,KAAK,CAAC;YACpD,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAS,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAA,aAAM,EAAC,WAAW,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,uBAAU,CAAC,QAAQ,CAAC,CAAC;QACxD,CAAC,CAAC,CAAC;QAGH,EAAE,CAAC,2EAA2E,EAAE,GAAG,EAAE;YACjF,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE5E,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,4BAAc,CAAC,OAAO,EAAE,CAAC;YAClD,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAA,iCAAc,EAAC,WAAW,EAAE,qBAAS,CAAC,CAAC;YACvC,MAAM,YAAY,GAAI,WAAyB,CAAC,KAAK,CAAC;YACtD,IAAA,aAAM,EAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,IAAA,iCAAc,EAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,CAAC;YAC3C,kCAAkC;YAClC,IAAA,aAAM,EAAC,IAAA,4BAAe,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpD,IAAA,aAAM,EAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAEnD,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC7E,MAAM,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAC7D,IAAA,iCAAc,EAAC,WAAW,EAAE,qBAAS,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC5B,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YAC/C,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC7E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,qBAAS,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE7E,MAAM,MAAM,GAAG,IAAI,6BAAa,CAAC,QAAQ,CAAC,CAAC;YAC3C,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,yBAAW,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC5E,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAC9E,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,uBAAU,CAAC,QAAQ,EAAE,4BAAc,CAAC,OAAO,CAAC,CAAC;YAE/E,MAAM,OAAO,GAAG,IAAI,qBAAS,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YAEhD,MAAM,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,4BAAc,CAAC,OAAO,EAAE,CAAC;YAElD,IAAA,iCAAc,EAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,yBAAW,CAAC,CAAC;YAC5E,IAAA,iCAAc,EAAC,gBAAgB,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAU,CAAC,CAAC;YAC5E,MAAM,WAAW,GAAG,gBAAgB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACtE,IAAA,iCAAc,EAAC,WAAW,EAAE,qBAAS,CAAC,CAAC;YACvC,MAAM,YAAY,GAAI,WAAyB,CAAC,KAAK,CAAC;YACtD,IAAA,aAAM,EAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,IAAA,iCAAc,EAAC,YAAY,CAAC,CAAC,CAAC,EAAE,qBAAS,CAAC,CAAC;YAC3C,IAAA,aAAM,EAAC,gBAAgB,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC1E,IAAA,aAAM,EAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAE/E,CAAC,CAAC,CAAC;IAEP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/dist/types/VoidType.d.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { BscType } from './BscType';
|
|
2
2
|
import { BscTypeKind } from './BscTypeKind';
|
|
3
|
+
import type { TypeCompatibilityData } from '../interfaces';
|
|
3
4
|
export declare class VoidType extends BscType {
|
|
4
5
|
typeText?: string;
|
|
5
6
|
constructor(typeText?: string);
|
|
6
7
|
readonly kind = BscTypeKind.VoidType;
|
|
7
8
|
static instance: VoidType;
|
|
8
|
-
isTypeCompatible(targetType: BscType):
|
|
9
|
+
isTypeCompatible(targetType: BscType, data?: TypeCompatibilityData): any;
|
|
9
10
|
toString(): string;
|
|
10
11
|
toTypeString(): string;
|
|
11
12
|
isEqual(targetType: BscType): boolean;
|
package/dist/types/VoidType.js
CHANGED
|
@@ -4,16 +4,19 @@ exports.VoidType = void 0;
|
|
|
4
4
|
const reflection_1 = require("../astUtils/reflection");
|
|
5
5
|
const BscType_1 = require("./BscType");
|
|
6
6
|
const BscTypeKind_1 = require("./BscTypeKind");
|
|
7
|
+
const helpers_1 = require("./helpers");
|
|
8
|
+
const BuiltInInterfaceAdder_1 = require("./BuiltInInterfaceAdder");
|
|
7
9
|
class VoidType extends BscType_1.BscType {
|
|
8
10
|
constructor(typeText) {
|
|
9
11
|
super();
|
|
10
12
|
this.typeText = typeText;
|
|
11
13
|
this.kind = BscTypeKind_1.BscTypeKind.VoidType;
|
|
12
14
|
}
|
|
13
|
-
isTypeCompatible(targetType) {
|
|
15
|
+
isTypeCompatible(targetType, data) {
|
|
14
16
|
return ((0, reflection_1.isVoidType)(targetType) ||
|
|
15
17
|
(0, reflection_1.isDynamicType)(targetType) ||
|
|
16
|
-
(0, reflection_1.isObjectType)(targetType)
|
|
18
|
+
(0, reflection_1.isObjectType)(targetType) ||
|
|
19
|
+
(0, helpers_1.isUnionTypeCompatible)(this, targetType, data));
|
|
17
20
|
}
|
|
18
21
|
toString() {
|
|
19
22
|
var _a;
|
|
@@ -28,4 +31,5 @@ class VoidType extends BscType_1.BscType {
|
|
|
28
31
|
}
|
|
29
32
|
exports.VoidType = VoidType;
|
|
30
33
|
VoidType.instance = new VoidType('void');
|
|
34
|
+
BuiltInInterfaceAdder_1.BuiltInInterfaceAdder.primitiveTypeInstanceCache.set('void', VoidType.instance);
|
|
31
35
|
//# sourceMappingURL=VoidType.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VoidType.js","sourceRoot":"","sources":["../../src/types/VoidType.ts"],"names":[],"mappings":";;;AAAA,uDAAiF;AACjF,uCAAoC;AACpC,+CAA4C;
|
|
1
|
+
{"version":3,"file":"VoidType.js","sourceRoot":"","sources":["../../src/types/VoidType.ts"],"names":[],"mappings":";;;AAAA,uDAAiF;AACjF,uCAAoC;AACpC,+CAA4C;AAC5C,uCAAkD;AAClD,mEAAgE;AAGhE,MAAa,QAAS,SAAQ,iBAAO;IACjC,YACW,QAAiB;QAExB,KAAK,EAAE,CAAC;QAFD,aAAQ,GAAR,QAAQ,CAAS;QAKZ,SAAI,GAAG,yBAAW,CAAC,QAAQ,CAAC;IAF5C,CAAC;IAMM,gBAAgB,CAAC,UAAmB,EAAE,IAA4B;QACrE,OAAO,CACH,IAAA,uBAAU,EAAC,UAAU,CAAC;YACtB,IAAA,0BAAa,EAAC,UAAU,CAAC;YACzB,IAAA,yBAAY,EAAC,UAAU,CAAC;YACxB,IAAA,+BAAqB,EAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,CAChD,CAAC;IACN,CAAC;IAEM,QAAQ;;QACX,OAAO,MAAA,IAAI,CAAC,QAAQ,mCAAI,MAAM,CAAC;IACnC,CAAC;IAEM,YAAY;QACf,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;IAEM,OAAO,CAAC,UAAmB;QAC9B,OAAO,IAAA,uBAAU,EAAC,UAAU,CAAC,CAAC;IAClC,CAAC;;AA9BL,4BA+BC;AAtBiB,iBAAQ,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;AAwBlD,6CAAqB,CAAC,0BAA0B,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC"}
|
package/dist/types/helpers.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { TypeCompatibilityData } from '../interfaces';
|
|
1
2
|
import type { BscType } from './BscType';
|
|
2
3
|
export declare function findTypeIntersection(typesArr1: BscType[], typesArr2: BscType[]): BscType[];
|
|
3
4
|
export declare function findTypeUnion(...typesArr: BscType[][]): BscType[];
|
|
@@ -17,3 +18,4 @@ export declare function reduceTypesToMostGeneric(types: BscType[]): BscType[];
|
|
|
17
18
|
* @returns either the singular most general type, if there is one, otherwise a UnionType of the most general types
|
|
18
19
|
*/
|
|
19
20
|
export declare function getUniqueType(types: BscType[], unionTypeFactory: (types: BscType[]) => BscType): BscType;
|
|
21
|
+
export declare function isUnionTypeCompatible(thisType: BscType, maybeUnionType: BscType, data?: TypeCompatibilityData): boolean;
|
package/dist/types/helpers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.getUniqueType = exports.reduceTypesToMostGeneric = exports.getUniqueTypesFromArray = exports.findTypeUnion = exports.findTypeIntersection = void 0;
|
|
3
|
+
exports.isUnionTypeCompatible = exports.getUniqueType = exports.reduceTypesToMostGeneric = exports.getUniqueTypesFromArray = exports.findTypeUnion = exports.findTypeIntersection = void 0;
|
|
4
4
|
const reflection_1 = require("../astUtils/reflection");
|
|
5
5
|
function findTypeIntersection(typesArr1, typesArr2) {
|
|
6
6
|
if (!typesArr1 || !typesArr2) {
|
|
@@ -62,7 +62,7 @@ function reduceTypesToMostGeneric(types) {
|
|
|
62
62
|
// only one type after filtering
|
|
63
63
|
return [uniqueTypes[0].type];
|
|
64
64
|
}
|
|
65
|
-
const existingDynamicType = uniqueTypes.find(t => !(0, reflection_1.
|
|
65
|
+
const existingDynamicType = uniqueTypes.find(t => !(0, reflection_1.isAnyReferenceType)(t.type) && (0, reflection_1.isDynamicType)(t.type));
|
|
66
66
|
if (existingDynamicType) {
|
|
67
67
|
// If it includes dynamic, then the result is dynamic
|
|
68
68
|
return [existingDynamicType.type];
|
|
@@ -111,8 +111,11 @@ exports.reduceTypesToMostGeneric = reduceTypesToMostGeneric;
|
|
|
111
111
|
* @returns either the singular most general type, if there is one, otherwise a UnionType of the most general types
|
|
112
112
|
*/
|
|
113
113
|
function getUniqueType(types, unionTypeFactory) {
|
|
114
|
+
if (!types || types.length === 0) {
|
|
115
|
+
return undefined;
|
|
116
|
+
}
|
|
114
117
|
types = types === null || types === void 0 ? void 0 : types.map(type => {
|
|
115
|
-
if (!(0, reflection_1.
|
|
118
|
+
if (!(0, reflection_1.isAnyReferenceType)(type) && (0, reflection_1.isUnionType)(type)) {
|
|
116
119
|
return type.types;
|
|
117
120
|
}
|
|
118
121
|
return type;
|
|
@@ -128,4 +131,16 @@ function getUniqueType(types, unionTypeFactory) {
|
|
|
128
131
|
return unionTypeFactory(generalizedTypes);
|
|
129
132
|
}
|
|
130
133
|
exports.getUniqueType = getUniqueType;
|
|
134
|
+
function isUnionTypeCompatible(thisType, maybeUnionType, data) {
|
|
135
|
+
if ((0, reflection_1.isUnionType)(maybeUnionType)) {
|
|
136
|
+
for (const innerType of maybeUnionType.types) {
|
|
137
|
+
if (!thisType.isTypeCompatible(innerType, data)) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
return true;
|
|
142
|
+
}
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
exports.isUnionTypeCompatible = isUnionTypeCompatible;
|
|
131
146
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/types/helpers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/types/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ import type { AstNode } from './parser/AstNode';
|
|
|
20
20
|
import { type Expression, type Statement } from './parser/AstNode';
|
|
21
21
|
import type { BscType } from './types/BscType';
|
|
22
22
|
import { FunctionType } from './types/FunctionType';
|
|
23
|
+
import type { SymbolTable } from './SymbolTable';
|
|
23
24
|
export declare class Util {
|
|
24
25
|
clearConsole(): void;
|
|
25
26
|
/**
|
|
@@ -148,6 +149,21 @@ export declare class Util {
|
|
|
148
149
|
*/
|
|
149
150
|
rangeContains(range: Range, position: Position): boolean;
|
|
150
151
|
comparePositionToRange(position: Position, range: Range): 1 | -1 | 0;
|
|
152
|
+
/**
|
|
153
|
+
* Combine all the documentation found before a token (i.e. comment tokens)
|
|
154
|
+
*/
|
|
155
|
+
getTokenDocumentation(tokens: Token[], token?: Token): string;
|
|
156
|
+
/**
|
|
157
|
+
* Combine all the documentation for a node - uses the AstNode's leadingTrivia property
|
|
158
|
+
*/
|
|
159
|
+
getNodeDocumentation(node: AstNode): string;
|
|
160
|
+
/**
|
|
161
|
+
* Prefixes a component name so it can be used as type in the symbol table, without polluting available symbols
|
|
162
|
+
*
|
|
163
|
+
* @param sgNodeName the Name of the component
|
|
164
|
+
* @returns the node name, prefixed with `roSGNode`
|
|
165
|
+
*/
|
|
166
|
+
getSgNodeTypeName(sgNodeName: string): string;
|
|
151
167
|
/**
|
|
152
168
|
* Parse an xml file and get back a javascript object containing its results
|
|
153
169
|
*/
|
|
@@ -289,8 +305,14 @@ export declare class Util {
|
|
|
289
305
|
/**
|
|
290
306
|
* Convert a token into a BscType
|
|
291
307
|
*/
|
|
292
|
-
tokenToBscType(token: Token): DynamicType | ObjectType |
|
|
293
|
-
|
|
308
|
+
tokenToBscType(token: Token): DynamicType | ObjectType | StringType | IntegerType | BooleanType | FloatType | DoubleType | LongIntegerType | VoidType | FunctionType;
|
|
309
|
+
/**
|
|
310
|
+
* Deciphers the correct types for fields based on docs
|
|
311
|
+
* https://developer.roku.com/en-ca/docs/references/scenegraph/xml-elements/interface.md
|
|
312
|
+
* @param typeDescriptor the type descriptor from the docs
|
|
313
|
+
* @returns {BscType} the known type, or dynamic
|
|
314
|
+
*/
|
|
315
|
+
getNodeFieldType(typeDescriptor: string, lookupTable?: SymbolTable): BscType;
|
|
294
316
|
/**
|
|
295
317
|
* Return the type of the result of a binary operator
|
|
296
318
|
* Note: compound assignments (eg. +=) internally use a binary expression, so that's why TokenKind.PlusEqual, etc. are here too
|
|
@@ -314,6 +336,7 @@ export declare class Util {
|
|
|
314
336
|
* This is mostly used for the ternary expression
|
|
315
337
|
*/
|
|
316
338
|
getExpressionInfo(expression: Expression): ExpressionInfo;
|
|
339
|
+
concatAnnotationLeadingTrivia(stmt: Statement, otherTrivia: Token[]): Token[];
|
|
317
340
|
/**
|
|
318
341
|
* Create a SourceNode that maps every line to itself. Useful for creating maps for files
|
|
319
342
|
* that haven't changed at all, but we still need the map
|
package/dist/util.js
CHANGED
|
@@ -28,6 +28,10 @@ const requireRelative = require("require-relative");
|
|
|
28
28
|
const AstNode_1 = require("./parser/AstNode");
|
|
29
29
|
const creators_1 = require("./astUtils/creators");
|
|
30
30
|
const FunctionType_1 = require("./types/FunctionType");
|
|
31
|
+
const types_1 = require("./types");
|
|
32
|
+
const SymbolTable_1 = require("./SymbolTable");
|
|
33
|
+
const AssociativeArrayType_1 = require("./types/AssociativeArrayType");
|
|
34
|
+
const ComponentType_1 = require("./types/ComponentType");
|
|
31
35
|
class Util {
|
|
32
36
|
clearConsole() {
|
|
33
37
|
// process.stdout.write('\x1Bc');
|
|
@@ -461,6 +465,10 @@ class Util {
|
|
|
461
465
|
* ```
|
|
462
466
|
*/
|
|
463
467
|
rangesIntersect(a, b) {
|
|
468
|
+
//stop if the either range is misisng
|
|
469
|
+
if (!a || !b) {
|
|
470
|
+
return false;
|
|
471
|
+
}
|
|
464
472
|
// Check if `a` is before `b`
|
|
465
473
|
if (a.end.line < b.start.line || (a.end.line === b.start.line && a.end.character <= b.start.character)) {
|
|
466
474
|
return false;
|
|
@@ -482,6 +490,10 @@ class Util {
|
|
|
482
490
|
* ```
|
|
483
491
|
*/
|
|
484
492
|
rangesIntersectOrTouch(a, b) {
|
|
493
|
+
//stop if the either range is misisng
|
|
494
|
+
if (!a || !b) {
|
|
495
|
+
return false;
|
|
496
|
+
}
|
|
485
497
|
// Check if `a` is before `b`
|
|
486
498
|
if (a.end.line < b.start.line || (a.end.line === b.start.line && a.end.character < b.start.character)) {
|
|
487
499
|
return false;
|
|
@@ -501,6 +513,10 @@ class Util {
|
|
|
501
513
|
return this.comparePositionToRange(position, range) === 0;
|
|
502
514
|
}
|
|
503
515
|
comparePositionToRange(position, range) {
|
|
516
|
+
//stop if the either range is misisng
|
|
517
|
+
if (!position || !range) {
|
|
518
|
+
return 0;
|
|
519
|
+
}
|
|
504
520
|
if (position.line < range.start.line || (position.line === range.start.line && position.character < range.start.character)) {
|
|
505
521
|
return -1;
|
|
506
522
|
}
|
|
@@ -509,6 +525,65 @@ class Util {
|
|
|
509
525
|
}
|
|
510
526
|
return 0;
|
|
511
527
|
}
|
|
528
|
+
/**
|
|
529
|
+
* Combine all the documentation found before a token (i.e. comment tokens)
|
|
530
|
+
*/
|
|
531
|
+
getTokenDocumentation(tokens, token) {
|
|
532
|
+
const comments = [];
|
|
533
|
+
const idx = tokens === null || tokens === void 0 ? void 0 : tokens.indexOf(token);
|
|
534
|
+
if (!idx || idx === -1) {
|
|
535
|
+
return undefined;
|
|
536
|
+
}
|
|
537
|
+
for (let i = idx - 1; i >= 0; i--) {
|
|
538
|
+
const token = tokens[i];
|
|
539
|
+
//skip whitespace and newline chars
|
|
540
|
+
if (token.kind === TokenKind_1.TokenKind.Comment) {
|
|
541
|
+
comments.push(token);
|
|
542
|
+
}
|
|
543
|
+
else if (token.kind === TokenKind_1.TokenKind.Newline || token.kind === TokenKind_1.TokenKind.Whitespace) {
|
|
544
|
+
//skip these tokens
|
|
545
|
+
continue;
|
|
546
|
+
//any other token means there are no more comments
|
|
547
|
+
}
|
|
548
|
+
else {
|
|
549
|
+
break;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
if (comments.length > 0) {
|
|
553
|
+
return comments.reverse().map(x => x.text.replace(/^('|rem)/i, '').trim()).map(line => {
|
|
554
|
+
if (line.startsWith('@')) {
|
|
555
|
+
// Handle jsdoc/brightscriptdoc tags specially
|
|
556
|
+
// make sure they are on their own markdown line, and add italics
|
|
557
|
+
const firstSpaceIndex = line.indexOf(' ');
|
|
558
|
+
if (firstSpaceIndex === -1) {
|
|
559
|
+
return `\n_${line}_`;
|
|
560
|
+
}
|
|
561
|
+
const firstWord = line.substring(0, firstSpaceIndex);
|
|
562
|
+
return `\n_${firstWord}_ ${line.substring(firstSpaceIndex + 1)}`;
|
|
563
|
+
}
|
|
564
|
+
return line;
|
|
565
|
+
}).join('\n');
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
/**
|
|
569
|
+
* Combine all the documentation for a node - uses the AstNode's leadingTrivia property
|
|
570
|
+
*/
|
|
571
|
+
getNodeDocumentation(node) {
|
|
572
|
+
if (!node) {
|
|
573
|
+
return;
|
|
574
|
+
}
|
|
575
|
+
const leadingTrivia = node.getLeadingTrivia();
|
|
576
|
+
return this.getTokenDocumentation(leadingTrivia, leadingTrivia[leadingTrivia.length - 1]);
|
|
577
|
+
}
|
|
578
|
+
/**
|
|
579
|
+
* Prefixes a component name so it can be used as type in the symbol table, without polluting available symbols
|
|
580
|
+
*
|
|
581
|
+
* @param sgNodeName the Name of the component
|
|
582
|
+
* @returns the node name, prefixed with `roSGNode`
|
|
583
|
+
*/
|
|
584
|
+
getSgNodeTypeName(sgNodeName) {
|
|
585
|
+
return 'roSGNode' + sgNodeName;
|
|
586
|
+
}
|
|
512
587
|
/**
|
|
513
588
|
* Parse an xml file and get back a javascript object containing its results
|
|
514
589
|
*/
|
|
@@ -986,25 +1061,107 @@ class Util {
|
|
|
986
1061
|
}
|
|
987
1062
|
}
|
|
988
1063
|
}
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
1064
|
+
/**
|
|
1065
|
+
* Deciphers the correct types for fields based on docs
|
|
1066
|
+
* https://developer.roku.com/en-ca/docs/references/scenegraph/xml-elements/interface.md
|
|
1067
|
+
* @param typeDescriptor the type descriptor from the docs
|
|
1068
|
+
* @returns {BscType} the known type, or dynamic
|
|
1069
|
+
*/
|
|
1070
|
+
getNodeFieldType(typeDescriptor, lookupTable) {
|
|
1071
|
+
const typeDescriptorLower = typeDescriptor.toLowerCase().trim();
|
|
1072
|
+
const bscType = this.tokenToBscType((0, creators_1.createToken)(TokenKind_1.TokenKind.Identifier, typeDescriptorLower));
|
|
1073
|
+
if (bscType) {
|
|
1074
|
+
return bscType;
|
|
1075
|
+
}
|
|
1076
|
+
if (typeDescriptorLower.startsWith('array of ')) {
|
|
1077
|
+
let arrayOfTypeName = typeDescriptorLower.substring(9); //cut off beginning 'array of'
|
|
1078
|
+
if (arrayOfTypeName.endsWith('s')) {
|
|
1079
|
+
// remove "s" in "floats", etc.
|
|
1080
|
+
arrayOfTypeName = arrayOfTypeName.substring(0, arrayOfTypeName.length - 1);
|
|
1081
|
+
}
|
|
1082
|
+
if (arrayOfTypeName.endsWith('\'')) {
|
|
1083
|
+
// remove "'" in "float's", etc.
|
|
1084
|
+
arrayOfTypeName = arrayOfTypeName.substring(0, arrayOfTypeName.length - 1);
|
|
1085
|
+
}
|
|
1086
|
+
let arrayType = this.getNodeFieldType(arrayOfTypeName, lookupTable);
|
|
1087
|
+
return new types_1.ArrayType(arrayType);
|
|
1088
|
+
}
|
|
1089
|
+
else if (typeDescriptorLower.startsWith('option ')) {
|
|
1090
|
+
const actualTypeName = typeDescriptorLower.substring('option '.length); //cut off beginning 'option '
|
|
1091
|
+
return this.getNodeFieldType(actualTypeName, lookupTable);
|
|
1092
|
+
}
|
|
1093
|
+
else if (typeDescriptorLower.startsWith('value ')) {
|
|
1094
|
+
const actualTypeName = typeDescriptorLower.substring('value '.length); //cut off beginning 'value '
|
|
1095
|
+
return this.getNodeFieldType(actualTypeName, lookupTable);
|
|
1096
|
+
}
|
|
1097
|
+
else if (typeDescriptorLower === 'uri') {
|
|
1098
|
+
return StringType_1.StringType.instance;
|
|
1099
|
+
}
|
|
1100
|
+
else if (typeDescriptorLower === 'vector2d' || typeDescriptorLower === 'floatarray') {
|
|
1101
|
+
return new types_1.ArrayType(FloatType_1.FloatType.instance);
|
|
1102
|
+
}
|
|
1103
|
+
else if (typeDescriptorLower === 'intarray') {
|
|
1104
|
+
return new types_1.ArrayType(IntegerType_1.IntegerType.instance);
|
|
1105
|
+
}
|
|
1106
|
+
else if (typeDescriptorLower === 'boolarray') {
|
|
1107
|
+
return new types_1.ArrayType(BooleanType_1.BooleanType.instance);
|
|
1108
|
+
}
|
|
1109
|
+
else if (typeDescriptorLower === 'stringarray' || typeDescriptorLower === 'strarray') {
|
|
1110
|
+
return new types_1.ArrayType(StringType_1.StringType.instance);
|
|
1111
|
+
}
|
|
1112
|
+
else if (typeDescriptorLower === 'int') {
|
|
1113
|
+
return IntegerType_1.IntegerType.instance;
|
|
1114
|
+
}
|
|
1115
|
+
else if (typeDescriptorLower === 'time') {
|
|
1116
|
+
return FloatType_1.FloatType.instance;
|
|
1117
|
+
}
|
|
1118
|
+
else if (typeDescriptorLower === 'str') {
|
|
1119
|
+
return StringType_1.StringType.instance;
|
|
1120
|
+
}
|
|
1121
|
+
else if (typeDescriptorLower === 'bool') {
|
|
1122
|
+
return BooleanType_1.BooleanType.instance;
|
|
1123
|
+
}
|
|
1124
|
+
else if (typeDescriptorLower === 'assocarray' || typeDescriptorLower === 'associative array') {
|
|
1125
|
+
return new AssociativeArrayType_1.AssociativeArrayType();
|
|
1126
|
+
}
|
|
1127
|
+
else if (typeDescriptorLower === 'node') {
|
|
1128
|
+
return ComponentType_1.ComponentType.instance;
|
|
1129
|
+
}
|
|
1130
|
+
else if (typeDescriptorLower === 'nodearray') {
|
|
1131
|
+
return new types_1.ArrayType(ComponentType_1.ComponentType.instance);
|
|
1132
|
+
}
|
|
1133
|
+
else if (lookupTable) {
|
|
1134
|
+
//try doing a lookup
|
|
1135
|
+
return lookupTable.getSymbolType(typeDescriptorLower, { flags: SymbolTable_1.SymbolTypeFlag.typetime });
|
|
1136
|
+
}
|
|
1137
|
+
// TODO: Handle 'rect2d', 'rect2dArray', 'color', 'colorarray', 'time'
|
|
1138
|
+
return DynamicType_1.DynamicType.instance;
|
|
994
1139
|
}
|
|
995
1140
|
/**
|
|
996
1141
|
* Return the type of the result of a binary operator
|
|
997
1142
|
* Note: compound assignments (eg. +=) internally use a binary expression, so that's why TokenKind.PlusEqual, etc. are here too
|
|
998
1143
|
*/
|
|
999
1144
|
binaryOperatorResultType(leftType, operator, rightType) {
|
|
1145
|
+
if (((0, reflection_1.isAnyReferenceType)(leftType) && !leftType.isResolvable()) ||
|
|
1146
|
+
((0, reflection_1.isAnyReferenceType)(rightType) && !rightType.isResolvable())) {
|
|
1147
|
+
return new types_1.BinaryOperatorReferenceType(leftType, operator, rightType, (lhs, op, rhs) => {
|
|
1148
|
+
return this.binaryOperatorResultType(lhs, op, rhs);
|
|
1149
|
+
});
|
|
1150
|
+
}
|
|
1151
|
+
if ((0, reflection_1.isEnumMemberType)(leftType)) {
|
|
1152
|
+
leftType = leftType.underlyingType;
|
|
1153
|
+
}
|
|
1154
|
+
if ((0, reflection_1.isEnumMemberType)(rightType)) {
|
|
1155
|
+
rightType = rightType.underlyingType;
|
|
1156
|
+
}
|
|
1000
1157
|
let hasDouble = (0, reflection_1.isDoubleType)(leftType) || (0, reflection_1.isDoubleType)(rightType);
|
|
1001
1158
|
let hasFloat = (0, reflection_1.isFloatType)(leftType) || (0, reflection_1.isFloatType)(rightType);
|
|
1002
1159
|
let hasLongInteger = (0, reflection_1.isLongIntegerType)(leftType) || (0, reflection_1.isLongIntegerType)(rightType);
|
|
1003
1160
|
let hasInvalid = (0, reflection_1.isInvalidType)(leftType) || (0, reflection_1.isInvalidType)(rightType);
|
|
1004
1161
|
let hasDynamic = (0, reflection_1.isDynamicType)(leftType) || (0, reflection_1.isDynamicType)(rightType);
|
|
1005
|
-
let bothNumbers =
|
|
1162
|
+
let bothNumbers = (0, reflection_1.isNumberType)(leftType) && (0, reflection_1.isNumberType)(rightType);
|
|
1006
1163
|
let bothStrings = (0, reflection_1.isStringType)(leftType) && (0, reflection_1.isStringType)(rightType);
|
|
1007
|
-
let eitherBooleanOrNum = (
|
|
1164
|
+
let eitherBooleanOrNum = ((0, reflection_1.isNumberType)(leftType) || (0, reflection_1.isBooleanType)(leftType)) && ((0, reflection_1.isNumberType)(rightType) || (0, reflection_1.isBooleanType)(rightType));
|
|
1008
1165
|
// eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check
|
|
1009
1166
|
switch (operator.kind) {
|
|
1010
1167
|
// Math operators
|
|
@@ -1117,7 +1274,7 @@ class Util {
|
|
|
1117
1274
|
switch (operator.kind) {
|
|
1118
1275
|
// Math operators
|
|
1119
1276
|
case TokenKind_1.TokenKind.Minus:
|
|
1120
|
-
if (
|
|
1277
|
+
if ((0, reflection_1.isNumberType)(exprType)) {
|
|
1121
1278
|
// a negative number will be the same type, eg, double->double, int->int, etc.
|
|
1122
1279
|
return exprType;
|
|
1123
1280
|
}
|
|
@@ -1126,7 +1283,7 @@ class Util {
|
|
|
1126
1283
|
if ((0, reflection_1.isBooleanType)(exprType)) {
|
|
1127
1284
|
return BooleanType_1.BooleanType.instance;
|
|
1128
1285
|
}
|
|
1129
|
-
else if (
|
|
1286
|
+
else if ((0, reflection_1.isNumberType)(exprType)) {
|
|
1130
1287
|
//numbers can be "notted"
|
|
1131
1288
|
// by default they go to ints, except longints, which stay that way
|
|
1132
1289
|
if ((0, reflection_1.isLongIntegerType)(exprType)) {
|
|
@@ -1217,6 +1374,10 @@ class Util {
|
|
|
1217
1374
|
expressionWalker(expression);
|
|
1218
1375
|
return { expressions: expressions, varExpressions: variableExpressions, uniqueVarNames: [...uniqueVarNames] };
|
|
1219
1376
|
}
|
|
1377
|
+
concatAnnotationLeadingTrivia(stmt, otherTrivia) {
|
|
1378
|
+
var _a, _b;
|
|
1379
|
+
return [...((_b = (_a = stmt.annotations) === null || _a === void 0 ? void 0 : _a.map(anno => anno.getLeadingTrivia()).flat()) !== null && _b !== void 0 ? _b : []), ...otherTrivia];
|
|
1380
|
+
}
|
|
1220
1381
|
/**
|
|
1221
1382
|
* Create a SourceNode that maps every line to itself. Useful for creating maps for files
|
|
1222
1383
|
* that haven't changed at all, but we still need the map
|
|
@@ -1544,22 +1705,26 @@ class Util {
|
|
|
1544
1705
|
}
|
|
1545
1706
|
}
|
|
1546
1707
|
processTypeChain(typeChain) {
|
|
1708
|
+
var _a, _b, _c, _d;
|
|
1547
1709
|
let fullChainName = '';
|
|
1548
1710
|
let fullErrorName = '';
|
|
1549
1711
|
let itemName = '';
|
|
1550
1712
|
let previousTypeName = '';
|
|
1551
1713
|
let parentTypeName = '';
|
|
1552
1714
|
let errorRange;
|
|
1715
|
+
let containsDynamic = false;
|
|
1553
1716
|
for (let i = 0; i < typeChain.length; i++) {
|
|
1554
1717
|
const chainItem = typeChain[i];
|
|
1718
|
+
const dotSep = (_b = (_a = chainItem.separatorToken) === null || _a === void 0 ? void 0 : _a.text) !== null && _b !== void 0 ? _b : '.';
|
|
1555
1719
|
if (i > 0) {
|
|
1556
|
-
fullChainName +=
|
|
1720
|
+
fullChainName += dotSep;
|
|
1557
1721
|
}
|
|
1558
1722
|
fullChainName += chainItem.name;
|
|
1559
1723
|
parentTypeName = previousTypeName;
|
|
1560
|
-
fullErrorName = previousTypeName ? `${previousTypeName}
|
|
1561
|
-
previousTypeName = chainItem.type.toString();
|
|
1724
|
+
fullErrorName = previousTypeName ? `${previousTypeName}${dotSep}${chainItem.name}` : chainItem.name;
|
|
1725
|
+
previousTypeName = (_d = (_c = chainItem.type) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '';
|
|
1562
1726
|
itemName = chainItem.name;
|
|
1727
|
+
containsDynamic = containsDynamic || ((0, reflection_1.isDynamicType)(chainItem.type) && !(0, reflection_1.isAnyReferenceType)(chainItem.type));
|
|
1563
1728
|
if (!chainItem.isResolved) {
|
|
1564
1729
|
errorRange = chainItem.range;
|
|
1565
1730
|
break;
|
|
@@ -1570,7 +1735,8 @@ class Util {
|
|
|
1570
1735
|
itemParentTypeName: parentTypeName,
|
|
1571
1736
|
fullNameOfItem: fullErrorName,
|
|
1572
1737
|
fullChainName: fullChainName,
|
|
1573
|
-
range: errorRange
|
|
1738
|
+
range: errorRange,
|
|
1739
|
+
containsDynamic: containsDynamic
|
|
1574
1740
|
};
|
|
1575
1741
|
}
|
|
1576
1742
|
}
|