occam-nominal 1.0.323 → 1.0.325
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/lib/element/constructor.js +66 -43
- package/lib/element/declaration/constructor.js +26 -24
- package/lib/element/declaration/type.js +60 -63
- package/package.json +1 -1
- package/src/element/constructor.js +81 -46
- package/src/element/declaration/constructor.js +28 -29
- package/src/element/declaration/type.js +80 -86
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
const _occamlanguages = require("occam-languages");
|
|
12
12
|
const _elements = require("../elements");
|
|
13
|
+
const _continuation = require("../utilities/continuation");
|
|
13
14
|
const _type = require("../utilities/type");
|
|
14
15
|
const _instantiate = require("../process/instantiate");
|
|
15
16
|
const _validation = require("../process/validation");
|
|
@@ -59,64 +60,86 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
|
|
|
59
60
|
setType(type) {
|
|
60
61
|
this.type = type;
|
|
61
62
|
}
|
|
62
|
-
|
|
63
|
+
verify(context, continuation) {
|
|
63
64
|
let verifies = false;
|
|
64
65
|
const includeType = false, constructorString = this.getString(includeType);
|
|
65
66
|
context.trace(`Verifying the '${constructorString}' constructor...`);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
(0, _context.attempt)((context)=>{
|
|
68
|
+
this.validateTerm(context, (termValidates)=>{
|
|
69
|
+
if (termValidates) {
|
|
70
|
+
verifies = true;
|
|
71
|
+
}
|
|
72
|
+
if (verifies) {
|
|
73
|
+
this.commit(context);
|
|
74
|
+
}
|
|
75
|
+
if (verifies) {
|
|
76
|
+
context.debug(`...verified the '${constructorString}' constructor.`);
|
|
77
|
+
}
|
|
78
|
+
return continuation(verifies);
|
|
79
|
+
});
|
|
74
80
|
}, context);
|
|
75
|
-
if (verifies) {
|
|
76
|
-
context.debug(`...verified the '${constructorString}' constructor.`);
|
|
77
|
-
}
|
|
78
|
-
return verifies;
|
|
79
81
|
}
|
|
80
|
-
|
|
81
|
-
let termValidates = false;
|
|
82
|
+
validateTerm(context, continuation) {
|
|
82
83
|
const includeType = false, constructorString = this.getString(includeType);
|
|
83
84
|
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
85
|
+
const validateTermAsVariable = this.validateTermAsVariable.bind(this), validateTermAsConstructor = this.validateTermAsConstructor.bind(this);
|
|
86
|
+
return (0, _continuation.exists)([
|
|
87
|
+
validateTermAsVariable,
|
|
88
|
+
validateTermAsConstructor
|
|
89
|
+
], context, (termValidates)=>{
|
|
90
|
+
if (termValidates) {
|
|
91
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
92
|
+
}
|
|
93
|
+
return continuation(termValidates);
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
validateTermAsVariable(context, continuation) {
|
|
84
97
|
const hypothtical = this.isHypothetical();
|
|
85
|
-
if (hypothtical) {
|
|
86
|
-
const termValidatesAsVariable =
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
if (!hypothtical) {
|
|
99
|
+
const termValidatesAsVariable = false;
|
|
100
|
+
return continuation(termValidatesAsVariable);
|
|
101
|
+
}
|
|
102
|
+
const includeType = false, constructorString = this.getString(includeType);
|
|
103
|
+
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
104
|
+
(0, _validation.validateTermAsVariable)(this.term, context, (term, context)=>{
|
|
105
|
+
let termValidatesAsVariable = false;
|
|
106
|
+
const type = term.getType(), baseType = (0, _type.baseTypeFromNothing)();
|
|
107
|
+
if (type === baseType) {
|
|
108
|
+
termValidatesAsVariable = true;
|
|
109
|
+
}
|
|
94
110
|
if (termValidatesAsVariable) {
|
|
95
|
-
|
|
111
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
96
112
|
}
|
|
97
|
-
|
|
98
|
-
|
|
113
|
+
return continuation(termValidatesAsVariable);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
validateTermAsConstructor(context, continuation) {
|
|
117
|
+
const hypothtical = this.isHypothetical();
|
|
118
|
+
if (hypothtical) {
|
|
119
|
+
const termValidatesAsConstructor = false;
|
|
120
|
+
return continuation(termValidatesAsConstructor);
|
|
121
|
+
}
|
|
122
|
+
const includeType = false, constructorString = this.getString(includeType);
|
|
123
|
+
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
124
|
+
(0, _validate.validateTermAsConstructor)(this.term, context, (termValidatesAsConstructor)=>{
|
|
99
125
|
if (termValidatesAsConstructor) {
|
|
100
|
-
|
|
126
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
101
127
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
105
|
-
}
|
|
106
|
-
return termValidates;
|
|
128
|
+
return continuation(termValidatesAsConstructor);
|
|
129
|
+
});
|
|
107
130
|
}
|
|
108
|
-
|
|
131
|
+
unifyTerm(term, context, continuation) {
|
|
109
132
|
let termUnifies = false;
|
|
110
133
|
const termString = term.getString(), includeType = true, constructorString = this.getString(includeType); ///
|
|
111
134
|
context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
|
|
112
|
-
const hypothesesDiscardedGivenTerm =
|
|
135
|
+
const hypothesesDiscardedGivenTerm = this.dischargeHypothesesGivenTerm(term, context);
|
|
113
136
|
if (hypothesesDiscardedGivenTerm) {
|
|
114
137
|
const constructor = this, constructorContext = constructor.getContext(), generalContext = constructorContext, specifiContext = context, termUnifiesWithConstructor = (0, _unify.unifyTermWithConstructor)(term, constructor, generalContext, specifiContext);
|
|
115
138
|
if (termUnifiesWithConstructor) {
|
|
116
139
|
const provisional = this.type.isProvisional();
|
|
117
140
|
term.setType(this.type);
|
|
118
141
|
term.setProvisional(provisional);
|
|
119
|
-
const validatesForwards =
|
|
142
|
+
const validatesForwards = validateForwards(term, context);
|
|
120
143
|
if (validatesForwards) {
|
|
121
144
|
termUnifies = true;
|
|
122
145
|
}
|
|
@@ -127,23 +150,23 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
|
|
|
127
150
|
}
|
|
128
151
|
return termUnifies;
|
|
129
152
|
}
|
|
130
|
-
|
|
153
|
+
dischargeHypothesisGivenTerm(hypothesis, term, context) {
|
|
131
154
|
let hypothesisDischargesGivenTerm;
|
|
132
|
-
|
|
155
|
+
this.break(context);
|
|
133
156
|
const termString = term.getString(), hypothesisString = hypothesis.getString(), constructorString = this.getString(); ///
|
|
134
157
|
context.trace(`Discharding the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term...`);
|
|
135
|
-
hypothesisDischargesGivenTerm =
|
|
158
|
+
hypothesisDischargesGivenTerm = hypothesis.dischargeGivenTerm(term, context);
|
|
136
159
|
if (hypothesisDischargesGivenTerm) {
|
|
137
160
|
context.trace(`...discharges the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term.`);
|
|
138
161
|
}
|
|
139
162
|
return hypothesisDischargesGivenTerm;
|
|
140
163
|
}
|
|
141
|
-
|
|
164
|
+
dischargeHypothesesGivenTerm(term, context) {
|
|
142
165
|
let hypothesesDischargesGivenTerm = true; ///
|
|
143
166
|
const hypothetical = this.isHypothetical();
|
|
144
167
|
if (hypothetical) {
|
|
145
|
-
hypothesesDischargesGivenTerm =
|
|
146
|
-
const hypothesisDischarges =
|
|
168
|
+
hypothesesDischargesGivenTerm = every(this.hypotheses, (hypothesis)=>{
|
|
169
|
+
const hypothesisDischarges = this.dischargeHypothesisGivenTerm(hypothesis, term, context);
|
|
147
170
|
if (hypothesisDischarges) {
|
|
148
171
|
return true;
|
|
149
172
|
}
|
|
@@ -181,4 +204,4 @@ const _default = (0, _elements.define)(class Constructor extends _occamlanguages
|
|
|
181
204
|
}
|
|
182
205
|
});
|
|
183
206
|
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgYmFzZVR5cGVGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvdHlwZVwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGVDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGlvblwiO1xuaW1wb3J0IHsgdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcbmltcG9ydCB7IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3VuaWZ5XCI7XG5pbXBvcnQgeyB2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIH0gZnJvbSBcIi4uL3Byb2Nlc3MvdmFsaWRhdGVcIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcbmltcG9ydCB7IGF0dGVtcHQsIHNlcmlhbGlzZSwgdW5zZXJpYWxpc2UsIGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnN0cnVjdG9yIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSwgaHlwb3RoZXNlcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5oeXBvdGhlc2VzID0gaHlwb3RoZXNlcztcbiAgfVxuXG4gIGdldFRlcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybTtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldEh5cG90aGVzZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHlwb3RoZXNlcztcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykge1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBpc0h5cG90aGV0aWNhbCgpIHtcbiAgICBjb25zdCBoeXBvdGhlc2VzTGVuZ3RoID0gdGhpcy5oeXBvdGhlc2VzLmxlbmd0aCxcbiAgICAgICAgICBoeXBvdGhldGljYWwgPSAoaHlwb3RoZXNlc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGh5cG90aGV0aWNhbDtcbiAgfVxuXG4gIGdldENvbnN0cnVjdG9yTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JOb2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnN0cnVjdG9yTm9kZTtcbiAgfVxuXG4gIGdldFN0cmluZyhpbmNsdWRlVHlwZSA9IHRydWUpIHtcbiAgICBsZXQgc3RyaW5nO1xuXG4gICAgaWYgKGluY2x1ZGVUeXBlKSB7XG4gICAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy50ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgICAgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgc3RyaW5nID0gYCR7dGVybVN0cmluZ30uJHt0eXBlU3RyaW5nfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmluZyA9IHN1cGVyLmdldFN0cmluZygpO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5KGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGF3YWl0IGF0dGVtcHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlVGVybShjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlVGVybShjb250ZXh0KSB7XG4gICAgbGV0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gYXdhaXQgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsIGFzeW5jICh0ZXJtLCBjb250ZXh0KSA9PiB7IC8vL1xuICAgICAgICBsZXQgdmFsaWRhdGVzRm9yd2FyZHMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0eXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIGJhc2VUeXBlID0gYmFzZVR5cGVGcm9tTm90aGluZygpO1xuXG4gICAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICAgIHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gYXdhaXQgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvcih0aGlzLnRlcm0sIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpIHtcbiAgICAgICAgdGVybVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICBhc3luYyB1bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSB0cnVlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSA9IGF3YWl0IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtKSB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JDb250ZXh0ID0gY29uc3RydWN0b3IuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJ1Y3RvckNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHNwZWNpZmlDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy50eXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IGF3YWl0IHZhbGlkYXRlRm9yd2FyZHModGVybSwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllcztcbiAgfVxuXG4gIGFzeW5jIGRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0oaHlwb3RoZXNpcywgdGVybSwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gYXdhaXQgaHlwb3RoZXNpcy5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgYXN5bmMgZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTsgIC8vL1xuXG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKGh5cG90aGV0aWNhbCkge1xuICAgICAgaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0gPSBhd2FpdCBldmVyeSh0aGlzLmh5cG90aGVzZXMsIGFzeW5jIChoeXBvdGhlc2lzKSA9PiB7XG4gICAgICAgIGNvbnN0IGh5cG90aGVzaXNEaXNjaGFyZ2VzID0gYXdhaXQgdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtKGh5cG90aGVzaXMsIHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm07XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RydWN0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJoeXBvdGhlc2VzIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImdldENvbnN0cnVjdG9yTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJnZXRTdHJpbmciLCJpbmNsdWRlVHlwZSIsInRlcm1TdHJpbmciLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZlcmlmeSIsInZlcmlmaWVzIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsImF0dGVtcHQiLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiY29tbWl0IiwiZGVidWciLCJoeXBvdGh0aWNhbCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ2YWxpZGF0ZVRlcm1Bc0NvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1VbmlmaWVzIiwiaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSIsImRpc2NoYXJnZUh5cG90aGVzZXNHaXZlblRlcm0iLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmlDb250ZXh0IiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IiLCJwcm92aXNpb25hbCIsImlzUHJvdmlzaW9uYWwiLCJzZXRQcm92aXNpb25hbCIsImRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0iLCJoeXBvdGhlc2lzIiwiaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0iLCJicmVhayIsImh5cG90aGVzaXNTdHJpbmciLCJkaXNjaGFyZ2VHaXZlblRlcm0iLCJoeXBvdGhlc2VzRGlzY2hhcmdlc0dpdmVuVGVybSIsImh5cG90aGVzaXNEaXNjaGFyZ2VzIiwidG9KU09OIiwic2VyaWFsaXNlIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJpbnN0YW50aWF0ZSIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGVDb25zdHJ1Y3RvciIsInRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIiwidHlwZUZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7Z0NBZm9FOzBCQUU3QztzQkFDYTs2QkFDRzs0QkFDQTt5QkFDQzt1QkFDQzswQkFDQztzQkFDRzt5QkFDZ0I7QUFFN0QsTUFBTSxFQUFFQSxLQUFLLEVBQUUsR0FBR0MscUNBQXFCLEVBQ2pDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxvQkFBb0JDLHVCQUFPO0lBQ3JELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsQ0FBRTtRQUNyRSxLQUFLLENBQUNOLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsVUFBVSxHQUFHQTtJQUNwQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDSCxJQUFJO0lBQ2xCO0lBRUFJLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDSCxVQUFVO0lBQ3hCO0lBRUFJLGNBQWNKLFVBQVUsRUFBRTtRQUN4QixJQUFJLENBQUNBLFVBQVUsR0FBR0E7SUFDcEI7SUFFQUssaUJBQWlCO1FBQ2YsTUFBTUMsbUJBQW1CLElBQUksQ0FBQ04sVUFBVSxDQUFDTyxNQUFNLEVBQ3pDQyxlQUFnQkYsbUJBQW1CO1FBRXpDLE9BQU9FO0lBQ1Q7SUFFQUMscUJBQXFCO1FBQ25CLE1BQU1iLE9BQU8sSUFBSSxDQUFDYyxPQUFPLElBQ25CQyxrQkFB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
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgZXhpc3RzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGJhc2VUeXBlRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3R5cGVcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHRlcm1Gcm9tQ29uc3RydWN0b3JOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRlXCI7XG5pbXBvcnQgeyB0eXBlRnJvbUpTT04sIHR5cGVUb1R5cGVKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5pbXBvcnQgeyBhdHRlbXB0LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IGV2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvciBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUsIGh5cG90aGVzZXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMuaHlwb3RoZXNlcyA9IGh5cG90aGVzZXM7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRIeXBvdGhlc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmh5cG90aGVzZXM7XG4gIH1cblxuICBzZXRIeXBvdGhlc2VzKGh5cG90aGVzZXMpIHtcbiAgICB0aGlzLmh5cG90aGVzZXMgPSBoeXBvdGhlc2VzO1xuICB9XG5cbiAgaXNIeXBvdGhldGljYWwoKSB7XG4gICAgY29uc3QgaHlwb3RoZXNlc0xlbmd0aCA9IHRoaXMuaHlwb3RoZXNlcy5sZW5ndGgsXG4gICAgICAgICAgaHlwb3RoZXRpY2FsID0gKGh5cG90aGVzZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBoeXBvdGhldGljYWw7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3Rvck5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnN0cnVjdG9yTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3Rvck5vZGU7XG4gIH1cblxuICBnZXRTdHJpbmcoaW5jbHVkZVR5cGUgPSB0cnVlKSB7XG4gICAgbGV0IHN0cmluZztcblxuICAgIGlmIChpbmNsdWRlVHlwZSkge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHN0cmluZyA9IGAke3Rlcm1TdHJpbmd9LiR7dHlwZVN0cmluZ31gO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJpbmcgPSBzdXBlci5nZXRTdHJpbmcoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgc2V0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IuLi5gKTtcblxuICAgIGF0dGVtcHQoKGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMudmFsaWRhdGVUZXJtKGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICAgIGlmICh0ZXJtVmFsaWRhdGVzKSB7XG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0oY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlID0gdGhpcy52YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvciA9IHRoaXMudmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvci5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGV4aXN0cyhbXG4gICAgICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICAgICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3RvclxuICAgIF0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzKSA9PiB7XG4gICAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBoeXBvdGh0aWNhbCA9IHRoaXMuaXNIeXBvdGhldGljYWwoKTtcblxuICAgIGlmICghaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlc0FzVmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCk7XG5cbiAgICAgIGlmICh0eXBlID09PSBiYXNlVHlwZSkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgaHlwb3RodGljYWwgPSB0aGlzLmlzSHlwb3RoZXRpY2FsKCk7XG5cbiAgICBpZiAoaHlwb3RodGljYWwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmdldFN0cmluZyhpbmNsdWRlVHlwZSk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yJ3MgdGVybS4uLmApO1xuXG4gICAgdmFsaWRhdGVUZXJtQXNDb25zdHJ1Y3Rvcih0aGlzLnRlcm0sIGNvbnRleHQsICh0ZXJtVmFsaWRhdGVzQXNDb25zdHJ1Y3RvcikgPT4ge1xuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXNBc0NvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3RvcidzIHRlcm0uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgaW5jbHVkZVR5cGUgPSB0cnVlLFxuICAgICAgICAgIGNvbnN0cnVjdG9yU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoaW5jbHVkZVR5cGUpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgY29uc3QgaHlwb3RoZXNlc0Rpc2NhcmRlZEdpdmVuVGVybSA9IHRoaXMuZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGlmIChoeXBvdGhlc2VzRGlzY2FyZGVkR2l2ZW5UZXJtKSB7XG4gICAgICBjb25zdCBjb25zdHJ1Y3RvciA9IHRoaXMsIC8vL1xuICAgICAgICAgICAgY29uc3RydWN0b3JDb250ZXh0ID0gY29uc3RydWN0b3IuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBjb25zdHJ1Y3RvckNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHNwZWNpZmlDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmlDb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICAgIGNvbnN0IHByb3Zpc2lvbmFsID0gdGhpcy50eXBlLmlzUHJvdmlzaW9uYWwoKTtcblxuICAgICAgICB0ZXJtLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHModGVybSwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVW5pZmllcztcbiAgfVxuXG4gIGRpc2NoYXJnZUh5cG90aGVzaXNHaXZlblRlcm0oaHlwb3RoZXNpcywgdGVybSwgY29udGV4dCkge1xuICAgIGxldCBoeXBvdGhlc2lzRGlzY2hhcmdlc0dpdmVuVGVybTtcblxuICAgIHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBoeXBvdGhlc2lzU3RyaW5nID0gaHlwb3RoZXNpcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBjb25zdHJ1Y3RvclN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgRGlzY2hhcmRpbmcgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gaHlwb3RoZXNpcy5kaXNjaGFyZ2VHaXZlblRlcm0odGVybSwgY29udGV4dCk7XG5cbiAgICBpZiAoaHlwb3RoZXNpc0Rpc2NoYXJnZXNHaXZlblRlcm0pIHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLmRpc2NoYXJnZXMgdGhlICcke2NvbnN0cnVjdG9yU3RyaW5nfScgY29uc3RydWN0b3IncyAnJHtoeXBvdGhlc2lzU3RyaW5nfScgaHlwb3RoZXNpcyBnaXZlbiB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtO1xuICB9XG5cbiAgZGlzY2hhcmdlSHlwb3RoZXNlc0dpdmVuVGVybSh0ZXJtLCBjb250ZXh0KSB7XG4gICAgbGV0IGh5cG90aGVzZXNEaXNjaGFyZ2VzR2l2ZW5UZXJtID0gdHJ1ZTsgIC8vL1xuXG4gICAgY29uc3QgaHlwb3RoZXRpY2FsID0gdGhpcy5pc0h5cG90aGV0aWNhbCgpO1xuXG4gICAgaWYgKGh5cG90aGV0aWNhbCkge1xuICAgICAgaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0gPSBldmVyeSh0aGlzLmh5cG90aGVzZXMsIChoeXBvdGhlc2lzKSA9PiB7XG4gICAgICAgIGNvbnN0IGh5cG90aGVzaXNEaXNjaGFyZ2VzID0gdGhpcy5kaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtKGh5cG90aGVzaXMsIHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChoeXBvdGhlc2lzRGlzY2hhcmdlcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm07XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgcmV0dXJuIHNlcmlhbGlzZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgaW5jbHVkZVR5cGUgPSBmYWxzZSxcbiAgICAgICAgICAgIHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKGluY2x1ZGVUeXBlKTtcblxuICAgICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgICB0eXBlXG4gICAgICAgICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb25zdHJ1Y3RvclwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnN0cnVjdG9yO1xuXG4gICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3Rvck5vZGUgPSBpbnN0YW50aWF0ZUNvbnN0cnVjdG9yKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb25zdHJ1Y3Rvck5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db25zdHJ1Y3Rvck5vZGUoY29uc3RydWN0b3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb25zdHJ1Y3RvciA9IG5ldyBDb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3I7XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiQ29uc3RydWN0b3IiLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJoeXBvdGhlc2VzIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRIeXBvdGhlc2VzIiwic2V0SHlwb3RoZXNlcyIsImlzSHlwb3RoZXRpY2FsIiwiaHlwb3RoZXNlc0xlbmd0aCIsImxlbmd0aCIsImh5cG90aGV0aWNhbCIsImdldENvbnN0cnVjdG9yTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3Rvck5vZGUiLCJnZXRTdHJpbmciLCJpbmNsdWRlVHlwZSIsInRlcm1TdHJpbmciLCJ0eXBlU3RyaW5nIiwic2V0VHlwZSIsInZlcmlmeSIsImNvbnRpbnVhdGlvbiIsInZlcmlmaWVzIiwiY29uc3RydWN0b3JTdHJpbmciLCJ0cmFjZSIsImF0dGVtcHQiLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwiY29tbWl0IiwiZGVidWciLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwiYmluZCIsInZhbGlkYXRlVGVybUFzQ29uc3RydWN0b3IiLCJleGlzdHMiLCJoeXBvdGh0aWNhbCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwidGVybVZhbGlkYXRlc0FzQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImh5cG90aGVzZXNEaXNjYXJkZWRHaXZlblRlcm0iLCJkaXNjaGFyZ2VIeXBvdGhlc2VzR2l2ZW5UZXJtIiwiY29uc3RydWN0b3IiLCJjb25zdHJ1Y3RvckNvbnRleHQiLCJnZXRDb250ZXh0IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpQ29udGV4dCIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwicHJvdmlzaW9uYWwiLCJpc1Byb3Zpc2lvbmFsIiwic2V0UHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZXNGb3J3YXJkcyIsInZhbGlkYXRlRm9yd2FyZHMiLCJkaXNjaGFyZ2VIeXBvdGhlc2lzR2l2ZW5UZXJtIiwiaHlwb3RoZXNpcyIsImh5cG90aGVzaXNEaXNjaGFyZ2VzR2l2ZW5UZXJtIiwiYnJlYWsiLCJoeXBvdGhlc2lzU3RyaW5nIiwiZGlzY2hhcmdlR2l2ZW5UZXJtIiwiaHlwb3RoZXNlc0Rpc2NoYXJnZXNHaXZlblRlcm0iLCJoeXBvdGhlc2lzRGlzY2hhcmdlcyIsInRvSlNPTiIsInNlcmlhbGlzZSIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJ1bnNlcmlhbGlzZSIsImluc3RhbnRpYXRlQ29uc3RydWN0b3IiLCJ0ZXJtRnJvbUNvbnN0cnVjdG9yTm9kZSIsInR5cGVGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa0JBOzs7ZUFBQTs7O2dDQWhCb0U7MEJBRTdDOzhCQUNBO3NCQUNhOzZCQUNHOzRCQUNBO3lCQUNDO3VCQUNDOzBCQUNDO3NCQUNHO3lCQUNnQjtBQUU3RCxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLG9CQUFvQkMsdUJBQU87SUFDckQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLElBQUksRUFBRUMsVUFBVSxDQUFFO1FBQ3JFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO0lB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
|
|
@@ -8,13 +8,16 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
const _occamlanguages = require("occam-languages");
|
|
11
12
|
const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
|
|
13
|
+
const _continuation = require("../../utilities/continuation");
|
|
12
14
|
const _elements = require("../../elements");
|
|
13
15
|
function _interop_require_default(obj) {
|
|
14
16
|
return obj && obj.__esModule ? obj : {
|
|
15
17
|
default: obj
|
|
16
18
|
};
|
|
17
19
|
}
|
|
20
|
+
const { breakable } = _occamlanguages.breakPointUtilities;
|
|
18
21
|
const _default = (0, _elements.define)(class ConstructorDeclaration extends _declaration.default {
|
|
19
22
|
constructor(context, string, node, breakPoint, type, provisional, constructor){
|
|
20
23
|
super(context, string, node, breakPoint);
|
|
@@ -38,26 +41,25 @@ const _default = (0, _elements.define)(class ConstructorDeclaration extends _dec
|
|
|
38
41
|
setHypotheses(hypotheses) {
|
|
39
42
|
this.constructor.setHypotheses(hypotheses);
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
let verifies = false;
|
|
43
|
-
await this.break(context);
|
|
44
|
+
verify = breakable(function(context, continuation) {
|
|
44
45
|
const constructorDeclarationString = this.getString(); ///
|
|
45
46
|
context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration...`);
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
const verifyType = this.verifyType.bind(this), verifyConstructor = this.verifyConstructor.bind(this);
|
|
48
|
+
return (0, _continuation.all)([
|
|
49
|
+
verifyType,
|
|
50
|
+
verifyConstructor
|
|
51
|
+
], context, (verifies)=>{
|
|
52
|
+
if (verifies) {
|
|
50
53
|
this.constructor.setType(this.type);
|
|
51
54
|
context.addConstructor(this.constructor);
|
|
52
|
-
verifies = true;
|
|
53
55
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
}
|
|
60
|
-
verifyType(context) {
|
|
56
|
+
if (verifies) {
|
|
57
|
+
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
|
|
58
|
+
}
|
|
59
|
+
return continuation(verifies);
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
verifyType(context, continuation) {
|
|
61
63
|
let typeVerifies = false;
|
|
62
64
|
const constructorDeclarationString = this.getString(); ///
|
|
63
65
|
context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's type...`);
|
|
@@ -81,19 +83,19 @@ const _default = (0, _elements.define)(class ConstructorDeclaration extends _dec
|
|
|
81
83
|
if (typeVerifies) {
|
|
82
84
|
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's type.`);
|
|
83
85
|
}
|
|
84
|
-
return typeVerifies;
|
|
86
|
+
return continuation(typeVerifies);
|
|
85
87
|
}
|
|
86
|
-
verifyConstructor(context) {
|
|
87
|
-
let constructorVerifies;
|
|
88
|
+
verifyConstructor(context, continuation) {
|
|
88
89
|
const includeType = false, constructorString = this.constructor.getString(includeType), constructorDeclarationString = this.getString(); ///
|
|
89
90
|
context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor...`);
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
91
|
+
this.constructor.verify(context, (constructorVerifies)=>{
|
|
92
|
+
if (constructorVerifies) {
|
|
93
|
+
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
|
|
94
|
+
}
|
|
95
|
+
return continuation(constructorVerifies);
|
|
96
|
+
});
|
|
95
97
|
}
|
|
96
98
|
static name = "ConstructorDeclaration";
|
|
97
99
|
});
|
|
98
100
|
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL2NvbnN0cnVjdG9yLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgRGVjbGFyYXRpb24gZnJvbSBcIi4uL2RlY2xhcmF0aW9uXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsLCBjb25zdHJ1Y3Rvcikge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0Q29uc3RydWN0b3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3I7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIHNldEh5cG90aGVzZXMoaHlwb3RoZXNlcykgeyB0aGlzLmNvbnN0cnVjdG9yLnNldEh5cG90aGVzZXMoaHlwb3RoZXNlcyk7IH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2NvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdmVyaWZ5VHlwZSA9IHRoaXMudmVyaWZ5VHlwZS5iaW5kKHRoaXMpLFxuICAgICAgICAgIHZlcmlmeUNvbnN0cnVjdG9yID0gdGhpcy52ZXJpZnlDb25zdHJ1Y3Rvci5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2ZXJpZnlUeXBlLFxuICAgICAgdmVyaWZ5Q29uc3RydWN0b3JcbiAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLnNldFR5cGUodGhpcy50eXBlKTtcblxuICAgICAgICBjb250ZXh0LmFkZENvbnN0cnVjdG9yKHRoaXMuY29uc3RydWN0b3IpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke2NvbnN0cnVjdG9yRGVjbGFyYXRpb25TdHJpbmd9JyBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZlcmlmeVR5cGUoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHR5cGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgaWYgKHR5cGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVDb3R5cGUgPSB0eXBlLmlzQ290eXBlKCk7XG5cbiAgICAgIGlmICghdHlwZUNvdHlwZSkge1xuICAgICAgICBjb25zdCBwcm92aXNpb25hbCA9IHRoaXMuaXNQcm92aXNpb25hbCgpLFxuICAgICAgICAgICAgICB0eXBlQ29tcGFyZXNUb1Byb3Zpc2lvbmFsID0gdHlwZS5jb21wYXJlUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgICAgIGlmICghdHlwZUNvbXBhcmVzVG9Qcm92aXNpb25hbCkge1xuICAgICAgICAgIHByb3Zpc2lvbmFsID9cbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBwcmVzZW50IGJ1dCBub3QgcHJvdmlzaW9uYWwuYCkgOlxuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgcHJlc2VudCBidXQgcHJvdmlzaW9uYWwuYCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhIGNvdHlwZS5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24ncyB0eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odHlwZVZlcmlmaWVzKTtcbiAgfVxuXG4gIHZlcmlmeUNvbnN0cnVjdG9yKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IGluY2x1ZGVUeXBlID0gZmFsc2UsXG4gICAgICAgICAgY29uc3RydWN0b3JTdHJpbmcgPSB0aGlzLmNvbnN0cnVjdG9yLmdldFN0cmluZyhpbmNsdWRlVHlwZSksXG4gICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7Y29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZ30nIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uJ3MgJyR7Y29uc3RydWN0b3JTdHJpbmd9JyBjb25zdHJ1Y3Rvci4uLmApO1xuXG4gICAgdGhpcy5jb25zdHJ1Y3Rvci52ZXJpZnkoY29udGV4dCwgKGNvbnN0cnVjdG9yVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChjb25zdHJ1Y3RvclZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtjb25zdHJ1Y3RvckRlY2xhcmF0aW9uU3RyaW5nfScgY29uc3RydWN0b3IgZGVjbGFyYXRpb24ncyAnJHtjb25zdHJ1Y3RvclN0cmluZ30nIGNvbnN0cnVjdG9yLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGNvbnN0cnVjdG9yVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImJyZWFrYWJsZSIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJDb25zdHJ1Y3RvckRlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwicHJvdmlzaW9uYWwiLCJjb25zdHJ1Y3RvciIsImdldFR5cGUiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0Q29uc3RydWN0b3IiLCJnZXRDb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsInNldEh5cG90aGVzZXMiLCJoeXBvdGhlc2VzIiwidmVyaWZ5IiwiY29udGludWF0aW9uIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZ5VHlwZSIsImJpbmQiLCJ2ZXJpZnlDb25zdHJ1Y3RvciIsImFsbCIsInZlcmlmaWVzIiwic2V0VHlwZSIsImFkZENvbnN0cnVjdG9yIiwiZGVidWciLCJ0eXBlVmVyaWZpZXMiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInR5cGVDb3R5cGUiLCJpc0NvdHlwZSIsInR5cGVDb21wYXJlc1RvUHJvdmlzaW9uYWwiLCJjb21wYXJlUHJvdmlzaW9uYWwiLCJpbmNsdWRlVHlwZSIsImNvbnN0cnVjdG9yU3RyaW5nIiwiY29uc3RydWN0b3JWZXJpZmllcyIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVdBOzs7ZUFBQTs7O2dDQVRvQztvRUFFWjs4QkFFSjswQkFDRzs7Ozs7O0FBRXZCLE1BQU0sRUFBRUEsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQjtNQUV6QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLCtCQUErQkMsb0JBQVc7SUFDcEUsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFdBQVcsRUFBRUMsV0FBVyxDQUFFO1FBQzdFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdBO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUdDO0lBQ3JCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0gsSUFBSTtJQUNsQjtJQUVBSSxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0gsV0FBVztJQUN6QjtJQUVBSSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxXQUFXO0lBQ3pCO0lBRUFDLGdDQUFnQztRQUM5QixNQUFNUixPQUFPLElBQUksQ0FBQ1MsT0FBTyxJQUNuQkMsNkJBQTZCVixNQUFNLEdBQUc7UUFFNUMsT0FBT1U7SUFDVDtJQUVBQyxjQUFjQyxVQUFVLEVBQUU7UUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDRCxhQUFhLENBQUNDO0lBQWE7SUFFeEVDLFNBQVNwQixVQUFVLFNBQVVLLE9BQU8sRUFBRWdCLFlBQVk7UUFDaEQsTUFBTUMsK0JBQStCLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFM0RsQixRQUFRbUIsS0FBSyxDQUFD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
|
|
@@ -8,7 +8,9 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
+
const _occamlanguages = require("occam-languages");
|
|
11
12
|
const _declaration = /*#__PURE__*/ _interop_require_default(require("../declaration"));
|
|
13
|
+
const _continuation = require("../../utilities/continuation");
|
|
12
14
|
const _elements = require("../../elements");
|
|
13
15
|
const _type = require("../../utilities/type");
|
|
14
16
|
function _interop_require_default(obj) {
|
|
@@ -16,6 +18,7 @@ function _interop_require_default(obj) {
|
|
|
16
18
|
default: obj
|
|
17
19
|
};
|
|
18
20
|
}
|
|
21
|
+
const { every } = _occamlanguages.continuationUtilities, { breakable } = _occamlanguages.breakPointUtilities;
|
|
19
22
|
const _default = (0, _elements.define)(class TypeDeclaration extends _declaration.default {
|
|
20
23
|
constructor(context, string, node, breakPoint, type, superTypes, provisional){
|
|
21
24
|
super(context, string, node, breakPoint);
|
|
@@ -40,32 +43,29 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
|
|
|
40
43
|
const properties = [];
|
|
41
44
|
return properties;
|
|
42
45
|
}
|
|
43
|
-
|
|
44
|
-
let verifies = false;
|
|
45
|
-
await this.break(context);
|
|
46
|
+
verify = breakable(function(context, continuation) {
|
|
46
47
|
const typeDeclarationString = this.getString(); ///
|
|
47
48
|
context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
|
|
48
|
-
const
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
49
|
+
const verifyType = this.verifyType.bind(this), verifySuperTypes = this.verifySuperTypes.bind(this), verifyTypePrefix = this.verifyTypePrefix.bind(this);
|
|
50
|
+
return (0, _continuation.all)([
|
|
51
|
+
verifyType,
|
|
52
|
+
verifySuperTypes,
|
|
53
|
+
verifyTypePrefix
|
|
54
|
+
], context, (verifies)=>{
|
|
55
|
+
if (verifies) {
|
|
56
|
+
const properties = this.getProperties(), typePrefix = context.getTypePrefix(), prefixName = typePrefix !== null ? typePrefix.getPrefixName() : null;
|
|
57
|
+
this.type.setProvisional(this.provisional);
|
|
58
|
+
this.type.setProperties(properties);
|
|
59
|
+
this.type.setPrefixName(prefixName);
|
|
60
|
+
context.addType(this.type);
|
|
61
61
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
verifyType(context) {
|
|
62
|
+
if (verifies) {
|
|
63
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
|
|
64
|
+
}
|
|
65
|
+
return continuation(verifies);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
verifyType(context, continuation) {
|
|
69
69
|
let typeVerifies = false;
|
|
70
70
|
const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
|
|
71
71
|
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type...`);
|
|
@@ -83,9 +83,42 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
|
|
|
83
83
|
if (typeVerifies) {
|
|
84
84
|
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
|
|
85
85
|
}
|
|
86
|
-
return typeVerifies;
|
|
86
|
+
return continuation(typeVerifies);
|
|
87
|
+
}
|
|
88
|
+
verifyTypePrefix(context, continuation) {
|
|
89
|
+
let typePrefixVerifies = false;
|
|
90
|
+
const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
|
|
91
|
+
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
|
|
92
|
+
const typePrefixed = this.type.isPrefixed();
|
|
93
|
+
if (!typePrefixed) {
|
|
94
|
+
typePrefixVerifies = true;
|
|
95
|
+
} else {
|
|
96
|
+
context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
|
|
97
|
+
}
|
|
98
|
+
if (typePrefixVerifies) {
|
|
99
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
|
|
100
|
+
}
|
|
101
|
+
return continuation(typePrefixVerifies);
|
|
102
|
+
}
|
|
103
|
+
verifySuperTypes(context, continuation) {
|
|
104
|
+
const superTypes = [], typeDeclarationString = this.getString(); ///
|
|
105
|
+
context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
|
|
106
|
+
every(this.superTypes, (superType, continuation)=>{
|
|
107
|
+
this.verifySuperType(superType, superTypes, context, continuation);
|
|
108
|
+
}, (superTypesVerify)=>{
|
|
109
|
+
if (superTypesVerify) {
|
|
110
|
+
const superTypesLength = superTypes.length;
|
|
111
|
+
if (superTypesLength === 0) {
|
|
112
|
+
const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
|
|
113
|
+
superTypes.push(superTyupe);
|
|
114
|
+
}
|
|
115
|
+
this.type.setSuperTypes(superTypes);
|
|
116
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
|
|
117
|
+
}
|
|
118
|
+
return continuation(superTypesVerify);
|
|
119
|
+
});
|
|
87
120
|
}
|
|
88
|
-
verifySuperType(superType, superTypes, context) {
|
|
121
|
+
verifySuperType(superType, superTypes, context, continuation) {
|
|
89
122
|
let superTypeVerifies = false;
|
|
90
123
|
const superTypeString = superType.getString(), typeDeclarationString = this.getString(); ///
|
|
91
124
|
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
|
|
@@ -104,45 +137,9 @@ const _default = (0, _elements.define)(class TypeDeclaration extends _declaratio
|
|
|
104
137
|
if (superTypeVerifies) {
|
|
105
138
|
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
|
|
106
139
|
}
|
|
107
|
-
return superTypeVerifies;
|
|
108
|
-
}
|
|
109
|
-
verifySuperTypes(context) {
|
|
110
|
-
let superTypesVerify;
|
|
111
|
-
const superTypes = [], typeDeclarationString = this.getString(); ///
|
|
112
|
-
context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
|
|
113
|
-
superTypesVerify = this.superTypes.every((superType)=>{
|
|
114
|
-
const superTypeVerifies = this.verifySuperType(superType, superTypes, context);
|
|
115
|
-
if (superTypeVerifies) {
|
|
116
|
-
return true;
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
if (superTypesVerify) {
|
|
120
|
-
const superTypesLength = superTypes.length;
|
|
121
|
-
if (superTypesLength === 0) {
|
|
122
|
-
const baseType = (0, _type.baseTypeFromNothing)(), superTyupe = baseType; ///
|
|
123
|
-
superTypes.push(superTyupe);
|
|
124
|
-
}
|
|
125
|
-
this.type.setSuperTypes(superTypes);
|
|
126
|
-
context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
|
|
127
|
-
}
|
|
128
|
-
return superTypesVerify;
|
|
129
|
-
}
|
|
130
|
-
verifyTypePrefix(context) {
|
|
131
|
-
let typePrefixVerifies = false;
|
|
132
|
-
const typeString = this.type.getString(), typeDeclarationString = this.getString(); ///
|
|
133
|
-
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
|
|
134
|
-
const typePrefixed = this.type.isPrefixed();
|
|
135
|
-
if (!typePrefixed) {
|
|
136
|
-
typePrefixVerifies = true;
|
|
137
|
-
} else {
|
|
138
|
-
context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
|
|
139
|
-
}
|
|
140
|
-
if (typePrefixVerifies) {
|
|
141
|
-
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
|
|
142
|
-
}
|
|
143
|
-
return typePrefixVerifies;
|
|
140
|
+
return continuation(superTypeVerifies);
|
|
144
141
|
}
|
|
145
142
|
static name = "TypeDeclaration";
|
|
146
143
|
});
|
|
147
144
|
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBEZWNsYXJhdGlvbiBmcm9tIFwiLi4vZGVjbGFyYXRpb25cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBUeXBlRGVjbGFyYXRpb24gZXh0ZW5kcyBEZWNsYXJhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgc3VwZXJUeXBlcywgcHJvdmlzaW9uYWwpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICB0aGlzLnN1cGVyVHlwZXMgPSBzdXBlclR5cGVzO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGdldFN1cGVyVHlwZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwZXJUeXBlcztcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXR0eXBlRGVjbGFyYXRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlRGVjbGFyYXRpb25Ob2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gdHlwZURlY2xhcmF0aW9uTm9kZTtcbiAgfVxuXG4gIGdldFByb3BlcnRpZXMoKSB7XG4gICAgY29uc3QgcHJvcGVydGllcyA9IFtdO1xuXG4gICAgcmV0dXJuIHByb3BlcnRpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZVZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlKGNvbnRleHQpO1xuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc1ZlcmlmeSA9IHRoaXMudmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3QgdHlwZVByZWZpeFZlcmlmaWVzID0gdGhpcy52ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgICAgdHlwZVByZWZpeCA9IGNvbnRleHQuZ2V0VHlwZVByZWZpeCgpLFxuICAgICAgICAgICAgICAgIHByZWZpeE5hbWUgPSAodHlwZVByZWZpeCAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvdmlzaW9uYWwodGhpcy5wcm92aXNpb25hbCk7XG5cbiAgICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICAgIHRoaXMudHlwZS5zZXRQcmVmaXhOYW1lKHByZWZpeE5hbWUpO1xuXG4gICAgICAgICAgY29udGV4dC5hZGRUeXBlKHRoaXMudHlwZSk7XG5cbiAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVR5cGUoY29udGV4dCkge1xuICAgIGxldCB0eXBlVmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdHlwZU5hbWUgPSB0aGlzLnR5cGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIGluY2x1ZGVSZWxlYXNlID0gZmFsc2UsXG4gICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVR5cGVOYW1lKHR5cGVOYW1lLCBpbmNsdWRlUmVsZWFzZSk7XG5cbiAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICBjb25zdCBwcmVmaXhlZFR5cGVOYW1lID0gdHlwZU5hbWUsIC8vL1xuICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeVByZWZpeGVkVHlwZU5hbWUocHJlZml4ZWRUeXBlTmFtZSk7XG5cbiAgICAgIGlmICghdHlwZVByZXNlbnQpIHtcbiAgICAgICAgdHlwZVZlcmlmaWVzID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZWApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlVmVyaWZpZXM7XG4gIH1cblxuICB2ZXJpZnlTdXBlclR5cGUoc3VwZXJUeXBlLCBzdXBlclR5cGVzLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBlclR5cGVWZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeVN1cGVyVHlwZXMoY29udGV4dCkge1xuICAgIGxldCBzdXBlclR5cGVzVmVyaWZ5O1xuXG4gICAgY29uc3Qgc3VwZXJUeXBlcyA9IFtdLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3Mgc3VwZXItdHlwZXMuLi5gKTtcblxuICAgIHN1cGVyVHlwZXNWZXJpZnkgPSB0aGlzLnN1cGVyVHlwZXMuZXZlcnkoKHN1cGVyVHlwZSkgPT4ge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlVmVyaWZpZXMgPSB0aGlzLnZlcmlmeVN1cGVyVHlwZShzdXBlclR5cGUsIHN1cGVyVHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlVmVyaWZpZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VwZXJUeXBlc1ZlcmlmeSkge1xuICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoc3VwZXJUeXBlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCBiYXNlVHlwZSA9IGJhc2VUeXBlRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHl1cGUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXJUeXBlc1ZlcmlmeTtcbiAgfVxuXG4gIHZlcmlmeVR5cGVQcmVmaXgoY29udGV4dCkge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVQcmVmaXhWZXJpZmllcztcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUeXBlRGVjbGFyYXRpb25cIjtcbn0pO1xuIl0sIm5hbWVzIjpbImRlZmluZSIsIlR5cGVEZWNsYXJhdGlvbiIsIkRlY2xhcmF0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInN1cGVyVHlwZXMiLCJwcm92aXNpb25hbCIsImdldFR5cGUiLCJnZXRTdXBlclR5cGVzIiwiaXNQcm92aXNpb25hbCIsImdldHR5cGVEZWNsYXJhdGlvbk5vZGUiLCJnZXROb2RlIiwidHlwZURlY2xhcmF0aW9uTm9kZSIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsInR5cGVEZWNsYXJhdGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidHlwZVZlcmlmaWVzIiwidmVyaWZ5VHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJ2ZXJpZnlTdXBlclR5cGVzIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidmVyaWZ5VHlwZVByZWZpeCIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidmVyaWZ5U3VwZXJUeXBlIiwic3VwZXJUeXBlIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInB1c2giLCJldmVyeSIsInN1cGVyVHlwZXNMZW5ndGgiLCJsZW5ndGgiLCJiYXNlVHlwZSIsImJhc2VUeXBlRnJvbU5vdGhpbmciLCJzdXBlclR5dXBlIiwic2V0U3VwZXJUeXBlcyIsInR5cGVQcmVmaXhlZCIsImlzUHJlZml4ZWQiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFPQTs7O2VBQUE7OztvRUFMd0I7MEJBRUQ7c0JBQ2E7Ozs7OztNQUVwQyxXQUFlQSxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVB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
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2RlY2xhcmF0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMsIGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gXCIuLi9kZWNsYXJhdGlvblwiO1xuXG5pbXBvcnQgeyBhbGwgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBiYXNlVHlwZUZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy90eXBlXCI7XG5cbmNvbnN0IHsgZXZlcnkgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWthYmxlIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVHlwZURlY2xhcmF0aW9uIGV4dGVuZHMgRGVjbGFyYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHN1cGVyVHlwZXMsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgdGhpcy5zdXBlclR5cGVzID0gc3VwZXJUeXBlcztcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH1cblxuICBnZXRTdXBlclR5cGVzKCkge1xuICAgIHJldHVybiB0aGlzLnN1cGVyVHlwZXM7XG4gIH1cblxuICBpc1Byb3Zpc2lvbmFsKCkge1xuICAgIHJldHVybiB0aGlzLnByb3Zpc2lvbmFsO1xuICB9XG5cbiAgZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVEZWNsYXJhdGlvbk5vZGU7XG4gIH1cblxuICBnZXRQcm9wZXJ0aWVzKCkge1xuICAgIGNvbnN0IHByb3BlcnRpZXMgPSBbXTtcblxuICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICB9XG5cbiAgdmVyaWZ5ID0gYnJlYWthYmxlKGZ1bmN0aW9uIChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCB0eXBlRGVjbGFyYXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZlcmlmeVR5cGUgPSB0aGlzLnZlcmlmeVR5cGUuYmluZCh0aGlzKSxcbiAgICAgICAgICB2ZXJpZnlTdXBlclR5cGVzID0gdGhpcy52ZXJpZnlTdXBlclR5cGVzLmJpbmQodGhpcyksXG4gICAgICAgICAgdmVyaWZ5VHlwZVByZWZpeCA9IHRoaXMudmVyaWZ5VHlwZVByZWZpeC5iaW5kKHRoaXMpO1xuXG4gICAgcmV0dXJuIGFsbChbXG4gICAgICB2ZXJpZnlUeXBlLFxuICAgICAgdmVyaWZ5U3VwZXJUeXBlcyxcbiAgICAgIHZlcmlmeVR5cGVQcmVmaXhcbiAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXggPSBjb250ZXh0LmdldFR5cGVQcmVmaXgoKSxcbiAgICAgICAgICAgICAgcHJlZml4TmFtZSA9ICh0eXBlUHJlZml4ICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVQcmVmaXguZ2V0UHJlZml4TmFtZSgpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgICAgIHRoaXMudHlwZS5zZXRQcm92aXNpb25hbCh0aGlzLnByb3Zpc2lvbmFsKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJvcGVydGllcyhwcm9wZXJ0aWVzKTtcblxuICAgICAgICB0aGlzLnR5cGUuc2V0UHJlZml4TmFtZShwcmVmaXhOYW1lKTtcblxuICAgICAgICBjb250ZXh0LmFkZFR5cGUodGhpcy50eXBlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgdmVyaWZ5VHlwZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpLFxuICAgICAgICAgIHR5cGVEZWNsYXJhdGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUuLi5gKTtcblxuICAgIGNvbnN0IHR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5hbWUoKSxcbiAgICAgICAgICBpbmNsdWRlUmVsZWFzZSA9IGZhbHNlLFxuICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlUeXBlTmFtZSh0eXBlTmFtZSwgaW5jbHVkZVJlbGVhc2UpO1xuXG4gICAgaWYgKCF0eXBlUHJlc2VudCkge1xuICAgICAgY29uc3QgcHJlZml4ZWRUeXBlTmFtZSA9IHR5cGVOYW1lLCAvLy9cbiAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lKHByZWZpeGVkVHlwZU5hbWUpO1xuXG4gICAgICBpZiAoIXR5cGVQcmVzZW50KSB7XG4gICAgICAgIHR5cGVWZXJpZmllcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGVgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVWZXJpZmllcyk7XG4gIH1cblxuICB2ZXJpZnlUeXBlUHJlZml4KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0eXBlUHJlZml4VmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHR5cGVTdHJpbmcgPSB0aGlzLnR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHt0eXBlU3RyaW5nfScgdHlwZSdzIHByZWZpeC4uLmApO1xuXG4gICAgY29uc3QgdHlwZVByZWZpeGVkID0gdGhpcy50eXBlLmlzUHJlZml4ZWQoKTtcblxuICAgIGlmICghdHlwZVByZWZpeGVkKSB7XG4gICAgICB0eXBlUHJlZml4VmVyaWZpZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIHByZWZpeGVkLmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlUHJlZml4VmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHt0eXBlRGVjbGFyYXRpb25TdHJpbmd9JyB0eXBlIGRlY2xhcmF0aW9uJ3MgJyR7dHlwZVN0cmluZ30nIHR5cGUncyBwcmVmaXguYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlUHJlZml4VmVyaWZpZXMpO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlcyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdXBlclR5cGVzID0gW10sXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyBzdXBlci10eXBlcy4uLmApO1xuXG4gICAgZXZlcnkodGhpcy5zdXBlclR5cGVzLCAoc3VwZXJUeXBlLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIHRoaXMudmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoc3VwZXJUeXBlc1ZlcmlmeSkgPT4ge1xuICAgICAgaWYgKHN1cGVyVHlwZXNWZXJpZnkpIHtcbiAgICAgICAgY29uc3Qgc3VwZXJUeXBlc0xlbmd0aCA9IHN1cGVyVHlwZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChzdXBlclR5cGVzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY29uc3QgYmFzZVR5cGUgPSBiYXNlVHlwZUZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgICAgICAgc3VwZXJUeXVwZSA9IGJhc2VUeXBlOyAgLy8vXG5cbiAgICAgICAgICBzdXBlclR5cGVzLnB1c2goc3VwZXJUeXVwZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnR5cGUuc2V0U3VwZXJUeXBlcyhzdXBlclR5cGVzKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZURlY2xhcmF0aW9uU3RyaW5nfScgdHlwZSBkZWNsYXJhdGlvbidzIHN1cGVyLXR5cGVzLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cGVyVHlwZXNWZXJpZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5U3VwZXJUeXBlKHN1cGVyVHlwZSwgc3VwZXJUeXBlcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN1cGVyVHlwZVZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdXBlclR5cGVTdHJpbmcgPSBzdXBlclR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdHlwZURlY2xhcmF0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLi4uYCk7XG5cbiAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSBzdXBlclR5cGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgdHlwZU5hbWUgPSBub21pbmFsVHlwZU5hbWUsIC8vL1xuICAgICAgICAgIHR5cGVDb21wYXJlc1RvVHlwZU5hbWUgPSB0aGlzLnR5cGUuY29tcGFyZVR5cGVOYW1lKHR5cGVOYW1lKTtcblxuICAgIGlmICghdHlwZUNvbXBhcmVzVG9UeXBlTmFtZSkge1xuICAgICAgc3VwZXJUeXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgIGlmIChzdXBlclR5cGUgIT09IG51bGwpIHtcbiAgICAgICAgc3VwZXJUeXBlcy5wdXNoKHN1cGVyVHlwZSk7XG5cbiAgICAgICAgc3VwZXJUeXBlVmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3N1cGVyVHlwZVN0cmluZ30nIHN1cGVyLXR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlJ3MgbmFtZSBjb21wYXJlcyB0byB0aGUgJHt0eXBlTmFtZX0nIHR5cGUncyBuYW1lLmApO1xuICAgIH1cblxuICAgIGlmIChzdXBlclR5cGVWZXJpZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVEZWNsYXJhdGlvblN0cmluZ30nIHR5cGUgZGVjbGFyYXRpb24ncyAnJHtzdXBlclR5cGVTdHJpbmd9JyBzdXBlci10eXBlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3VwZXJUeXBlVmVyaWZpZXMpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVEZWNsYXJhdGlvblwiO1xufSk7XG4iXSwibmFtZXMiOlsiZXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZURlY2xhcmF0aW9uIiwiRGVjbGFyYXRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwic3VwZXJUeXBlcyIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImdldFN1cGVyVHlwZXMiLCJpc1Byb3Zpc2lvbmFsIiwiZ2V0dHlwZURlY2xhcmF0aW9uTm9kZSIsImdldE5vZGUiLCJ0eXBlRGVjbGFyYXRpb25Ob2RlIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnRpZXMiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ0eXBlRGVjbGFyYXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZlcmlmeVR5cGUiLCJiaW5kIiwidmVyaWZ5U3VwZXJUeXBlcyIsInZlcmlmeVR5cGVQcmVmaXgiLCJhbGwiLCJ2ZXJpZmllcyIsInR5cGVQcmVmaXgiLCJnZXRUeXBlUHJlZml4IiwicHJlZml4TmFtZSIsImdldFByZWZpeE5hbWUiLCJzZXRQcm92aXNpb25hbCIsInNldFByb3BlcnRpZXMiLCJzZXRQcmVmaXhOYW1lIiwiYWRkVHlwZSIsImRlYnVnIiwidHlwZVZlcmlmaWVzIiwidHlwZVN0cmluZyIsInR5cGVOYW1lIiwiZ2V0TmFtZSIsImluY2x1ZGVSZWxlYXNlIiwidHlwZVByZXNlbnQiLCJpc1R5cGVQcmVzZW50QnlUeXBlTmFtZSIsInByZWZpeGVkVHlwZU5hbWUiLCJpc1R5cGVQcmVzZW50QnlQcmVmaXhlZFR5cGVOYW1lIiwidHlwZVByZWZpeFZlcmlmaWVzIiwidHlwZVByZWZpeGVkIiwiaXNQcmVmaXhlZCIsInN1cGVyVHlwZSIsInZlcmlmeVN1cGVyVHlwZSIsInN1cGVyVHlwZXNWZXJpZnkiLCJzdXBlclR5cGVzTGVuZ3RoIiwibGVuZ3RoIiwiYmFzZVR5cGUiLCJiYXNlVHlwZUZyb21Ob3RoaW5nIiwic3VwZXJUeXVwZSIsInB1c2giLCJzZXRTdXBlclR5cGVzIiwic3VwZXJUeXBlVmVyaWZpZXMiLCJzdXBlclR5cGVTdHJpbmciLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlQ29tcGFyZXNUb1R5cGVOYW1lIiwiY29tcGFyZVR5cGVOYW1lIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsIm5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDtvRUFFbkM7OEJBRUo7MEJBQ0c7c0JBQ2E7Ozs7OztBQUVwQyxNQUFNLEVBQUVBLEtBQUssRUFBRSxHQUFHQyxxQ0FBcUIsRUFDakMsRUFBRUMsU0FBUyxFQUFFLEdBQUdDLG1DQUFtQjtNQUV6QyxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLHdCQUF3QkMsb0JBQVc7SUFDN0QsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsV0FBVyxDQUFFO1FBQzVFLEtBQUssQ0FBQ04sU0FBU0MsUUFBUUMsTUFBTUM7UUFFN0IsSUFBSSxDQUFDQyxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxVQUFVLEdBQUdBO1FBQ2xCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtJQUNyQjtJQUVBQyxVQUFVO1FBQ1IsT0FBTyxJQUFJLENBQUNILElBQUk7SUFDbEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFVBQVU7SUFDeEI7SUFFQUksZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUNILFdBQVc7SUFDekI7SUFFQUkseUJBQXlCO1FBQ3ZCLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxzQkFBc0JWLE1BQU0sR0FBRztRQUVyQyxPQUFPVTtJQUNUO0lBRUFDLGdCQUFnQjtRQUNkLE1BQU1DLGFBQWEsRUFBRTtRQUVyQixPQUFPQTtJQUNUO0lBRUFDLFNBQVNwQixVQUFVLFNBQVVLLE9BQU8sRUFBRWdCLFlBQVk7UUFDaEQsTUFBTUMsd0JB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
|
package/package.json
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
|
+
import { exists } from "../utilities/continuation";
|
|
6
7
|
import { baseTypeFromNothing } from "../utilities/type";
|
|
7
8
|
import { instantiateConstructor } from "../process/instantiate";
|
|
8
9
|
import { validateTermAsVariable } from "../process/validation";
|
|
@@ -73,7 +74,7 @@ export default define(class Constructor extends Element {
|
|
|
73
74
|
this.type = type;
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
|
|
77
|
+
verify(context, continuation) {
|
|
77
78
|
let verifies = false;
|
|
78
79
|
|
|
79
80
|
const includeType = false,
|
|
@@ -81,68 +82,102 @@ export default define(class Constructor extends Element {
|
|
|
81
82
|
|
|
82
83
|
context.trace(`Verifying the '${constructorString}' constructor...`);
|
|
83
84
|
|
|
84
|
-
|
|
85
|
-
|
|
85
|
+
attempt((context) => {
|
|
86
|
+
this.validateTerm(context, (termValidates) => {
|
|
87
|
+
if (termValidates) {
|
|
88
|
+
verifies = true;
|
|
89
|
+
}
|
|
86
90
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
91
|
+
if (verifies) {
|
|
92
|
+
this.commit(context);
|
|
93
|
+
}
|
|
90
94
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
95
|
+
if (verifies) {
|
|
96
|
+
context.debug(`...verified the '${constructorString}' constructor.`);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return continuation(verifies);
|
|
100
|
+
});
|
|
94
101
|
}, context);
|
|
102
|
+
}
|
|
95
103
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
104
|
+
validateTerm(context, continuation) {
|
|
105
|
+
const includeType = false,
|
|
106
|
+
constructorString = this.getString(includeType);
|
|
107
|
+
|
|
108
|
+
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
99
109
|
|
|
100
|
-
|
|
110
|
+
const validateTermAsVariable = this.validateTermAsVariable.bind(this),
|
|
111
|
+
validateTermAsConstructor = this.validateTermAsConstructor.bind(this);
|
|
112
|
+
|
|
113
|
+
return exists([
|
|
114
|
+
validateTermAsVariable,
|
|
115
|
+
validateTermAsConstructor
|
|
116
|
+
], context, (termValidates) => {
|
|
117
|
+
if (termValidates) {
|
|
118
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
return continuation(termValidates);
|
|
122
|
+
});
|
|
101
123
|
}
|
|
102
124
|
|
|
103
|
-
|
|
104
|
-
|
|
125
|
+
validateTermAsVariable(context, continuation) {
|
|
126
|
+
const hypothtical = this.isHypothetical();
|
|
127
|
+
|
|
128
|
+
if (!hypothtical) {
|
|
129
|
+
const termValidatesAsVariable = false;
|
|
130
|
+
|
|
131
|
+
return continuation(termValidatesAsVariable);
|
|
132
|
+
}
|
|
105
133
|
|
|
106
134
|
const includeType = false,
|
|
107
135
|
constructorString = this.getString(includeType);
|
|
108
136
|
|
|
109
137
|
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
110
138
|
|
|
139
|
+
validateTermAsVariable(this.term, context, (term, context) => {
|
|
140
|
+
let termValidatesAsVariable = false;
|
|
141
|
+
|
|
142
|
+
const type = term.getType(),
|
|
143
|
+
baseType = baseTypeFromNothing();
|
|
144
|
+
|
|
145
|
+
if (type === baseType) {
|
|
146
|
+
termValidatesAsVariable = true;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
if (termValidatesAsVariable) {
|
|
150
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
return continuation(termValidatesAsVariable);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
validateTermAsConstructor(context, continuation) {
|
|
111
158
|
const hypothtical = this.isHypothetical();
|
|
112
159
|
|
|
113
160
|
if (hypothtical) {
|
|
114
|
-
const
|
|
115
|
-
let validatesForwards = false;
|
|
161
|
+
const termValidatesAsConstructor = false;
|
|
116
162
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
if (type === baseType) {
|
|
121
|
-
validatesForwards = true;
|
|
122
|
-
}
|
|
163
|
+
return continuation(termValidatesAsConstructor);
|
|
164
|
+
}
|
|
123
165
|
|
|
124
|
-
|
|
125
|
-
|
|
166
|
+
const includeType = false,
|
|
167
|
+
constructorString = this.getString(includeType);
|
|
126
168
|
|
|
127
|
-
|
|
128
|
-
termValidates = true;
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
const termValidatesAsConstructor = await validateTermAsConstructor(this.term, context);
|
|
169
|
+
context.trace(`Validating the '${constructorString}' constructor's term...`);
|
|
132
170
|
|
|
171
|
+
validateTermAsConstructor(this.term, context, (termValidatesAsConstructor) => {
|
|
133
172
|
if (termValidatesAsConstructor) {
|
|
134
|
-
|
|
173
|
+
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
135
174
|
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (termValidates) {
|
|
139
|
-
context.debug(`...validated the '${constructorString}' constructor's term.`);
|
|
140
|
-
}
|
|
141
175
|
|
|
142
|
-
|
|
176
|
+
return continuation(termValidatesAsConstructor);
|
|
177
|
+
});
|
|
143
178
|
}
|
|
144
179
|
|
|
145
|
-
|
|
180
|
+
unifyTerm(term, context, continuation) {
|
|
146
181
|
let termUnifies = false;
|
|
147
182
|
|
|
148
183
|
const termString = term.getString(),
|
|
@@ -151,7 +186,7 @@ export default define(class Constructor extends Element {
|
|
|
151
186
|
|
|
152
187
|
context.trace(`Unifying the '${termString}' term with the '${constructorString}' constructor...`);
|
|
153
188
|
|
|
154
|
-
const hypothesesDiscardedGivenTerm =
|
|
189
|
+
const hypothesesDiscardedGivenTerm = this.dischargeHypothesesGivenTerm(term, context);
|
|
155
190
|
|
|
156
191
|
if (hypothesesDiscardedGivenTerm) {
|
|
157
192
|
const constructor = this, ///
|
|
@@ -167,7 +202,7 @@ export default define(class Constructor extends Element {
|
|
|
167
202
|
|
|
168
203
|
term.setProvisional(provisional);
|
|
169
204
|
|
|
170
|
-
const validatesForwards =
|
|
205
|
+
const validatesForwards = validateForwards(term, context);
|
|
171
206
|
|
|
172
207
|
if (validatesForwards) {
|
|
173
208
|
termUnifies = true;
|
|
@@ -182,10 +217,10 @@ export default define(class Constructor extends Element {
|
|
|
182
217
|
return termUnifies;
|
|
183
218
|
}
|
|
184
219
|
|
|
185
|
-
|
|
220
|
+
dischargeHypothesisGivenTerm(hypothesis, term, context) {
|
|
186
221
|
let hypothesisDischargesGivenTerm;
|
|
187
222
|
|
|
188
|
-
|
|
223
|
+
this.break(context);
|
|
189
224
|
|
|
190
225
|
const termString = term.getString(),
|
|
191
226
|
hypothesisString = hypothesis.getString(),
|
|
@@ -193,7 +228,7 @@ export default define(class Constructor extends Element {
|
|
|
193
228
|
|
|
194
229
|
context.trace(`Discharding the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term...`);
|
|
195
230
|
|
|
196
|
-
hypothesisDischargesGivenTerm =
|
|
231
|
+
hypothesisDischargesGivenTerm = hypothesis.dischargeGivenTerm(term, context);
|
|
197
232
|
|
|
198
233
|
if (hypothesisDischargesGivenTerm) {
|
|
199
234
|
context.trace(`...discharges the '${constructorString}' constructor's '${hypothesisString}' hypothesis given the '${termString}' term.`);
|
|
@@ -202,14 +237,14 @@ export default define(class Constructor extends Element {
|
|
|
202
237
|
return hypothesisDischargesGivenTerm;
|
|
203
238
|
}
|
|
204
239
|
|
|
205
|
-
|
|
240
|
+
dischargeHypothesesGivenTerm(term, context) {
|
|
206
241
|
let hypothesesDischargesGivenTerm = true; ///
|
|
207
242
|
|
|
208
243
|
const hypothetical = this.isHypothetical();
|
|
209
244
|
|
|
210
245
|
if (hypothetical) {
|
|
211
|
-
hypothesesDischargesGivenTerm =
|
|
212
|
-
const hypothesisDischarges =
|
|
246
|
+
hypothesesDischargesGivenTerm = every(this.hypotheses, (hypothesis) => {
|
|
247
|
+
const hypothesisDischarges = this.dischargeHypothesisGivenTerm(hypothesis, term, context);
|
|
213
248
|
|
|
214
249
|
if (hypothesisDischarges) {
|
|
215
250
|
return true;
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { breakPointUtilities } from "occam-languages";
|
|
4
|
+
|
|
3
5
|
import Declaration from "../declaration";
|
|
4
6
|
|
|
7
|
+
import { all } from "../../utilities/continuation";
|
|
5
8
|
import { define } from "../../elements";
|
|
6
9
|
|
|
10
|
+
const { breakable } = breakPointUtilities;
|
|
11
|
+
|
|
7
12
|
export default define(class ConstructorDeclaration extends Declaration {
|
|
8
13
|
constructor(context, string, node, breakPoint, type, provisional, constructor) {
|
|
9
14
|
super(context, string, node, breakPoint);
|
|
@@ -34,37 +39,33 @@ export default define(class ConstructorDeclaration extends Declaration {
|
|
|
34
39
|
|
|
35
40
|
setHypotheses(hypotheses) { this.constructor.setHypotheses(hypotheses); }
|
|
36
41
|
|
|
37
|
-
|
|
38
|
-
let verifies = false;
|
|
39
|
-
|
|
40
|
-
await this.break(context);
|
|
41
|
-
|
|
42
|
+
verify = breakable(function (context, continuation) {
|
|
42
43
|
const constructorDeclarationString = this.getString(); ///
|
|
43
44
|
|
|
44
45
|
context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration...`);
|
|
45
46
|
|
|
46
|
-
const
|
|
47
|
+
const verifyType = this.verifyType.bind(this),
|
|
48
|
+
verifyConstructor = this.verifyConstructor.bind(this);
|
|
47
49
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
return all([
|
|
51
|
+
verifyType,
|
|
52
|
+
verifyConstructor
|
|
53
|
+
], context, (verifies) => {
|
|
54
|
+
if (verifies) {
|
|
52
55
|
this.constructor.setType(this.type);
|
|
53
56
|
|
|
54
57
|
context.addConstructor(this.constructor);
|
|
55
|
-
|
|
56
|
-
verifies = true;
|
|
57
58
|
}
|
|
58
|
-
}
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
if (verifies) {
|
|
61
|
+
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration.`);
|
|
62
|
+
}
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
|
|
64
|
+
return continuation(verifies);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
66
67
|
|
|
67
|
-
verifyType(context) {
|
|
68
|
+
verifyType(context, continuation) {
|
|
68
69
|
let typeVerifies = false;
|
|
69
70
|
|
|
70
71
|
const constructorDeclarationString = this.getString(); ///
|
|
@@ -102,25 +103,23 @@ export default define(class ConstructorDeclaration extends Declaration {
|
|
|
102
103
|
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's type.`);
|
|
103
104
|
}
|
|
104
105
|
|
|
105
|
-
return typeVerifies;
|
|
106
|
+
return continuation(typeVerifies);
|
|
106
107
|
}
|
|
107
108
|
|
|
108
|
-
verifyConstructor(context) {
|
|
109
|
-
let constructorVerifies;
|
|
110
|
-
|
|
109
|
+
verifyConstructor(context, continuation) {
|
|
111
110
|
const includeType = false,
|
|
112
111
|
constructorString = this.constructor.getString(includeType),
|
|
113
112
|
constructorDeclarationString = this.getString(); ///
|
|
114
113
|
|
|
115
114
|
context.trace(`Verifying the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor...`);
|
|
116
115
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
116
|
+
this.constructor.verify(context, (constructorVerifies) => {
|
|
117
|
+
if (constructorVerifies) {
|
|
118
|
+
context.debug(`...verified the '${constructorDeclarationString}' constructor declaration's '${constructorString}' constructor.`);
|
|
119
|
+
}
|
|
122
120
|
|
|
123
|
-
|
|
121
|
+
return continuation(constructorVerifies);
|
|
122
|
+
});
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
static name = "ConstructorDeclaration";
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
+
import { breakPointUtilities, continuationUtilities } from "occam-languages";
|
|
4
|
+
|
|
3
5
|
import Declaration from "../declaration";
|
|
4
6
|
|
|
7
|
+
import { all } from "../../utilities/continuation";
|
|
5
8
|
import { define } from "../../elements";
|
|
6
9
|
import { baseTypeFromNothing } from "../../utilities/type";
|
|
7
10
|
|
|
11
|
+
const { every } = continuationUtilities,
|
|
12
|
+
{ breakable } = breakPointUtilities;
|
|
13
|
+
|
|
8
14
|
export default define(class TypeDeclaration extends Declaration {
|
|
9
15
|
constructor(context, string, node, breakPoint, type, superTypes, provisional) {
|
|
10
16
|
super(context, string, node, breakPoint);
|
|
@@ -39,51 +45,45 @@ export default define(class TypeDeclaration extends Declaration {
|
|
|
39
45
|
return properties;
|
|
40
46
|
}
|
|
41
47
|
|
|
42
|
-
|
|
43
|
-
let verifies = false;
|
|
44
|
-
|
|
45
|
-
await this.break(context);
|
|
46
|
-
|
|
48
|
+
verify = breakable(function (context, continuation) {
|
|
47
49
|
const typeDeclarationString = this.getString(); ///
|
|
48
50
|
|
|
49
51
|
context.trace(`Verifying the '${typeDeclarationString}' type declaration...`);
|
|
50
52
|
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const superTypesVerify = this.verifySuperTypes(context);
|
|
55
|
-
|
|
56
|
-
if (superTypesVerify) {
|
|
57
|
-
const typePrefixVerifies = this.verifyTypePrefix(context);
|
|
53
|
+
const verifyType = this.verifyType.bind(this),
|
|
54
|
+
verifySuperTypes = this.verifySuperTypes.bind(this),
|
|
55
|
+
verifyTypePrefix = this.verifyTypePrefix.bind(this);
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
return all([
|
|
58
|
+
verifyType,
|
|
59
|
+
verifySuperTypes,
|
|
60
|
+
verifyTypePrefix
|
|
61
|
+
], context, (verifies) => {
|
|
62
|
+
if (verifies) {
|
|
63
|
+
const properties = this.getProperties(),
|
|
64
|
+
typePrefix = context.getTypePrefix(),
|
|
65
|
+
prefixName = (typePrefix !== null) ?
|
|
66
|
+
typePrefix.getPrefixName() :
|
|
67
|
+
null;
|
|
65
68
|
|
|
66
|
-
|
|
69
|
+
this.type.setProvisional(this.provisional);
|
|
67
70
|
|
|
68
|
-
|
|
71
|
+
this.type.setProperties(properties);
|
|
69
72
|
|
|
70
|
-
|
|
73
|
+
this.type.setPrefixName(prefixName);
|
|
71
74
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
verifies = true;
|
|
75
|
-
}
|
|
75
|
+
context.addType(this.type);
|
|
76
76
|
}
|
|
77
|
-
}
|
|
78
77
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
78
|
+
if (verifies) {
|
|
79
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration.`);
|
|
80
|
+
}
|
|
82
81
|
|
|
83
|
-
|
|
84
|
-
|
|
82
|
+
return continuation(verifies);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
85
|
|
|
86
|
-
verifyType(context) {
|
|
86
|
+
verifyType(context, continuation) {
|
|
87
87
|
let typeVerifies = false;
|
|
88
88
|
|
|
89
89
|
const typeString = this.type.getString(),
|
|
@@ -112,97 +112,91 @@ export default define(class TypeDeclaration extends Declaration {
|
|
|
112
112
|
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type`);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
|
-
return typeVerifies;
|
|
115
|
+
return continuation(typeVerifies);
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
let
|
|
118
|
+
verifyTypePrefix(context, continuation) {
|
|
119
|
+
let typePrefixVerifies = false;
|
|
120
120
|
|
|
121
|
-
const
|
|
121
|
+
const typeString = this.type.getString(),
|
|
122
122
|
typeDeclarationString = this.getString(); ///
|
|
123
123
|
|
|
124
|
-
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${
|
|
125
|
-
|
|
126
|
-
const nominalTypeName = superType.getNominalTypeName(),
|
|
127
|
-
typeName = nominalTypeName, ///
|
|
128
|
-
typeComparesToTypeName = this.type.compareTypeName(typeName);
|
|
129
|
-
|
|
130
|
-
if (!typeComparesToTypeName) {
|
|
131
|
-
superType = context.findTypeByNominalTypeName(nominalTypeName);
|
|
124
|
+
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix...`);
|
|
132
125
|
|
|
133
|
-
|
|
134
|
-
superTypes.push(superType);
|
|
126
|
+
const typePrefixed = this.type.isPrefixed();
|
|
135
127
|
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
context.debug(`The '${superTypeString}' super-type is not present.`);
|
|
139
|
-
}
|
|
128
|
+
if (!typePrefixed) {
|
|
129
|
+
typePrefixVerifies = true;
|
|
140
130
|
} else {
|
|
141
|
-
context.debug(`The '${
|
|
131
|
+
context.debug(`The '${typeDeclarationString}' type declaration's '${typeString}' type is prefixed.`);
|
|
142
132
|
}
|
|
143
133
|
|
|
144
|
-
if (
|
|
145
|
-
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${
|
|
134
|
+
if (typePrefixVerifies) {
|
|
135
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${typeString}' type's prefix.`);
|
|
146
136
|
}
|
|
147
137
|
|
|
148
|
-
return
|
|
138
|
+
return continuation(typePrefixVerifies);
|
|
149
139
|
}
|
|
150
140
|
|
|
151
|
-
verifySuperTypes(context) {
|
|
152
|
-
let superTypesVerify;
|
|
153
|
-
|
|
141
|
+
verifySuperTypes(context, continuation) {
|
|
154
142
|
const superTypes = [],
|
|
155
143
|
typeDeclarationString = this.getString(); ///
|
|
156
144
|
|
|
157
145
|
context.trace(`Verifying the '${typeDeclarationString}' type declaration's super-types...`);
|
|
158
146
|
|
|
159
|
-
|
|
160
|
-
|
|
147
|
+
every(this.superTypes, (superType, continuation) => {
|
|
148
|
+
this.verifySuperType(superType, superTypes, context, continuation);
|
|
149
|
+
}, (superTypesVerify) => {
|
|
150
|
+
if (superTypesVerify) {
|
|
151
|
+
const superTypesLength = superTypes.length;
|
|
161
152
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
});
|
|
153
|
+
if (superTypesLength === 0) {
|
|
154
|
+
const baseType = baseTypeFromNothing(),
|
|
155
|
+
superTyupe = baseType; ///
|
|
166
156
|
|
|
167
|
-
|
|
168
|
-
|
|
157
|
+
superTypes.push(superTyupe);
|
|
158
|
+
}
|
|
169
159
|
|
|
170
|
-
|
|
171
|
-
const baseType = baseTypeFromNothing(),
|
|
172
|
-
superTyupe = baseType; ///
|
|
160
|
+
this.type.setSuperTypes(superTypes);
|
|
173
161
|
|
|
174
|
-
|
|
162
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
|
|
175
163
|
}
|
|
176
164
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
context.debug(`...verified the '${typeDeclarationString}' type declaration's super-types.`);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
return superTypesVerify;
|
|
165
|
+
return continuation(superTypesVerify);
|
|
166
|
+
});
|
|
183
167
|
}
|
|
184
168
|
|
|
185
|
-
|
|
186
|
-
let
|
|
169
|
+
verifySuperType(superType, superTypes, context, continuation) {
|
|
170
|
+
let superTypeVerifies = false;
|
|
187
171
|
|
|
188
|
-
const
|
|
172
|
+
const superTypeString = superType.getString(),
|
|
189
173
|
typeDeclarationString = this.getString(); ///
|
|
190
174
|
|
|
191
|
-
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${
|
|
175
|
+
context.trace(`Verifying the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type...`);
|
|
192
176
|
|
|
193
|
-
const
|
|
177
|
+
const nominalTypeName = superType.getNominalTypeName(),
|
|
178
|
+
typeName = nominalTypeName, ///
|
|
179
|
+
typeComparesToTypeName = this.type.compareTypeName(typeName);
|
|
194
180
|
|
|
195
|
-
if (!
|
|
196
|
-
|
|
181
|
+
if (!typeComparesToTypeName) {
|
|
182
|
+
superType = context.findTypeByNominalTypeName(nominalTypeName);
|
|
183
|
+
|
|
184
|
+
if (superType !== null) {
|
|
185
|
+
superTypes.push(superType);
|
|
186
|
+
|
|
187
|
+
superTypeVerifies = true;
|
|
188
|
+
} else {
|
|
189
|
+
context.debug(`The '${superTypeString}' super-type is not present.`);
|
|
190
|
+
}
|
|
197
191
|
} else {
|
|
198
|
-
context.debug(`The '${
|
|
192
|
+
context.debug(`The '${superTypeString}' super-type's name compares to the ${typeName}' type's name.`);
|
|
199
193
|
}
|
|
200
194
|
|
|
201
|
-
if (
|
|
202
|
-
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${
|
|
195
|
+
if (superTypeVerifies) {
|
|
196
|
+
context.debug(`...verified the '${typeDeclarationString}' type declaration's '${superTypeString}' super-type.`);
|
|
203
197
|
}
|
|
204
198
|
|
|
205
|
-
return
|
|
199
|
+
return continuation(superTypeVerifies);
|
|
206
200
|
}
|
|
207
201
|
|
|
208
202
|
static name = "TypeDeclaration";
|