@rsconcept/domain 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/analyzer-DlSq3Y3r.d.ts +39 -0
- package/dist/arguments-extractor-1acwjQNc.d.ts +38 -0
- package/dist/ast-C8sIpKdL.d.ts +51 -0
- package/dist/ast-annotations-BiMjkKvz.d.ts +16 -0
- package/dist/branded-ZlzIcxzu.d.ts +9 -0
- package/dist/calculator-C9W2jkSx.d.ts +39 -0
- package/dist/cctext/index.d.ts +2 -1
- package/dist/cctext/index.js +2 -42
- package/dist/cctext/language-api.d.ts +10 -12
- package/dist/cctext/language-api.js +157 -227
- package/dist/cctext/language-api.js.map +1 -1
- package/dist/cctext/language.d.ts +24 -22
- package/dist/cctext/language.js +43 -39
- package/dist/cctext/language.js.map +1 -1
- package/dist/error-E1LVq_3w.d.ts +87 -0
- package/dist/graph/graph.d.ts +2 -62
- package/dist/graph/graph.js +339 -382
- package/dist/graph/graph.js.map +1 -1
- package/dist/graph/index.d.ts +2 -1
- package/dist/graph/index.js +2 -384
- package/dist/graph-DR8rL2o3.d.ts +64 -0
- package/dist/hash-Y8I4c6Al.d.ts +8 -0
- package/dist/index-BKZ67WMa.d.ts +1 -0
- package/dist/index-BVVgDSdq.d.ts +1 -0
- package/dist/index-DmtQKWjk.d.ts +1 -0
- package/dist/index-_6s0AX1B.d.ts +1 -0
- package/dist/index.d.ts +27 -28
- package/dist/index.js +23 -5851
- package/dist/lezer-tree-iS7LpLBJ.d.ts +14 -0
- package/dist/library/folder-tree.d.ts +22 -20
- package/dist/library/folder-tree.js +108 -130
- package/dist/library/folder-tree.js.map +1 -1
- package/dist/library/index.d.ts +8 -17
- package/dist/library/index.js +7 -2800
- package/dist/library/library-api.d.ts +3 -1
- package/dist/library/library-api.js +9 -8
- package/dist/library/library-api.js.map +1 -1
- package/dist/library/library.d.ts +2 -56
- package/dist/library/library.js +23 -19
- package/dist/library/library.js.map +1 -1
- package/dist/library/oss-api.d.ts +26 -37
- package/dist/library/oss-api.js +257 -1096
- package/dist/library/oss-api.js.map +1 -1
- package/dist/library/oss-layout-api.d.ts +28 -28
- package/dist/library/oss-layout-api.js +239 -316
- package/dist/library/oss-layout-api.js.map +1 -1
- package/dist/library/oss-layout.d.ts +2 -25
- package/dist/library/oss-layout.js +1 -1
- package/dist/library/oss.d.ts +87 -89
- package/dist/library/oss.js +27 -26
- package/dist/library/oss.js.map +1 -1
- package/dist/library/rsengine.d.ts +100 -106
- package/dist/library/rsengine.js +439 -2599
- package/dist/library/rsengine.js.map +1 -1
- package/dist/library/rsform-api.d.ts +11 -16
- package/dist/library/rsform-api.js +313 -825
- package/dist/library/rsform-api.js.map +1 -1
- package/dist/library/rsform.d.ts +159 -167
- package/dist/library/rsform.js +29 -28
- package/dist/library/rsform.js.map +1 -1
- package/dist/library/rsmodel-api.d.ts +8 -15
- package/dist/library/rsmodel-api.js +172 -813
- package/dist/library/rsmodel-api.js.map +1 -1
- package/dist/library/rsmodel.d.ts +27 -33
- package/dist/library/rsmodel.js +16 -23
- package/dist/library/rsmodel.js.map +1 -1
- package/dist/library/structure-planner.d.ts +20 -26
- package/dist/library/structure-planner.js +106 -474
- package/dist/library/structure-planner.js.map +1 -1
- package/dist/library-CYun28Xz.d.ts +58 -0
- package/dist/oss-layout-3glgAqfn.d.ts +27 -0
- package/dist/parser-Bwd8LxJ1.d.ts +7 -0
- package/dist/parsing/ast.d.ts +2 -49
- package/dist/parsing/ast.js +68 -76
- package/dist/parsing/ast.js.map +1 -1
- package/dist/parsing/index.d.ts +3 -3
- package/dist/parsing/index.js +3 -141
- package/dist/parsing/lezer-tree.d.ts +2 -13
- package/dist/parsing/lezer-tree.js +50 -43
- package/dist/parsing/lezer-tree.js.map +1 -1
- package/dist/rslang/api.d.ts +9 -14
- package/dist/rslang/api.js +114 -827
- package/dist/rslang/api.js.map +1 -1
- package/dist/rslang/ast-annotations.d.ts +2 -18
- package/dist/rslang/ast-annotations.js +34 -45
- package/dist/rslang/ast-annotations.js.map +1 -1
- package/dist/rslang/error.d.ts +2 -85
- package/dist/rslang/error.js +88 -150
- package/dist/rslang/error.js.map +1 -1
- package/dist/rslang/eval/calculator.d.ts +2 -43
- package/dist/rslang/eval/calculator.js +81 -1636
- package/dist/rslang/eval/calculator.js.map +1 -1
- package/dist/rslang/eval/evaluation-cache.d.ts +22 -26
- package/dist/rslang/eval/evaluation-cache.js +168 -287
- package/dist/rslang/eval/evaluation-cache.js.map +1 -1
- package/dist/rslang/eval/evaluator.d.ts +59 -63
- package/dist/rslang/eval/evaluator.js +602 -1509
- package/dist/rslang/eval/evaluator.js.map +1 -1
- package/dist/rslang/eval/value-api.d.ts +2 -48
- package/dist/rslang/eval/value-api.js +2 -490
- package/dist/rslang/eval/value.d.ts +2 -36
- package/dist/rslang/eval/value.js +2 -118
- package/dist/rslang/index.d.ts +14 -17
- package/dist/rslang/index.js +12 -4314
- package/dist/rslang/labels.d.ts +6 -6
- package/dist/rslang/labels.js +139 -305
- package/dist/rslang/labels.js.map +1 -1
- package/dist/rslang/parser/expression-generator.d.ts +5 -5
- package/dist/rslang/parser/expression-generator.js +248 -446
- package/dist/rslang/parser/expression-generator.js.map +1 -1
- package/dist/rslang/parser/normalize.d.ts +4 -8
- package/dist/rslang/parser/normalize.js +286 -481
- package/dist/rslang/parser/normalize.js.map +1 -1
- package/dist/rslang/parser/parser.d.ts +2 -5
- package/dist/rslang/parser/parser.js +30 -21
- package/dist/rslang/parser/parser.js.map +1 -1
- package/dist/rslang/parser/parser.terms.d.ts +43 -41
- package/dist/rslang/parser/parser.terms.js +44 -83
- package/dist/rslang/parser/parser.terms.js.map +1 -1
- package/dist/rslang/parser/syntax-errors.d.ts +5 -8
- package/dist/rslang/parser/syntax-errors.js +113 -382
- package/dist/rslang/parser/syntax-errors.js.map +1 -1
- package/dist/rslang/parser/token.d.ts +2 -79
- package/dist/rslang/parser/token.js +81 -93
- package/dist/rslang/parser/token.js.map +1 -1
- package/dist/rslang/semantic/analyzer.d.ts +2 -39
- package/dist/rslang/semantic/analyzer.js +186 -2600
- package/dist/rslang/semantic/analyzer.js.map +1 -1
- package/dist/rslang/semantic/arguments-extractor.d.ts +2 -42
- package/dist/rslang/semantic/arguments-extractor.js +202 -361
- package/dist/rslang/semantic/arguments-extractor.js.map +1 -1
- package/dist/rslang/semantic/type-auditor.d.ts +64 -68
- package/dist/rslang/semantic/type-auditor.js +594 -1564
- package/dist/rslang/semantic/type-auditor.js.map +1 -1
- package/dist/rslang/semantic/typification-api.d.ts +4 -7
- package/dist/rslang/semantic/typification-api.js +162 -303
- package/dist/rslang/semantic/typification-api.js.map +1 -1
- package/dist/rslang/semantic/typification-parser.d.ts +2 -12
- package/dist/rslang/semantic/typification-parser.js +165 -219
- package/dist/rslang/semantic/typification-parser.js.map +1 -1
- package/dist/rslang/semantic/typification.d.ts +2 -119
- package/dist/rslang/semantic/typification.js +66 -52
- package/dist/rslang/semantic/typification.js.map +1 -1
- package/dist/rslang/semantic/value-auditor.d.ts +32 -38
- package/dist/rslang/semantic/value-auditor.js +206 -518
- package/dist/rslang/semantic/value-auditor.js.map +1 -1
- package/dist/rslang/semantic/value-class.d.ts +2 -10
- package/dist/rslang/semantic/value-class.js +8 -7
- package/dist/rslang/semantic/value-class.js.map +1 -1
- package/dist/rslang/typification-graph.d.ts +2 -33
- package/dist/rslang/typification-graph.js +94 -306
- package/dist/rslang/typification-graph.js.map +1 -1
- package/dist/shared/branded.d.ts +2 -7
- package/dist/shared/branded.js +1 -1
- package/dist/shared/hash.d.ts +2 -6
- package/dist/shared/hash.js +13 -13
- package/dist/shared/hash.js.map +1 -1
- package/dist/shared/index.d.ts +3 -2
- package/dist/shared/index.js +2 -18
- package/dist/token-DeXAmzwr.d.ts +81 -0
- package/dist/typification-Dk-fisgO.d.ts +120 -0
- package/dist/typification-graph-6HcZ-rKH.d.ts +30 -0
- package/dist/typification-parser-BBVx1RxP.d.ts +13 -0
- package/dist/value-B8UtCqaK.js +366 -0
- package/dist/value-B8UtCqaK.js.map +1 -0
- package/dist/value-CTjX6825.d.ts +33 -0
- package/dist/value-api-Bw-SgaYY.d.ts +49 -0
- package/dist/value-class-CNI-lqXJ.d.ts +12 -0
- package/package.json +8 -8
- package/src/library/rsform-api.test.ts +24 -0
- package/src/library/rsform-api.ts +12 -4
- package/dist/cctext/index.js.map +0 -1
- package/dist/graph/index.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/library/index.js.map +0 -1
- package/dist/library/oss-layout.js.map +0 -1
- package/dist/parsing/index.js.map +0 -1
- package/dist/rslang/eval/value-api.js.map +0 -1
- package/dist/rslang/eval/value.js.map +0 -1
- package/dist/rslang/index.js.map +0 -1
- package/dist/shared/branded.js.map +0 -1
- package/dist/shared/index.js.map +0 -1
|
@@ -1,320 +1,179 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
predicate: 4
|
|
17
|
-
};
|
|
18
|
-
var LogicT = { typeID: TypeID.logic };
|
|
19
|
-
var IntegerT = {
|
|
20
|
-
typeID: TypeID.integer,
|
|
21
|
-
isOrdered: true,
|
|
22
|
-
isArithmetic: true,
|
|
23
|
-
isIntegerCompatible: true
|
|
24
|
-
};
|
|
25
|
-
var AnyTypificationT = { typeID: TypeID.anyTypification };
|
|
26
|
-
var EmptySetT = bool(AnyTypificationT);
|
|
27
|
-
function bool(base) {
|
|
28
|
-
return { typeID: TypeID.collection, base };
|
|
29
|
-
}
|
|
30
|
-
function tuple(factors) {
|
|
31
|
-
if (factors.length < 2) {
|
|
32
|
-
throw new Error("Tuple with less than two factors is not allowed");
|
|
33
|
-
}
|
|
34
|
-
return { typeID: TypeID.tuple, factors };
|
|
35
|
-
}
|
|
36
|
-
function component(target, index) {
|
|
37
|
-
return target.factors[index - 1] ?? null;
|
|
38
|
-
}
|
|
39
|
-
function isTypification(type) {
|
|
40
|
-
return type?.typeID === TypeID.basic || type?.typeID === TypeID.anyTypification || type?.typeID === TypeID.integer || type?.typeID === TypeID.collection || type?.typeID === TypeID.tuple;
|
|
41
|
-
}
|
|
42
|
-
function isRadical(alias) {
|
|
43
|
-
return alias.length > 0 && alias.startsWith("R") && alias[1] !== "0";
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// src/rslang/semantic/typification-api.ts
|
|
47
|
-
var TypeIDToClass = {
|
|
48
|
-
[TypeID.anyTypification]: TypeClass.typification,
|
|
49
|
-
[TypeID.integer]: TypeClass.typification,
|
|
50
|
-
[TypeID.basic]: TypeClass.typification,
|
|
51
|
-
[TypeID.tuple]: TypeClass.typification,
|
|
52
|
-
[TypeID.collection]: TypeClass.typification,
|
|
53
|
-
[TypeID.logic]: TypeClass.logic,
|
|
54
|
-
[TypeID.function]: TypeClass.function,
|
|
55
|
-
[TypeID.predicate]: TypeClass.predicate
|
|
1
|
+
import { IntegerT, TypeClass, TypeID, bool, component, isRadical, isTypification, tuple } from "./typification.js";
|
|
2
|
+
//#region src/rslang/semantic/typification-api.ts
|
|
3
|
+
/**
|
|
4
|
+
* Module: Typification API for RSLang.
|
|
5
|
+
*/
|
|
6
|
+
/** Record map from typeID to typeClass. */
|
|
7
|
+
const TypeIDToClass = {
|
|
8
|
+
[TypeID.anyTypification]: TypeClass.typification,
|
|
9
|
+
[TypeID.integer]: TypeClass.typification,
|
|
10
|
+
[TypeID.basic]: TypeClass.typification,
|
|
11
|
+
[TypeID.tuple]: TypeClass.typification,
|
|
12
|
+
[TypeID.collection]: TypeClass.typification,
|
|
13
|
+
[TypeID.logic]: TypeClass.logic,
|
|
14
|
+
[TypeID.function]: TypeClass.function,
|
|
15
|
+
[TypeID.predicate]: TypeClass.predicate
|
|
56
16
|
};
|
|
17
|
+
/** Returns the TypeClass associated with the given TypeID. */
|
|
57
18
|
function getTypeClass(typeID) {
|
|
58
|
-
|
|
19
|
+
return TypeIDToClass[typeID];
|
|
59
20
|
}
|
|
21
|
+
/** Returns true if the given typification is generic. */
|
|
60
22
|
function hasGenerics(type) {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
if (hasGenerics(factor)) {
|
|
73
|
-
return true;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
return false;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
23
|
+
switch (type.typeID) {
|
|
24
|
+
case TypeID.anyTypification: return true;
|
|
25
|
+
case TypeID.integer: return false;
|
|
26
|
+
case TypeID.basic: return isRadical(type.baseID);
|
|
27
|
+
case TypeID.collection: return hasGenerics(type.base);
|
|
28
|
+
case TypeID.tuple:
|
|
29
|
+
for (const factor of type.factors) if (hasGenerics(factor)) return true;
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/** Checks if two typifications are equal. */
|
|
79
34
|
function checkEquality(type1, type2) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
case TypeID.tuple: {
|
|
95
|
-
if (type1.factors.length !== type2.factors.length) {
|
|
96
|
-
return false;
|
|
97
|
-
}
|
|
98
|
-
for (let index = 0; index < type1.factors.length; ++index) {
|
|
99
|
-
if (!checkEquality(type1.factors[index], type2.factors[index])) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
return true;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
}
|
|
35
|
+
if (type1 === type2) return true;
|
|
36
|
+
if (type1.typeID !== type2.typeID) return false;
|
|
37
|
+
switch (type1.typeID) {
|
|
38
|
+
case TypeID.integer:
|
|
39
|
+
case TypeID.anyTypification: return true;
|
|
40
|
+
case TypeID.basic: return type1.baseID === type2.baseID;
|
|
41
|
+
case TypeID.collection: return checkEquality(type1.base, type2.base);
|
|
42
|
+
case TypeID.tuple:
|
|
43
|
+
if (type1.factors.length !== type2.factors.length) return false;
|
|
44
|
+
for (let index = 0; index < type1.factors.length; ++index) if (!checkEquality(type1.factors[index], type2.factors[index])) return false;
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Merge two types to get result of binary operation. */
|
|
107
49
|
function mergeTypifications(type1, type2) {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (type1.factors.length !== type2.factors.length) {
|
|
132
|
-
return null;
|
|
133
|
-
}
|
|
134
|
-
const components = [];
|
|
135
|
-
for (let index = 0; index < type1.factors.length; ++index) {
|
|
136
|
-
const component2 = mergeTypifications(type1.factors[index], type2.factors[index]);
|
|
137
|
-
if (component2 === null) {
|
|
138
|
-
return null;
|
|
139
|
-
}
|
|
140
|
-
components.push(component2);
|
|
141
|
-
}
|
|
142
|
-
return tuple(components);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
50
|
+
if (type1 === type2) return type1;
|
|
51
|
+
if (type1.typeID === TypeID.anyTypification) return isTypification(type2) ? type2 : null;
|
|
52
|
+
if (type2.typeID === TypeID.anyTypification) return isTypification(type1) ? type1 : null;
|
|
53
|
+
switch (type1.typeID) {
|
|
54
|
+
case TypeID.integer:
|
|
55
|
+
case TypeID.basic: return commonType(type1, type2);
|
|
56
|
+
case TypeID.collection:
|
|
57
|
+
if (type2.typeID !== TypeID.collection) return null;
|
|
58
|
+
const base = mergeTypifications(type1.base, type2.base);
|
|
59
|
+
return base ? bool(base) : null;
|
|
60
|
+
case TypeID.tuple:
|
|
61
|
+
if (type2.typeID !== TypeID.tuple) return null;
|
|
62
|
+
if (type1.factors.length !== type2.factors.length) return null;
|
|
63
|
+
const components = [];
|
|
64
|
+
for (let index = 0; index < type1.factors.length; ++index) {
|
|
65
|
+
const component = mergeTypifications(type1.factors[index], type2.factors[index]);
|
|
66
|
+
if (component === null) return null;
|
|
67
|
+
components.push(component);
|
|
68
|
+
}
|
|
69
|
+
return tuple(components);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Check compatibility of typifications. */
|
|
145
73
|
function checkCompatibility(type1, type2) {
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
switch (type1.typeID) {
|
|
165
|
-
case TypeID.collection:
|
|
166
|
-
return checkCompatibility(type1.base, type2.base);
|
|
167
|
-
case TypeID.tuple:
|
|
168
|
-
if (type1.factors.length !== type2.factors.length) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
for (let index = 0; index < type1.factors.length; ++index) {
|
|
172
|
-
if (!checkCompatibility(type1.factors[index], type2.factors[index])) {
|
|
173
|
-
return false;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return true;
|
|
177
|
-
case TypeID.logic:
|
|
178
|
-
case TypeID.predicate:
|
|
179
|
-
case TypeID.function:
|
|
180
|
-
return false;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
74
|
+
if (type1 === type2) return true;
|
|
75
|
+
if (type1.typeID === TypeID.anyTypification) return isTypification(type2);
|
|
76
|
+
if (type2.typeID === TypeID.anyTypification) return isTypification(type1);
|
|
77
|
+
if (isTypification(type1) !== isTypification(type2)) return false;
|
|
78
|
+
if (type1.typeID === TypeID.integer || type1.typeID === TypeID.basic || type2.typeID === TypeID.integer || type2.typeID === TypeID.basic) return commonType(type1, type2) !== null;
|
|
79
|
+
if (type1.typeID !== type2.typeID) return false;
|
|
80
|
+
switch (type1.typeID) {
|
|
81
|
+
case TypeID.collection: return checkCompatibility(type1.base, type2.base);
|
|
82
|
+
case TypeID.tuple:
|
|
83
|
+
if (type1.factors.length !== type2.factors.length) return false;
|
|
84
|
+
for (let index = 0; index < type1.factors.length; ++index) if (!checkCompatibility(type1.factors[index], type2.factors[index])) return false;
|
|
85
|
+
return true;
|
|
86
|
+
case TypeID.logic:
|
|
87
|
+
case TypeID.predicate:
|
|
88
|
+
case TypeID.function: return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/** Compare typification with substitutions. */
|
|
183
92
|
function compareTemplated(substitutes, arg, value) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
if (arg.typeID !== value.typeID) {
|
|
207
|
-
return false;
|
|
208
|
-
}
|
|
209
|
-
switch (arg.typeID) {
|
|
210
|
-
case TypeID.collection:
|
|
211
|
-
return compareTemplated(substitutes, arg.base, value.base);
|
|
212
|
-
case TypeID.tuple: {
|
|
213
|
-
if (arg.factors.length !== value.factors.length) {
|
|
214
|
-
return false;
|
|
215
|
-
}
|
|
216
|
-
for (let index = 0; index < arg.factors.length; ++index) {
|
|
217
|
-
if (!compareTemplated(substitutes, arg.factors[index], value.factors[index])) {
|
|
218
|
-
return false;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
return true;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
}
|
|
93
|
+
if (arg === value) return true;
|
|
94
|
+
if (arg.typeID === TypeID.basic && isRadical(arg.baseID)) if (!substitutes.has(arg.baseID)) {
|
|
95
|
+
substitutes.set(arg.baseID, value);
|
|
96
|
+
return true;
|
|
97
|
+
} else {
|
|
98
|
+
const mergeType = mergeTypifications(substitutes.get(arg.baseID), value);
|
|
99
|
+
if (mergeType === null) return false;
|
|
100
|
+
substitutes.set(arg.baseID, mergeType);
|
|
101
|
+
return true;
|
|
102
|
+
}
|
|
103
|
+
if (value.typeID === TypeID.anyTypification) return true;
|
|
104
|
+
if (arg.typeID === TypeID.integer || arg.typeID === TypeID.basic || value.typeID === TypeID.integer || value.typeID === TypeID.basic) return commonType(arg, value) !== null;
|
|
105
|
+
if (arg.typeID !== value.typeID) return false;
|
|
106
|
+
switch (arg.typeID) {
|
|
107
|
+
case TypeID.collection: return compareTemplated(substitutes, arg.base, value.base);
|
|
108
|
+
case TypeID.tuple:
|
|
109
|
+
if (arg.factors.length !== value.factors.length) return false;
|
|
110
|
+
for (let index = 0; index < arg.factors.length; ++index) if (!compareTemplated(substitutes, arg.factors[index], value.factors[index])) return false;
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** Apply substitutions to typification. */
|
|
225
115
|
function substituteBase(target, substitutes) {
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
substituteBase(factor, substitutes);
|
|
240
|
-
}
|
|
241
|
-
return;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
}
|
|
116
|
+
switch (target.typeID) {
|
|
117
|
+
case TypeID.basic:
|
|
118
|
+
if (substitutes.has(target.baseID)) Object.assign(target, substitutes.get(target.baseID));
|
|
119
|
+
return;
|
|
120
|
+
case TypeID.collection:
|
|
121
|
+
substituteBase(target.base, substitutes);
|
|
122
|
+
return;
|
|
123
|
+
case TypeID.tuple:
|
|
124
|
+
for (const factor of target.factors) substituteBase(factor, substitutes);
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/** Extract bases from typification. */
|
|
245
129
|
function extractBases(target) {
|
|
246
|
-
|
|
130
|
+
return new Set(extractBasesImpl(target));
|
|
247
131
|
}
|
|
132
|
+
/** Apply type path to typification. */
|
|
248
133
|
function applyPath(target, path, index = 0) {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
i++;
|
|
267
|
-
break;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return current;
|
|
134
|
+
let current = target;
|
|
135
|
+
let i = index;
|
|
136
|
+
while (i < path.length && current) switch (current.typeID) {
|
|
137
|
+
case TypeID.anyTypification:
|
|
138
|
+
case TypeID.integer:
|
|
139
|
+
case TypeID.basic: return null;
|
|
140
|
+
case TypeID.collection:
|
|
141
|
+
current = current.base;
|
|
142
|
+
i++;
|
|
143
|
+
break;
|
|
144
|
+
case TypeID.tuple:
|
|
145
|
+
current = component(current, path[i]);
|
|
146
|
+
if (current === null) return null;
|
|
147
|
+
i++;
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
return current;
|
|
271
151
|
}
|
|
272
152
|
function commonType(type1, type2) {
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
}
|
|
284
|
-
if (type1.typeID === TypeID.integer) {
|
|
285
|
-
return type2;
|
|
286
|
-
} else if (type2.typeID === TypeID.integer) {
|
|
287
|
-
return type1;
|
|
288
|
-
} else {
|
|
289
|
-
return IntegerT;
|
|
290
|
-
}
|
|
153
|
+
if (type1 === type2) return type1;
|
|
154
|
+
const int1 = "isIntegerCompatible" in type1 && type1.isIntegerCompatible;
|
|
155
|
+
const int2 = "isIntegerCompatible" in type2 && type2.isIntegerCompatible;
|
|
156
|
+
if (!int1 || !int2) {
|
|
157
|
+
if (type1.typeID === TypeID.basic && type2.typeID === TypeID.basic) return type1.baseID === type2.baseID ? type1 : null;
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
if (type1.typeID === TypeID.integer) return type2;
|
|
161
|
+
else if (type2.typeID === TypeID.integer) return type1;
|
|
162
|
+
else return IntegerT;
|
|
291
163
|
}
|
|
292
164
|
function extractBasesImpl(target) {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
export {
|
|
310
|
-
applyPath,
|
|
311
|
-
checkCompatibility,
|
|
312
|
-
checkEquality,
|
|
313
|
-
compareTemplated,
|
|
314
|
-
extractBases,
|
|
315
|
-
getTypeClass,
|
|
316
|
-
hasGenerics,
|
|
317
|
-
mergeTypifications,
|
|
318
|
-
substituteBase
|
|
319
|
-
};
|
|
165
|
+
switch (target.typeID) {
|
|
166
|
+
case TypeID.basic: return [target.baseID];
|
|
167
|
+
case TypeID.collection: return extractBasesImpl(target.base);
|
|
168
|
+
case TypeID.tuple: return target.factors.reduce((result, factor) => result.concat(extractBasesImpl(factor)), []);
|
|
169
|
+
case TypeID.function:
|
|
170
|
+
const result = extractBasesImpl(target.result);
|
|
171
|
+
return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), result);
|
|
172
|
+
case TypeID.predicate: return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), []);
|
|
173
|
+
default: return [];
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//#endregion
|
|
177
|
+
export { applyPath, checkCompatibility, checkEquality, compareTemplated, extractBases, getTypeClass, hasGenerics, mergeTypifications, substituteBase };
|
|
178
|
+
|
|
320
179
|
//# sourceMappingURL=typification-api.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/rslang/semantic/typification.ts","../../../src/rslang/semantic/typification-api.ts"],"sourcesContent":["/*\n * Module: Typification for RSLang.\n */\n\nimport { type Branded } from '../../shared';\n\n/** Typification structure enumeration. */\nexport const TypeID = {\n anyTypification: 1,\n integer: 2,\n basic: 3,\n tuple: 4,\n collection: 5,\n logic: 6,\n function: 7,\n predicate: 8\n} as const;\nexport type TypeID = (typeof TypeID)[keyof typeof TypeID];\n\n/** Represents type class. */\nexport const TypeClass = {\n logic: 1,\n typification: 2,\n function: 3,\n predicate: 4\n} as const;\nexport type TypeClass = (typeof TypeClass)[keyof typeof TypeClass];\n\n/** Logic type object. */\nexport const LogicT = { typeID: TypeID.logic } as const;\n\n/** Integer type object. */\nexport const IntegerT = {\n typeID: TypeID.integer,\n isOrdered: true,\n isArithmetic: true,\n isIntegerCompatible: true\n} as const;\n\n/** Type transformation path. */\nexport type TypePath = Branded<number[], 'TypePath'>;\n\n/** Creates type path. */\nexport function makeTypePath(path: number[]): TypePath {\n return path as TypePath;\n}\n\n/** AnyTyped type object. */\nexport const AnyTypificationT = { typeID: TypeID.anyTypification } as const;\n\n/** Empty set typification. */\nexport const EmptySetT = bool(AnyTypificationT);\n\n/** Parametrized typification. */\nexport type Parametrized = EchelonFunctional | EchelonPredicate;\n\n/** General expression types. */\nexport type ExpressionType =\n | EchelonLogic\n | EchelonBase\n | EchelonTuple\n | EchelonCollection\n | EchelonFunctional\n | EchelonPredicate\n | EchelonAnyTyped\n | EchelonInteger;\n\n/** Setexpr type. */\nexport type Typification = EchelonBase | EchelonAnyTyped | EchelonInteger | EchelonCollection | EchelonTuple;\n\n/** Typification context. */\nexport type TypeContext = Map<string, ExpressionType>;\n\n/** Functional argument. */\nexport interface Argument {\n readonly alias: string;\n readonly type: Typification;\n}\n\n/** Type: Logic. */\nexport interface EchelonLogic {\n readonly typeID: typeof TypeID.logic;\n}\n\n/** Type: AnyTyped. */\nexport interface EchelonAnyTyped {\n readonly typeID: typeof TypeID.anyTypification;\n}\n\n/** Type: Integer. */\nexport interface EchelonInteger {\n readonly typeID: typeof TypeID.integer;\n readonly isOrdered: true;\n readonly isArithmetic: true;\n readonly isIntegerCompatible: true;\n}\n\n/** Type: Element of basic set. */\nexport interface EchelonBase {\n readonly typeID: typeof TypeID.basic;\n readonly baseID: string;\n readonly isOrdered?: boolean;\n readonly isArithmetic?: boolean;\n readonly isIntegerCompatible?: boolean;\n}\n\n/** Type: Tuple. */\nexport interface EchelonTuple {\n readonly typeID: typeof TypeID.tuple;\n readonly factors: readonly Typification[];\n}\n\n/** Type: Collection. */\nexport interface EchelonCollection {\n readonly typeID: typeof TypeID.collection;\n readonly base: Typification;\n}\n\n/** Type: Functional. */\nexport interface EchelonFunctional {\n readonly typeID: typeof TypeID.function;\n readonly result: Typification;\n readonly args: readonly Argument[];\n}\n\n/** Type: Predicate. */\nexport interface EchelonPredicate {\n readonly typeID: typeof TypeID.predicate;\n readonly result: EchelonLogic;\n readonly args: readonly Argument[];\n}\n\n/** Create basic element typification. */\nexport function basic(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias };\n}\n\n/** Create constant element typification. */\nexport function constant(alias: string): EchelonBase {\n return { typeID: TypeID.basic, baseID: alias, isOrdered: true, isArithmetic: true, isIntegerCompatible: true };\n}\n\n/** Create boolean typification. */\nexport function bool(base: Typification): EchelonCollection {\n return { typeID: TypeID.collection, base };\n}\n\n/** Create tuple typification. */\nexport function tuple(factors: Typification[]): EchelonTuple {\n if (factors.length < 2) {\n throw new Error('Tuple with less than two factors is not allowed');\n }\n return { typeID: TypeID.tuple, factors };\n}\n\n/** Remove boolean from typification. */\nexport function debool(target: EchelonCollection): Typification {\n return target.base;\n}\n\n/** Extract component from tuple. */\nexport function component(target: EchelonTuple, index: number): Typification | null {\n return target.factors[index - 1] ?? null;\n}\n\n/** Checks if given type is typification. */\nexport function isTypification(type: ExpressionType | null): boolean {\n return (\n type?.typeID === TypeID.basic ||\n type?.typeID === TypeID.anyTypification ||\n type?.typeID === TypeID.integer ||\n type?.typeID === TypeID.collection ||\n type?.typeID === TypeID.tuple\n );\n}\n\n/** Checks if given type is radical. */\nexport function isRadical(alias: string): boolean {\n return alias.length > 0 && alias.startsWith('R') && alias[1] !== '0';\n}\n","/**\n * Module: Typification API for RSLang.\n */\n\nimport {\n bool,\n component,\n type EchelonBase,\n type EchelonCollection,\n type EchelonTuple,\n type ExpressionType,\n IntegerT,\n isRadical,\n isTypification,\n tuple,\n TypeClass,\n TypeID,\n type TypePath,\n type Typification\n} from './typification';\n\n/** Record map from typeID to typeClass. */\nconst TypeIDToClass: Record<TypeID, TypeClass> = {\n [TypeID.anyTypification]: TypeClass.typification,\n [TypeID.integer]: TypeClass.typification,\n [TypeID.basic]: TypeClass.typification,\n [TypeID.tuple]: TypeClass.typification,\n [TypeID.collection]: TypeClass.typification,\n [TypeID.logic]: TypeClass.logic,\n [TypeID.function]: TypeClass.function,\n [TypeID.predicate]: TypeClass.predicate\n};\n\n/** Returns the TypeClass associated with the given TypeID. */\nexport function getTypeClass(typeID: TypeID): TypeClass {\n return TypeIDToClass[typeID];\n}\n\n/** Returns true if the given typification is generic. */\nexport function hasGenerics(type: Typification): boolean {\n switch (type.typeID) {\n case TypeID.anyTypification:\n return true;\n case TypeID.integer:\n return false;\n case TypeID.basic:\n return isRadical(type.baseID);\n case TypeID.collection:\n return hasGenerics(type.base);\n case TypeID.tuple:\n for (const factor of type.factors) {\n if (hasGenerics(factor)) {\n return true;\n }\n }\n return false;\n }\n}\n\n/** Checks if two typifications are equal. */\nexport function checkEquality(type1: Typification, type2: Typification): boolean {\n if (type1 === type2) {\n return true;\n }\n if (type1.typeID !== type2.typeID) {\n return false;\n }\n switch (type1.typeID) {\n case TypeID.integer:\n case TypeID.anyTypification:\n return true;\n case TypeID.basic:\n return type1.baseID === (type2 as EchelonBase).baseID;\n case TypeID.collection:\n return checkEquality(type1.base, (type2 as EchelonCollection).base);\n case TypeID.tuple: {\n if (type1.factors.length !== (type2 as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < type1.factors.length; ++index) {\n if (!checkEquality(type1.factors[index], (type2 as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n/** Merge two types to get result of binary operation. */\nexport function mergeTypifications(type1: Typification, type2: Typification): Typification | null {\n if (type1 === type2) {\n return type1;\n }\n if (type1.typeID === TypeID.anyTypification) {\n return isTypification(type2) ? type2 : null;\n }\n if (type2.typeID === TypeID.anyTypification) {\n return isTypification(type1) ? type1 : null;\n }\n\n switch (type1.typeID) {\n case TypeID.integer:\n case TypeID.basic:\n return commonType(type1, type2);\n case TypeID.collection:\n if (type2.typeID !== TypeID.collection) {\n return null;\n }\n const base = mergeTypifications(type1.base, type2.base);\n return base ? bool(base) : null;\n case TypeID.tuple:\n if (type2.typeID !== TypeID.tuple) {\n return null;\n }\n if (type1.factors.length !== type2.factors.length) {\n return null;\n }\n const components: Typification[] = [];\n for (let index = 0; index < type1.factors.length; ++index) {\n const component = mergeTypifications(type1.factors[index], type2.factors[index]);\n if (component === null) {\n return null;\n }\n components.push(component);\n }\n return tuple(components);\n }\n}\n\n/** Check compatibility of typifications. */\nexport function checkCompatibility(type1: ExpressionType, type2: ExpressionType): boolean {\n if (type1 === type2) {\n return true;\n }\n if (type1.typeID === TypeID.anyTypification) {\n return isTypification(type2);\n }\n if (type2.typeID === TypeID.anyTypification) {\n return isTypification(type1);\n }\n if (isTypification(type1) !== isTypification(type2)) {\n return false;\n }\n if (\n type1.typeID === TypeID.integer ||\n type1.typeID === TypeID.basic ||\n type2.typeID === TypeID.integer ||\n type2.typeID === TypeID.basic\n ) {\n return commonType(type1 as Typification, type2 as Typification) !== null;\n }\n\n if (type1.typeID !== type2.typeID) {\n return false;\n }\n switch (type1.typeID) {\n case TypeID.collection:\n return checkCompatibility(type1.base, (type2 as EchelonCollection).base);\n case TypeID.tuple:\n if (type1.factors.length !== (type2 as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < type1.factors.length; ++index) {\n if (!checkCompatibility(type1.factors[index], (type2 as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n case TypeID.logic:\n case TypeID.predicate:\n case TypeID.function:\n return false;\n }\n}\n\n/** Compare typification with substitutions. */\nexport function compareTemplated(\n substitutes: Map<string, Typification>,\n arg: Typification,\n value: Typification\n): boolean {\n if (arg === value) {\n return true;\n }\n if (arg.typeID === TypeID.basic && isRadical(arg.baseID)) {\n if (!substitutes.has(arg.baseID)) {\n substitutes.set(arg.baseID, value);\n return true;\n } else {\n const mergeType = mergeTypifications(substitutes.get(arg.baseID)!, value);\n if (mergeType === null) {\n return false;\n }\n substitutes.set(arg.baseID, mergeType);\n return true;\n }\n }\n if (value.typeID === TypeID.anyTypification) {\n return true;\n }\n if (\n arg.typeID === TypeID.integer ||\n arg.typeID === TypeID.basic ||\n value.typeID === TypeID.integer ||\n value.typeID === TypeID.basic\n ) {\n return commonType(arg, value) !== null;\n }\n if (arg.typeID !== value.typeID) {\n return false;\n }\n switch (arg.typeID) {\n case TypeID.collection:\n return compareTemplated(substitutes, arg.base, (value as EchelonCollection).base);\n case TypeID.tuple: {\n if (arg.factors.length !== (value as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < arg.factors.length; ++index) {\n if (!compareTemplated(substitutes, arg.factors[index], (value as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n/** Apply substitutions to typification. */\nexport function substituteBase(target: Typification, substitutes: Map<string, Typification>): void {\n switch (target.typeID) {\n case TypeID.basic: {\n if (substitutes.has(target.baseID)) {\n Object.assign(target, substitutes.get(target.baseID)!);\n }\n return;\n }\n case TypeID.collection: {\n substituteBase(target.base, substitutes);\n return;\n }\n case TypeID.tuple: {\n for (const factor of target.factors) {\n substituteBase(factor, substitutes);\n }\n return;\n }\n }\n}\n\n/** Extract bases from typification. */\nexport function extractBases(target: ExpressionType): Set<string> {\n return new Set(extractBasesImpl(target));\n}\n\n/** Apply type path to typification. */\nexport function applyPath(target: Typification, path: TypePath, index = 0): Typification | null {\n let current: Typification | null = target;\n let i = index;\n while (i < path.length && current) {\n switch (current.typeID) {\n case TypeID.anyTypification:\n case TypeID.integer:\n case TypeID.basic:\n return null;\n case TypeID.collection:\n current = current.base;\n i++;\n break;\n case TypeID.tuple:\n current = component(current, path[i]);\n if (current === null) {\n return null;\n }\n i++;\n break;\n }\n }\n return current;\n}\n\n// ===== Internals =====\nfunction commonType(type1: Typification, type2: Typification): Typification | null {\n if (type1 === type2) {\n return type1;\n }\n const int1 = 'isIntegerCompatible' in type1 && type1.isIntegerCompatible;\n const int2 = 'isIntegerCompatible' in type2 && type2.isIntegerCompatible;\n if (!int1 || !int2) {\n if (type1.typeID === TypeID.basic && type2.typeID === TypeID.basic) {\n return type1.baseID === type2.baseID ? type1 : null;\n }\n return null;\n }\n if (type1.typeID === TypeID.integer) {\n return type2;\n } else if (type2.typeID === TypeID.integer) {\n return type1;\n } else {\n return IntegerT;\n }\n}\n\nfunction extractBasesImpl(target: ExpressionType): string[] {\n switch (target.typeID) {\n case TypeID.basic:\n return [target.baseID];\n case TypeID.collection:\n return extractBasesImpl(target.base);\n case TypeID.tuple:\n return target.factors.reduce((result, factor) => result.concat(extractBasesImpl(factor)), [] as string[]);\n case TypeID.function:\n const result = extractBasesImpl(target.result);\n return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), result);\n case TypeID.predicate:\n return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), [] as string[]);\n default:\n return [];\n }\n}\n"],"mappings":"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","names":["component","result"]}
|
|
1
|
+
{"version":3,"file":"typification-api.js","names":[],"sources":["../../../src/rslang/semantic/typification-api.ts"],"sourcesContent":["/**\n * Module: Typification API for RSLang.\n */\n\nimport {\n bool,\n component,\n type EchelonBase,\n type EchelonCollection,\n type EchelonTuple,\n type ExpressionType,\n IntegerT,\n isRadical,\n isTypification,\n tuple,\n TypeClass,\n TypeID,\n type TypePath,\n type Typification\n} from './typification';\n\n/** Record map from typeID to typeClass. */\nconst TypeIDToClass: Record<TypeID, TypeClass> = {\n [TypeID.anyTypification]: TypeClass.typification,\n [TypeID.integer]: TypeClass.typification,\n [TypeID.basic]: TypeClass.typification,\n [TypeID.tuple]: TypeClass.typification,\n [TypeID.collection]: TypeClass.typification,\n [TypeID.logic]: TypeClass.logic,\n [TypeID.function]: TypeClass.function,\n [TypeID.predicate]: TypeClass.predicate\n};\n\n/** Returns the TypeClass associated with the given TypeID. */\nexport function getTypeClass(typeID: TypeID): TypeClass {\n return TypeIDToClass[typeID];\n}\n\n/** Returns true if the given typification is generic. */\nexport function hasGenerics(type: Typification): boolean {\n switch (type.typeID) {\n case TypeID.anyTypification:\n return true;\n case TypeID.integer:\n return false;\n case TypeID.basic:\n return isRadical(type.baseID);\n case TypeID.collection:\n return hasGenerics(type.base);\n case TypeID.tuple:\n for (const factor of type.factors) {\n if (hasGenerics(factor)) {\n return true;\n }\n }\n return false;\n }\n}\n\n/** Checks if two typifications are equal. */\nexport function checkEquality(type1: Typification, type2: Typification): boolean {\n if (type1 === type2) {\n return true;\n }\n if (type1.typeID !== type2.typeID) {\n return false;\n }\n switch (type1.typeID) {\n case TypeID.integer:\n case TypeID.anyTypification:\n return true;\n case TypeID.basic:\n return type1.baseID === (type2 as EchelonBase).baseID;\n case TypeID.collection:\n return checkEquality(type1.base, (type2 as EchelonCollection).base);\n case TypeID.tuple: {\n if (type1.factors.length !== (type2 as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < type1.factors.length; ++index) {\n if (!checkEquality(type1.factors[index], (type2 as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n/** Merge two types to get result of binary operation. */\nexport function mergeTypifications(type1: Typification, type2: Typification): Typification | null {\n if (type1 === type2) {\n return type1;\n }\n if (type1.typeID === TypeID.anyTypification) {\n return isTypification(type2) ? type2 : null;\n }\n if (type2.typeID === TypeID.anyTypification) {\n return isTypification(type1) ? type1 : null;\n }\n\n switch (type1.typeID) {\n case TypeID.integer:\n case TypeID.basic:\n return commonType(type1, type2);\n case TypeID.collection:\n if (type2.typeID !== TypeID.collection) {\n return null;\n }\n const base = mergeTypifications(type1.base, type2.base);\n return base ? bool(base) : null;\n case TypeID.tuple:\n if (type2.typeID !== TypeID.tuple) {\n return null;\n }\n if (type1.factors.length !== type2.factors.length) {\n return null;\n }\n const components: Typification[] = [];\n for (let index = 0; index < type1.factors.length; ++index) {\n const component = mergeTypifications(type1.factors[index], type2.factors[index]);\n if (component === null) {\n return null;\n }\n components.push(component);\n }\n return tuple(components);\n }\n}\n\n/** Check compatibility of typifications. */\nexport function checkCompatibility(type1: ExpressionType, type2: ExpressionType): boolean {\n if (type1 === type2) {\n return true;\n }\n if (type1.typeID === TypeID.anyTypification) {\n return isTypification(type2);\n }\n if (type2.typeID === TypeID.anyTypification) {\n return isTypification(type1);\n }\n if (isTypification(type1) !== isTypification(type2)) {\n return false;\n }\n if (\n type1.typeID === TypeID.integer ||\n type1.typeID === TypeID.basic ||\n type2.typeID === TypeID.integer ||\n type2.typeID === TypeID.basic\n ) {\n return commonType(type1 as Typification, type2 as Typification) !== null;\n }\n\n if (type1.typeID !== type2.typeID) {\n return false;\n }\n switch (type1.typeID) {\n case TypeID.collection:\n return checkCompatibility(type1.base, (type2 as EchelonCollection).base);\n case TypeID.tuple:\n if (type1.factors.length !== (type2 as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < type1.factors.length; ++index) {\n if (!checkCompatibility(type1.factors[index], (type2 as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n case TypeID.logic:\n case TypeID.predicate:\n case TypeID.function:\n return false;\n }\n}\n\n/** Compare typification with substitutions. */\nexport function compareTemplated(\n substitutes: Map<string, Typification>,\n arg: Typification,\n value: Typification\n): boolean {\n if (arg === value) {\n return true;\n }\n if (arg.typeID === TypeID.basic && isRadical(arg.baseID)) {\n if (!substitutes.has(arg.baseID)) {\n substitutes.set(arg.baseID, value);\n return true;\n } else {\n const mergeType = mergeTypifications(substitutes.get(arg.baseID)!, value);\n if (mergeType === null) {\n return false;\n }\n substitutes.set(arg.baseID, mergeType);\n return true;\n }\n }\n if (value.typeID === TypeID.anyTypification) {\n return true;\n }\n if (\n arg.typeID === TypeID.integer ||\n arg.typeID === TypeID.basic ||\n value.typeID === TypeID.integer ||\n value.typeID === TypeID.basic\n ) {\n return commonType(arg, value) !== null;\n }\n if (arg.typeID !== value.typeID) {\n return false;\n }\n switch (arg.typeID) {\n case TypeID.collection:\n return compareTemplated(substitutes, arg.base, (value as EchelonCollection).base);\n case TypeID.tuple: {\n if (arg.factors.length !== (value as EchelonTuple).factors.length) {\n return false;\n }\n for (let index = 0; index < arg.factors.length; ++index) {\n if (!compareTemplated(substitutes, arg.factors[index], (value as EchelonTuple).factors[index])) {\n return false;\n }\n }\n return true;\n }\n }\n}\n\n/** Apply substitutions to typification. */\nexport function substituteBase(target: Typification, substitutes: Map<string, Typification>): void {\n switch (target.typeID) {\n case TypeID.basic: {\n if (substitutes.has(target.baseID)) {\n Object.assign(target, substitutes.get(target.baseID)!);\n }\n return;\n }\n case TypeID.collection: {\n substituteBase(target.base, substitutes);\n return;\n }\n case TypeID.tuple: {\n for (const factor of target.factors) {\n substituteBase(factor, substitutes);\n }\n return;\n }\n }\n}\n\n/** Extract bases from typification. */\nexport function extractBases(target: ExpressionType): Set<string> {\n return new Set(extractBasesImpl(target));\n}\n\n/** Apply type path to typification. */\nexport function applyPath(target: Typification, path: TypePath, index = 0): Typification | null {\n let current: Typification | null = target;\n let i = index;\n while (i < path.length && current) {\n switch (current.typeID) {\n case TypeID.anyTypification:\n case TypeID.integer:\n case TypeID.basic:\n return null;\n case TypeID.collection:\n current = current.base;\n i++;\n break;\n case TypeID.tuple:\n current = component(current, path[i]);\n if (current === null) {\n return null;\n }\n i++;\n break;\n }\n }\n return current;\n}\n\n// ===== Internals =====\nfunction commonType(type1: Typification, type2: Typification): Typification | null {\n if (type1 === type2) {\n return type1;\n }\n const int1 = 'isIntegerCompatible' in type1 && type1.isIntegerCompatible;\n const int2 = 'isIntegerCompatible' in type2 && type2.isIntegerCompatible;\n if (!int1 || !int2) {\n if (type1.typeID === TypeID.basic && type2.typeID === TypeID.basic) {\n return type1.baseID === type2.baseID ? type1 : null;\n }\n return null;\n }\n if (type1.typeID === TypeID.integer) {\n return type2;\n } else if (type2.typeID === TypeID.integer) {\n return type1;\n } else {\n return IntegerT;\n }\n}\n\nfunction extractBasesImpl(target: ExpressionType): string[] {\n switch (target.typeID) {\n case TypeID.basic:\n return [target.baseID];\n case TypeID.collection:\n return extractBasesImpl(target.base);\n case TypeID.tuple:\n return target.factors.reduce((result, factor) => result.concat(extractBasesImpl(factor)), [] as string[]);\n case TypeID.function:\n const result = extractBasesImpl(target.result);\n return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), result);\n case TypeID.predicate:\n return target.args.reduce((result, arg) => result.concat(extractBasesImpl(arg.type)), [] as string[]);\n default:\n return [];\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
interface TypificationParseResult {
|
|
5
|
-
type: ExpressionType | null;
|
|
6
|
-
error: string | null;
|
|
7
|
-
}
|
|
8
|
-
declare function parseTypeText(input: string): TypificationParseResult;
|
|
9
|
-
/** ASCII substitutions while editing typification text */
|
|
10
|
-
declare function applyAsciiTypeSubstitutions(raw: string): string;
|
|
11
|
-
|
|
12
|
-
export { type TypificationParseResult, applyAsciiTypeSubstitutions, parseTypeText };
|
|
1
|
+
import { n as applyAsciiTypeSubstitutions, r as parseTypeText, t as TypificationParseResult } from "../../typification-parser-BBVx1RxP.js";
|
|
2
|
+
export { TypificationParseResult, applyAsciiTypeSubstitutions, parseTypeText };
|