occam-furtle 3.0.521 → 3.0.524
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/all.js +126 -0
- package/lib/element/assignment/object.js +23 -1
- package/lib/element/error.js +3 -3
- package/lib/element/every.js +13 -13
- package/lib/element/exists.js +39 -0
- package/lib/element/expression.js +18 -2
- package/lib/element/importStatement.js +3 -2
- package/lib/element/procedure.js +2 -1
- package/lib/element/procedureCall.js +8 -1
- package/lib/element/reduce.js +5 -5
- package/lib/element/referenceListLiteral.js +24 -0
- package/lib/element/references.js +32 -0
- package/lib/element/some.js +7 -7
- package/lib/element/terms.js +2 -2
- package/lib/element/values.js +16 -3
- package/lib/example/furtle/bnf.js +2 -2
- package/lib/node/all.js +39 -0
- package/lib/node/exists.js +39 -0
- package/lib/node/expression.js +9 -1
- package/lib/node/references.js +23 -0
- package/lib/node/referencesListLiteral.js +27 -0
- package/lib/nominalValueProperties.js +34 -18
- package/lib/nonTerminalNodeMap.js +10 -2
- package/lib/parameterNames.js +5 -1
- package/lib/preamble.js +7 -3
- package/lib/process/instantiate.js +1 -1
- package/lib/ruleNames.js +17 -1
- package/lib/utilities/element.js +110 -7
- package/lib/utilities/string.js +38 -5
- package/package.json +5 -5
- package/src/element/all.js +119 -0
- package/src/element/assignment/object.js +48 -1
- package/src/element/error.js +3 -3
- package/src/element/every.js +14 -12
- package/src/element/exists.js +42 -0
- package/src/element/expression.js +19 -1
- package/src/element/importStatement.js +3 -1
- package/src/element/procedure.js +2 -0
- package/src/element/procedureCall.js +14 -0
- package/src/element/reduce.js +4 -4
- package/src/element/referenceListLiteral.js +19 -0
- package/src/element/references.js +31 -0
- package/src/element/some.js +7 -6
- package/src/element/terms.js +1 -1
- package/src/element/values.js +26 -2
- package/src/example/furtle/bnf.js +1 -1
- package/src/node/all.js +44 -0
- package/src/node/exists.js +44 -0
- package/src/node/expression.js +17 -1
- package/src/node/references.js +16 -0
- package/src/node/referencesListLiteral.js +23 -0
- package/src/nominalValueProperties.js +43 -25
- package/src/nonTerminalNodeMap.js +15 -3
- package/src/parameterNames.js +1 -0
- package/src/preamble.js +6 -2
- package/src/process/instantiate.js +6 -1
- package/src/ruleNames.js +4 -0
- package/src/utilities/element.js +147 -14
- package/src/utilities/string.js +49 -6
package/lib/utilities/string.js
CHANGED
|
@@ -9,12 +9,18 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
get allStringFromVariableAndValues () {
|
|
13
|
+
return allStringFromVariableAndValues;
|
|
14
|
+
},
|
|
12
15
|
get anonymousProcedureStringFromTypeParametersAndReturnBlock () {
|
|
13
16
|
return anonymousProcedureStringFromTypeParametersAndReturnBlock;
|
|
14
17
|
},
|
|
15
18
|
get everyStringFromVariableAndAnonymousProcedure () {
|
|
16
19
|
return everyStringFromVariableAndAnonymousProcedure;
|
|
17
20
|
},
|
|
21
|
+
get existsStringFromVariableAndValues () {
|
|
22
|
+
return existsStringFromVariableAndValues;
|
|
23
|
+
},
|
|
18
24
|
get expressionStringFromProperties () {
|
|
19
25
|
return expressionStringFromProperties;
|
|
20
26
|
},
|
|
@@ -39,12 +45,18 @@ _export(exports, {
|
|
|
39
45
|
get primtiveStringFromStringLiteral () {
|
|
40
46
|
return primtiveStringFromStringLiteral;
|
|
41
47
|
},
|
|
48
|
+
get procedureCallStringFromReferenceAndValues () {
|
|
49
|
+
return procedureCallStringFromReferenceAndValues;
|
|
50
|
+
},
|
|
42
51
|
get procedureStringFromTypeLabelExportedParametersAndReturnBlock () {
|
|
43
52
|
return procedureStringFromTypeLabelExportedParametersAndReturnBlock;
|
|
44
53
|
},
|
|
45
54
|
get reduceStringFromVariableInitialExpressionAndAnonymousProcedure () {
|
|
46
55
|
return reduceStringFromVariableInitialExpressionAndAnonymousProcedure;
|
|
47
56
|
},
|
|
57
|
+
get referencesStringFromReferencesArray () {
|
|
58
|
+
return referencesStringFromReferencesArray;
|
|
59
|
+
},
|
|
48
60
|
get returnBlockStringFromReturnStatementNode () {
|
|
49
61
|
return returnBlockStringFromReturnStatementNode;
|
|
50
62
|
},
|
|
@@ -84,6 +96,7 @@ _export(exports, {
|
|
|
84
96
|
});
|
|
85
97
|
const _constants = require("../constants");
|
|
86
98
|
const _stringLiteral = require("./stringLiteral");
|
|
99
|
+
const _element = require("./element");
|
|
87
100
|
function ternaryStringFromTerm(term) {
|
|
88
101
|
const termString = term.getString(), ternaryString = `if (${termString}) { ... } else { ... }`;
|
|
89
102
|
return ternaryString;
|
|
@@ -136,9 +149,9 @@ function valuesStringFromValuesArray(valuesArray) {
|
|
|
136
149
|
}, null); ///
|
|
137
150
|
return valuesString;
|
|
138
151
|
}
|
|
139
|
-
function
|
|
140
|
-
const
|
|
141
|
-
return
|
|
152
|
+
function allStringFromVariableAndValues(variable, values) {
|
|
153
|
+
const variableString = variable.getString(), valuesString = values.getString(), allString = valuesString !== _constants.EMPTY_STRING ? `all(${variableString}, ${valuesString})` : `all(${variableString})`;
|
|
154
|
+
return allString;
|
|
142
155
|
}
|
|
143
156
|
function expressionStringFromProperties(properties) {
|
|
144
157
|
let expressionString;
|
|
@@ -150,6 +163,10 @@ function expressionStringFromProperties(properties) {
|
|
|
150
163
|
});
|
|
151
164
|
return expressionString;
|
|
152
165
|
}
|
|
166
|
+
function primtiveStringFromNominalValue(nominalValue) {
|
|
167
|
+
const string = nominalValue.getString(), primtiveString = string; ///
|
|
168
|
+
return primtiveString;
|
|
169
|
+
}
|
|
153
170
|
function primtiveStringFromStringLiteral(stringLiteral) {
|
|
154
171
|
const string = (0, _stringLiteral.stringFromStringLiteral)(stringLiteral), primtiveString = string; ///
|
|
155
172
|
return primtiveString;
|
|
@@ -158,12 +175,24 @@ function primtiveStringFromNominalValues(nominalValues) {
|
|
|
158
175
|
let primtiveString;
|
|
159
176
|
primtiveString = nominalValues.reduce((primitiveString, nominalValue)=>{
|
|
160
177
|
const nominalValueString = nominalValue.getString();
|
|
161
|
-
primitiveString = primitiveString !== null ? `${primitiveString}, ${nominalValueString}` : nominalValueString
|
|
178
|
+
primitiveString = primitiveString !== null ? `${primitiveString}, '${nominalValueString}'` : `'${nominalValueString}'`;
|
|
162
179
|
return primitiveString;
|
|
163
180
|
}, null);
|
|
164
181
|
primtiveString = `[${primtiveString}]`;
|
|
165
182
|
return primtiveString;
|
|
166
183
|
}
|
|
184
|
+
function existsStringFromVariableAndValues(variable, values) {
|
|
185
|
+
const variableString = variable.getString(), valuesString = values.getString(), existsString = valuesString !== _constants.EMPTY_STRING ? `exists(${variableString}, ${valuesString})` : `exists(${variableString})`;
|
|
186
|
+
return existsString;
|
|
187
|
+
}
|
|
188
|
+
function referencesStringFromReferencesArray(referencesArray) {
|
|
189
|
+
const referencesString = referencesArray.reduce((referencesString, reference)=>{
|
|
190
|
+
const referenceString = reference.getString();
|
|
191
|
+
referencesString = referencesString === null ? referenceString : `${referencesString}, ${referenceString}`;
|
|
192
|
+
return referencesString;
|
|
193
|
+
}, null); ///
|
|
194
|
+
return referencesString;
|
|
195
|
+
}
|
|
167
196
|
function returnBlockStringFromReturnStatementNode(returnStatement) {
|
|
168
197
|
const returnStatementString = returnStatement.getString(), returnBlockString = `{ ... ${returnStatementString} }`;
|
|
169
198
|
return returnBlockString;
|
|
@@ -180,6 +209,10 @@ function typeStringFromTypeNameAndArgumentTypeName(typeName, argumentTypeName) {
|
|
|
180
209
|
}
|
|
181
210
|
return typeString;
|
|
182
211
|
}
|
|
212
|
+
function procedureCallStringFromReferenceAndValues(reference, values) {
|
|
213
|
+
const valuesString = values.getString(), referenceString = reference.getString(), procedureCallString = `${referenceString}(${valuesString})`;
|
|
214
|
+
return procedureCallString;
|
|
215
|
+
}
|
|
183
216
|
function variableAssignmentStringFromTypeAndVariable(type, variable) {
|
|
184
217
|
const typeString = type.getString(), variableString = variable.getString(), variableAssignmentString = `${typeString} ${variableString} = ... ;`;
|
|
185
218
|
return variableAssignmentString;
|
|
@@ -228,4 +261,4 @@ function reduceStringFromVariableInitialExpressionAndAnonymousProcedure(variable
|
|
|
228
261
|
return reduceString;
|
|
229
262
|
}
|
|
230
263
|
|
|
231
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFWFBPUlQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4vc3RyaW5nTGl0ZXJhbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSBgaWYgKCR7dGVybVN0cmluZ30pIHsgLi4uIH0gZWxzZSB7IC4uLiB9YDtcblxuICByZXR1cm4gdGVybmFyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IG5hbWU7ICAvLy9cblxuICByZXR1cm4gdmFyaWFibGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICBsZXQgdGVybVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB0ZXJtU3RyaW5nID0gcHJvcGVydHlTdHJpbmc7ICAvLy9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCB2YWx1ZVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB2YWx1ZVN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmFsdWVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Cb29sZWFuKGJvb2xlYW4pIHtcbiAgY29uc3QgZXhwcmVzc3Npb25TdHJpbmcgPSBgJHtib29sZWFufWA7XG5cbiAgcmV0dXJuIGV4cHJlc3NzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tSW50ZWdlcihpbnRlZ2VyKSB7XG4gIGNvbnN0IGV4cHJlc3NzaW9uU3RyaW5nID0gYCR7aW50ZWdlcn1gO1xuXG4gIHJldHVybiBleHByZXNzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkodGVybXNBcnJheSkge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zQXJyYXkucmVkdWNlKCh0ZXJtc1N0cmluZywgdGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgdGVybXNTdHJpbmcgPSAodGVybXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgIHRlcm1TdHJpbmcgOlxuICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YDtcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSh2YWx1ZXNBcnJheSkge1xuICBjb25zdCB2YWx1ZXNTdHJpbmcgPSB2YWx1ZXNBcnJheS5yZWR1Y2UoKHZhbHVlc1N0cmluZywgdmFsdWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgdmFsdWVzU3RyaW5nID0gKHZhbHVlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHt2YWx1ZXNTdHJpbmd9LCAke3ZhbHVlU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFsdWVzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHZhbHVlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbU5vbWluYWxWYWx1ZShub21pbmFsVmFsdWUpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpLFxuICAgICAgICBwcmltdGl2ZVN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cHJlc3Npb25TdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCBleHByZXNzaW9uU3RyaW5nO1xuXG4gIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHkpID0+IHtcbiAgICBpZiAocHJvcGVydHkgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gcHJvcGVydHkuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGV4cHJlc3Npb25TdHJpbmcgPSBwcm9wZXJ0eVN0cmluZzsgIC8vL1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV4cHJlc3Npb25TdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsKHN0cmluZ0xpdGVyYWwpIHtcbiAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwoc3RyaW5nTGl0ZXJhbCksXG4gICAgICAgIHByaW10aXZlU3RyaW5nID0gc3RyaW5nOyAgLy8vXG5cbiAgcmV0dXJuIHByaW10aXZlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyhub21pbmFsVmFsdWVzKSB7XG4gIGxldCBwcmltdGl2ZVN0cmluZztcblxuICBwcmltdGl2ZVN0cmluZyA9IG5vbWluYWxWYWx1ZXMucmVkdWNlKChwcmltaXRpdmVTdHJpbmcsIG5vbWluYWxWYWx1ZSkgPT4ge1xuICAgIGNvbnN0IG5vbWluYWxWYWx1ZVN0cmluZyA9IG5vbWluYWxWYWx1ZS5nZXRTdHJpbmcoKTtcblxuICAgIHByaW1pdGl2ZVN0cmluZyA9IChwcmltaXRpdmVTdHJpbmcgIT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgYCR7cHJpbWl0aXZlU3RyaW5nfSwgJHtub21pbmFsVmFsdWVTdHJpbmd9YCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVN0cmluZzsgLy8vXG5cbiAgICByZXR1cm4gcHJpbWl0aXZlU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICBwcmltdGl2ZVN0cmluZyA9IGBbJHtwcmltdGl2ZVN0cmluZ31dYDtcblxuICByZXR1cm4gcHJpbXRpdmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnRTdHJpbmcgPSByZXR1cm5TdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gYHsgLi4uICR7cmV0dXJuU3RhdGVtZW50U3RyaW5nfSB9YDtcblxuICByZXR1cm4gcmV0dXJuQmxvY2tTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZShuYW1lLCB0eXBlKSB7XG4gIGNvbnN0IG5hbWVTdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyA9IGAke3R5cGVTdHJpbmd9ICR7bmFtZVN0cmluZ31gO1xuXG4gIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lKHR5cGVOYW1lLCBhcmd1bWVudFR5cGVOYW1lKSB7XG4gIGxldCB0eXBlU3RyaW5nO1xuXG4gIHR5cGVTdHJpbmcgPSBgJHt0eXBlTmFtZX1gO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgdHlwZVN0cmluZyA9IGAke3R5cGVTdHJpbmd9PCR7YXJndW1lbnRUeXBlTmFtZX0+YDtcbiAgfVxuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dHlwZVN0cmluZ30gJHt2YXJpYWJsZVN0cmluZ30gPSAuLi4gO2A7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBgU29tZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9KSBgO1xuXG4gIHJldHVybiBzb21lU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gYEV2ZXJ5KCR7dmFyaWFibGVTdHJpbmd9LCAke2Fub255bW91c1Byb2NlZHVyZVN0cmluZ30pIGA7XG5cbiAgcmV0dXJuIGV2ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpIHtcbiAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZUFzc2lnbm1lbnQuZ2V0VmFyaWFibGUoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dmFyaWFibGVTdHJpbmd9ID0gLi4uYDtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAoJHtwYXJhbWV0ZXJzU3RyaW5nfSkgJHtyZXR1cm5CbG9ja1N0cmluZ31gO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nRnJvbU5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheShub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkpIHtcbiAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9IG5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheS5yZWR1Y2UoKG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcsIG5vbWluYWxWYWx1ZVByb3BlcnR5KSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmcgPSBub21pbmFsVmFsdWVQcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgIG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcgPSAobm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ30sICR7bm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmd9YDtcblxuICAgIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcblxuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICB2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LnJlZHVjZSgodmFyaWFibGVBc3NpZ25tZW50c1N0cmluZywgdmFyaWFibGVBc3NpZ25tZW50KSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZyA9ICh2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgOlxuICAgICAgYCR7dmFyaWFibGVBc3NpZ25tZW50c1N0cmluZ30sICR7dmFyaWFibGVBc3NpZ25tZW50U3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAke3ZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmd9IDtgOyAvLy9cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICBleHBvcnRTVHJpbmcgPSBleHBvcnRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtFWFBPUlR9IGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBgJHtleHBvcnRTVHJpbmd9JHt0eXBlU3RyaW5nfSAke2xhYmVsU3RyaW5nfSgke3BhcmFtZXRlcnNTdHJpbmd9KSAke3JldHVybkJsb2NrU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsRXhwcmVzc2lvbiwgYW5vbnltb3VzUHJvY2VkdXJlKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGluaXRpYWxFeHByZXNzaW9uU3RyaW5nID0gaW5pdGlhbEV4cHJlc3Npb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gYFJlZHVjZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9LCAke2luaXRpYWxFeHByZXNzaW9uU3RyaW5nfSlgO1xuXG4gIHJldHVybiByZWR1Y2VTdHJpbmc7XG59XG5cbiJdLCJuYW1lcyI6WyJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwibm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ0Zyb21Ob21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZSIsInByaW10aXZlU3RyaW5nRnJvbUJvb2xlYW4iLCJwcmltdGl2ZVN0cmluZ0Zyb21JbnRlZ2VyIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyIsInByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwiLCJwcm9jZWR1cmVTdHJpbmdGcm9tVHlwZUxhYmVsRXhwb3J0ZWRQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2siLCJyZWR1Y2VTdHJpbmdGcm9tVmFyaWFibGVJbml0aWFsRXhwcmVzc2lvbkFuZEFub255bW91c1Byb2NlZHVyZSIsInJldHVybkJsb2NrU3RyaW5nRnJvbVJldHVyblN0YXRlbWVudE5vZGUiLCJzb21lU3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwidGVybVN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwidGVybXNTdHJpbmdGcm9tVGVybXNBcnJheSIsInRlcm5hcnlTdHJpbmdGcm9tVGVybSIsInR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lIiwidmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyIsInZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlQXNzaWdubWVudHNBcnJheSIsInZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21WYXJpYWJsZUFzc2lnbm1lbnQiLCJ2YXJpYWJsZVN0cmluZ0Zyb21OYW1lIiwidGVybSIsInRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJ0ZXJuYXJ5U3RyaW5nIiwibmFtZSIsInZhcmlhYmxlU3RyaW5nIiwicHJvcGVydGllcyIsImZvckVhY2giLCJwcm9wZXJ0eSIsInByb3BlcnR5U3RyaW5nIiwidmFsdWVTdHJpbmciLCJib29sZWFuIiwiZXhwcmVzc3Npb25TdHJpbmciLCJpbnRlZ2VyIiwidGVybXNBcnJheSIsInRlcm1zU3RyaW5nIiwicmVkdWNlIiwidmFsdWVzQXJyYXkiLCJ2YWx1ZXNTdHJpbmciLCJ2YWx1ZSIsIm5vbWluYWxWYWx1ZSIsInN0cmluZyIsInByaW10aXZlU3RyaW5nIiwiZXhwcmVzc2lvblN0cmluZyIsInN0cmluZ0xpdGVyYWwiLCJzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbCIsIm5vbWluYWxWYWx1ZXMiLCJwcmltaXRpdmVTdHJpbmciLCJub21pbmFsVmFsdWVTdHJpbmciLCJyZXR1cm5TdGF0ZW1lbnQiLCJyZXR1cm5TdGF0ZW1lbnRTdHJpbmciLCJyZXR1cm5CbG9ja1N0cmluZyIsInR5cGUiLCJuYW1lU3RyaW5nIiwidHlwZVN0cmluZyIsIm5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIiwidHlwZU5hbWUiLCJhcmd1bWVudFR5cGVOYW1lIiwidmFyaWFibGUiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJzb21lU3RyaW5nIiwiZXZlcnlTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJnZXRWYXJpYWJsZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInBhcmFtZXRlcnNTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nIiwibm9taW5hbFZhbHVlUHJvcGVydHkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nIiwibGFiZWwiLCJleHBvcnRlZCIsImxhYmVsU3RyaW5nIiwiZXhwb3J0U1RyaW5nIiwiRVhQT1JUIiwiRU1QVFlfU1RSSU5HIiwicHJvY2VkdXJlU3RyaW5nIiwiaW5pdGlhbEV4cHJlc3Npb24iLCJpbml0aWFsRXhwcmVzc2lvblN0cmluZyIsInJlZHVjZVN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBK0xnQkE7ZUFBQUE7O1FBaEJBQztlQUFBQTs7UUFsRkFDO2VBQUFBOztRQTJHQUM7ZUFBQUE7O1FBN0RBQztlQUFBQTs7UUE3RkFDO2VBQUFBOztRQU1BQztlQUFBQTs7UUFrQ0FDO2VBQUFBOztRQTRCQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQStIQUM7ZUFBQUE7O1FBYUFDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUFySkFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUE4SUFDO2VBQUFBOztRQW5IQUM7ZUFBQUE7O1FBd0NBQztlQUFBQTs7UUF1RkFDO2VBQUFBOztRQXVEQUM7ZUFBQUE7O1FBL0JBQztlQUFBQTs7UUEzS0FDO2VBQUFBOzs7MkJBVnFCOytCQUNHO0FBRWpDLFNBQVNQLHNCQUFzQlEsSUFBSTtJQUN4QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTLElBQzNCQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUVGLFdBQVcsc0JBQXNCLENBQUM7SUFFL0QsT0FBT0U7QUFDVDtBQUVPLFNBQVNKLHVCQUF1QkssSUFBSTtJQUN6QyxNQUFNQyxpQkFBaUJELE1BQU8sR0FBRztJQUVqQyxPQUFPQztBQUNUO0FBRU8sU0FBU2YseUJBQXlCZ0IsVUFBVTtJQUNqRCxJ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
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFWFBPUlQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsIH0gZnJvbSBcIi4vc3RyaW5nTGl0ZXJhbFwiO1xuaW1wb3J0IHtyZWZlcmVuY2VGcm9tUmVmZXJlbmNlTm9kZX0gZnJvbSBcIi4vZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdGVybmFyeVN0cmluZ0Zyb21UZXJtKHRlcm0pIHtcbiAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgIHRlcm5hcnlTdHJpbmcgPSBgaWYgKCR7dGVybVN0cmluZ30pIHsgLi4uIH0gZWxzZSB7IC4uLiB9YDtcblxuICByZXR1cm4gdGVybmFyeVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlU3RyaW5nRnJvbU5hbWUobmFtZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IG5hbWU7ICAvLy9cblxuICByZXR1cm4gdmFyaWFibGVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXJtU3RyaW5nRnJvbVByb3BlcnRpZXMocHJvcGVydGllcykge1xuICBsZXQgdGVybVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB0ZXJtU3RyaW5nID0gcHJvcGVydHlTdHJpbmc7ICAvLy9cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVTdHJpbmdGcm9tUHJvcGVydGllcyhwcm9wZXJ0aWVzKSB7XG4gIGxldCB2YWx1ZVN0cmluZztcblxuICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5KSA9PiB7XG4gICAgaWYgKHByb3BlcnR5ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVN0cmluZyA9IHByb3BlcnR5LmdldFN0cmluZygpO1xuXG4gICAgICB2YWx1ZVN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdmFsdWVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Cb29sZWFuKGJvb2xlYW4pIHtcbiAgY29uc3QgZXhwcmVzc3Npb25TdHJpbmcgPSBgJHtib29sZWFufWA7XG5cbiAgcmV0dXJuIGV4cHJlc3NzaW9uU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJpbXRpdmVTdHJpbmdGcm9tSW50ZWdlcihpbnRlZ2VyKSB7XG4gIGNvbnN0IGV4cHJlc3NzaW9uU3RyaW5nID0gYCR7aW50ZWdlcn1gO1xuXG4gIHJldHVybiBleHByZXNzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkodGVybXNBcnJheSkge1xuICBjb25zdCB0ZXJtc1N0cmluZyA9IHRlcm1zQXJyYXkucmVkdWNlKCh0ZXJtc1N0cmluZywgdGVybSkgPT4ge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgdGVybXNTdHJpbmcgPSAodGVybXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgIHRlcm1TdHJpbmcgOlxuICAgICAgYCR7dGVybXNTdHJpbmd9LCAke3Rlcm1TdHJpbmd9YDtcblxuICAgIHJldHVybiB0ZXJtc1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHJldHVybiB0ZXJtc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlc1N0cmluZ0Zyb21WYWx1ZXNBcnJheSh2YWx1ZXNBcnJheSkge1xuICBjb25zdCB2YWx1ZXNTdHJpbmcgPSB2YWx1ZXNBcnJheS5yZWR1Y2UoKHZhbHVlc1N0cmluZywgdmFsdWUpID0+IHtcbiAgICBjb25zdCB2YWx1ZVN0cmluZyA9IHZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgdmFsdWVzU3RyaW5nID0gKHZhbHVlc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgdmFsdWVTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICBgJHt2YWx1ZXNTdHJpbmd9LCAke3ZhbHVlU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFsdWVzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHZhbHVlc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFsbFN0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyh2YXJpYWJsZSwgdmFsdWVzKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhbHVlc1N0cmluZyA9IHZhbHVlcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgYWxsU3RyaW5nID0gKHZhbHVlc1N0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgICAgICBgYWxsKCR7dmFyaWFibGVTdHJpbmd9LCAke3ZhbHVlc1N0cmluZ30pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgIGBhbGwoJHt2YXJpYWJsZVN0cmluZ30pYDtcblxuICByZXR1cm4gYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzKHByb3BlcnRpZXMpIHtcbiAgbGV0IGV4cHJlc3Npb25TdHJpbmc7XG5cbiAgcHJvcGVydGllcy5mb3JFYWNoKChwcm9wZXJ0eSkgPT4ge1xuICAgIGlmIChwcm9wZXJ0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcHJvcGVydHlTdHJpbmcgPSBwcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgICAgZXhwcmVzc2lvblN0cmluZyA9IHByb3BlcnR5U3RyaW5nOyAgLy8vXG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXhwcmVzc2lvblN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbU5vbWluYWxWYWx1ZShub21pbmFsVmFsdWUpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpLFxuICAgICAgICBwcmltdGl2ZVN0cmluZyA9IHN0cmluZzsgIC8vL1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwoc3RyaW5nTGl0ZXJhbCkge1xuICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbChzdHJpbmdMaXRlcmFsKSxcbiAgICAgICAgcHJpbXRpdmVTdHJpbmcgPSBzdHJpbmc7ICAvLy9cblxuICByZXR1cm4gcHJpbXRpdmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmltdGl2ZVN0cmluZ0Zyb21Ob21pbmFsVmFsdWVzKG5vbWluYWxWYWx1ZXMpIHtcbiAgbGV0IHByaW10aXZlU3RyaW5nO1xuXG4gIHByaW10aXZlU3RyaW5nID0gbm9taW5hbFZhbHVlcy5yZWR1Y2UoKHByaW1pdGl2ZVN0cmluZywgbm9taW5hbFZhbHVlKSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlU3RyaW5nID0gbm9taW5hbFZhbHVlLmdldFN0cmluZygpO1xuXG4gICAgcHJpbWl0aXZlU3RyaW5nID0gKHByaW1pdGl2ZVN0cmluZyAhPT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICBgJHtwcmltaXRpdmVTdHJpbmd9LCAnJHtub21pbmFsVmFsdWVTdHJpbmd9J2AgOlxuICAgICAgICAgICAgICAgICAgICAgICAgYCcke25vbWluYWxWYWx1ZVN0cmluZ30nYDtcblxuICAgIHJldHVybiBwcmltaXRpdmVTdHJpbmc7XG4gIH0sIG51bGwpO1xuXG4gIHByaW10aXZlU3RyaW5nID0gYFske3ByaW10aXZlU3RyaW5nfV1gO1xuXG4gIHJldHVybiBwcmltdGl2ZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0c1N0cmluZ0Zyb21WYXJpYWJsZUFuZFZhbHVlcyh2YXJpYWJsZSwgdmFsdWVzKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHZhbHVlc1N0cmluZyA9IHZhbHVlcy5nZXRTdHJpbmcoKSxcbiAgICAgICAgZXhpc3RzU3RyaW5nID0gKHZhbHVlc1N0cmluZyAhPT0gRU1QVFlfU1RSSU5HKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgZXhpc3RzKCR7dmFyaWFibGVTdHJpbmd9LCAke3ZhbHVlc1N0cmluZ30pYCA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGBleGlzdHMoJHt2YXJpYWJsZVN0cmluZ30pYDtcblxuICByZXR1cm4gZXhpc3RzU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXkocmVmZXJlbmNlc0FycmF5KSB7XG4gIGNvbnN0IHJlZmVyZW5jZXNTdHJpbmcgPSByZWZlcmVuY2VzQXJyYXkucmVkdWNlKChyZWZlcmVuY2VzU3RyaW5nLCByZWZlcmVuY2UpID0+IHtcbiAgICBjb25zdCByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCk7XG5cbiAgICByZWZlcmVuY2VzU3RyaW5nID0gKHJlZmVyZW5jZXNTdHJpbmcgPT09IG51bGwpID9cbiAgICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBgJHtyZWZlcmVuY2VzU3RyaW5nfSwgJHtyZWZlcmVuY2VTdHJpbmd9YDtcblxuICAgIHJldHVybiByZWZlcmVuY2VzU3RyaW5nO1xuICB9LCBudWxsKTsgLy8vXG5cbiAgcmV0dXJuIHJlZmVyZW5jZXNTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlKHJldHVyblN0YXRlbWVudCkge1xuICBjb25zdCByZXR1cm5TdGF0ZW1lbnRTdHJpbmcgPSByZXR1cm5TdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgIHJldHVybkJsb2NrU3RyaW5nID0gYHsgLi4uICR7cmV0dXJuU3RhdGVtZW50U3RyaW5nfSB9YDtcblxuICByZXR1cm4gcmV0dXJuQmxvY2tTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZShuYW1lLCB0eXBlKSB7XG4gIGNvbnN0IG5hbWVTdHJpbmcgPSBuYW1lLCAgLy8vXG4gICAgICAgIHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyA9IGAke3R5cGVTdHJpbmd9ICR7bmFtZVN0cmluZ31gO1xuXG4gIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVTdHJpbmdGcm9tVHlwZU5hbWVBbmRBcmd1bWVudFR5cGVOYW1lKHR5cGVOYW1lLCBhcmd1bWVudFR5cGVOYW1lKSB7XG4gIGxldCB0eXBlU3RyaW5nO1xuXG4gIHR5cGVTdHJpbmcgPSBgJHt0eXBlTmFtZX1gO1xuXG4gIGlmIChhcmd1bWVudFR5cGVOYW1lICE9PSBudWxsKSB7XG4gICAgdHlwZVN0cmluZyA9IGAke3R5cGVTdHJpbmd9PCR7YXJndW1lbnRUeXBlTmFtZX0+YDtcbiAgfVxuXG4gIHJldHVybiB0eXBlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2VkdXJlQ2FsbFN0cmluZ0Zyb21SZWZlcmVuY2VBbmRWYWx1ZXMocmVmZXJlbmNlLCB2YWx1ZXMpIHtcbiAgY29uc3QgdmFsdWVzU3RyaW5nID0gdmFsdWVzLmdldFN0cmluZygpLFxuICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSByZWZlcmVuY2UuZ2V0U3RyaW5nKCksXG4gICAgICAgIHByb2NlZHVyZUNhbGxTdHJpbmcgPSBgJHtyZWZlcmVuY2VTdHJpbmd9KCR7dmFsdWVzU3RyaW5nfSlgO1xuXG4gIHJldHVybiBwcm9jZWR1cmVDYWxsU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZSh0eXBlLCB2YXJpYWJsZSkge1xuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dHlwZVN0cmluZ30gJHt2YXJpYWJsZVN0cmluZ30gPSAuLi4gO2A7XG5cbiAgcmV0dXJuIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHNvbWVTdHJpbmcgPSBgU29tZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9KSBgO1xuXG4gIHJldHVybiBzb21lU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXZlcnlTdHJpbmdGcm9tVmFyaWFibGVBbmRBbm9ueW1vdXNQcm9jZWR1cmUodmFyaWFibGUsIGFub255bW91c1Byb2NlZHVyZSkge1xuICBjb25zdCB2YXJpYWJsZVN0cmluZyA9IHZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBhbm9ueW1vdXNQcm9jZWR1cmUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGV2ZXJ5U3RyaW5nID0gYEV2ZXJ5KCR7dmFyaWFibGVTdHJpbmd9LCAke2Fub255bW91c1Byb2NlZHVyZVN0cmluZ30pIGA7XG5cbiAgcmV0dXJuIGV2ZXJ5U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpIHtcbiAgY29uc3QgdmFyaWFibGUgPSB2YXJpYWJsZUFzc2lnbm1lbnQuZ2V0VmFyaWFibGUoKSxcbiAgICAgICAgdmFyaWFibGVTdHJpbmcgPSB2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gYCR7dmFyaWFibGVTdHJpbmd9ID0gLi4uYDtcblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYW5vbnltb3VzUHJvY2VkdXJlU3RyaW5nRnJvbVR5cGVQYXJhbWV0ZXJzQW5kUmV0dXJuQmxvY2sodHlwZSwgcGFyYW1ldGVycywgcmV0dXJuQmxvY2spIHtcbiAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAoJHtwYXJhbWV0ZXJzU3RyaW5nfSkgJHtyZXR1cm5CbG9ja1N0cmluZ31gO1xuXG4gIHJldHVybiBhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nRnJvbU5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheShub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkpIHtcbiAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9IG5vbWluYWxWYWx1ZVByb3BlcnRpZXNBcnJheS5yZWR1Y2UoKG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcsIG5vbWluYWxWYWx1ZVByb3BlcnR5KSA9PiB7XG4gICAgY29uc3Qgbm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmcgPSBub21pbmFsVmFsdWVQcm9wZXJ0eS5nZXRTdHJpbmcoKTtcblxuICAgIG5vbWluYWxWYWx1ZVByb3BlcnRpZXNTdHJpbmcgPSAobm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZyA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWxWYWx1ZVByb3BlcnR5U3RyaW5nIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCR7bm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ30sICR7bm9taW5hbFZhbHVlUHJvcGVydHlTdHJpbmd9YDtcblxuICAgIHJldHVybiBub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHZhcmlhYmxlQXNzaWdubWVudFN0cmluZ0Zyb21UeXBlQW5kVmFyaWFibGVBc3NpZ25tZW50c0FycmF5KHR5cGUsIHZhcmlhYmxlQXNzaWdubWVudHNBcnJheSkge1xuICBsZXQgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcblxuICBjb25zdCB0eXBlU3RyaW5nID0gdHlwZS5nZXRTdHJpbmcoKTtcblxuICB2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50c0FycmF5LnJlZHVjZSgodmFyaWFibGVBc3NpZ25tZW50c1N0cmluZywgdmFyaWFibGVBc3NpZ25tZW50KSA9PiB7XG4gICAgY29uc3QgdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nID0gdmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVZhcmlhYmxlQXNzaWdubWVudCh2YXJpYWJsZUFzc2lnbm1lbnQpO1xuXG4gICAgdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZyA9ICh2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICB2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmcgOlxuICAgICAgYCR7dmFyaWFibGVBc3NpZ25tZW50c1N0cmluZ30sICR7dmFyaWFibGVBc3NpZ25tZW50U3RyaW5nfWA7XG5cbiAgICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbiAgfSwgbnVsbCk7IC8vL1xuXG4gIHZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmcgPSBgJHt0eXBlU3RyaW5nfSAke3ZhcmlhYmxlQXNzaWdubWVudHNTdHJpbmd9IDtgOyAvLy9cblxuICByZXR1cm4gdmFyaWFibGVBc3NpZ25tZW50c1N0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayh0eXBlLCBsYWJlbCwgZXhwb3J0ZWQsIHBhcmFtZXRlcnMsIHJldHVybkJsb2NrKSB7XG4gIGNvbnN0IHR5cGVTdHJpbmcgPSB0eXBlLmdldFN0cmluZygpLFxuICAgICAgICBsYWJlbFN0cmluZyA9IGxhYmVsLmdldFN0cmluZygpLFxuICAgICAgICBleHBvcnRTVHJpbmcgPSBleHBvcnRlZCA/XG4gICAgICAgICAgICAgICAgICAgICAgICBgJHtFWFBPUlR9IGAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBFTVBUWV9TVFJJTkcsXG4gICAgICAgIHBhcmFtZXRlcnNTdHJpbmcgPSBwYXJhbWV0ZXJzLmdldFN0cmluZygpLFxuICAgICAgICByZXR1cm5CbG9ja1N0cmluZyA9IHJldHVybkJsb2NrLmdldFN0cmluZygpLFxuICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBgJHtleHBvcnRTVHJpbmd9JHt0eXBlU3RyaW5nfSAke2xhYmVsU3RyaW5nfSgke3BhcmFtZXRlcnNTdHJpbmd9KSAke3JldHVybkJsb2NrU3RyaW5nfWA7XG5cbiAgcmV0dXJuIHByb2NlZHVyZVN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlKHZhcmlhYmxlLCBpbml0aWFsRXhwcmVzc2lvbiwgYW5vbnltb3VzUHJvY2VkdXJlKSB7XG4gIGNvbnN0IHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIGluaXRpYWxFeHByZXNzaW9uU3RyaW5nID0gaW5pdGlhbEV4cHJlc3Npb24uZ2V0U3RyaW5nKCksXG4gICAgICAgIGFub255bW91c1Byb2NlZHVyZVN0cmluZyA9IGFub255bW91c1Byb2NlZHVyZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgcmVkdWNlU3RyaW5nID0gYFJlZHVjZSgke3ZhcmlhYmxlU3RyaW5nfSwgJHthbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmd9LCAke2luaXRpYWxFeHByZXNzaW9uU3RyaW5nfSlgO1xuXG4gIHJldHVybiByZWR1Y2VTdHJpbmc7XG59XG5cbiJdLCJuYW1lcyI6WyJhbGxTdHJpbmdGcm9tVmFyaWFibGVBbmRWYWx1ZXMiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmdGcm9tVHlwZVBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsImV2ZXJ5U3RyaW5nRnJvbVZhcmlhYmxlQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwiZXhpc3RzU3RyaW5nRnJvbVZhcmlhYmxlQW5kVmFsdWVzIiwiZXhwcmVzc2lvblN0cmluZ0Zyb21Qcm9wZXJ0aWVzIiwibm9taW5hbFZhbHVlUHJvcGVydGllc1N0cmluZ0Zyb21Ob21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZ0Zyb21OYW1lQW5kVHlwZSIsInByaW10aXZlU3RyaW5nRnJvbUJvb2xlYW4iLCJwcmltdGl2ZVN0cmluZ0Zyb21JbnRlZ2VyIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlIiwicHJpbXRpdmVTdHJpbmdGcm9tTm9taW5hbFZhbHVlcyIsInByaW10aXZlU3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwiLCJwcm9jZWR1cmVDYWxsU3RyaW5nRnJvbVJlZmVyZW5jZUFuZFZhbHVlcyIsInByb2NlZHVyZVN0cmluZ0Zyb21UeXBlTGFiZWxFeHBvcnRlZFBhcmFtZXRlcnNBbmRSZXR1cm5CbG9jayIsInJlZHVjZVN0cmluZ0Zyb21WYXJpYWJsZUluaXRpYWxFeHByZXNzaW9uQW5kQW5vbnltb3VzUHJvY2VkdXJlIiwicmVmZXJlbmNlc1N0cmluZ0Zyb21SZWZlcmVuY2VzQXJyYXkiLCJyZXR1cm5CbG9ja1N0cmluZ0Zyb21SZXR1cm5TdGF0ZW1lbnROb2RlIiwic29tZVN0cmluZ0Zyb21WYXJpYWJsZUFuZEFub255bW91c1Byb2NlZHVyZSIsInRlcm1TdHJpbmdGcm9tUHJvcGVydGllcyIsInRlcm1zU3RyaW5nRnJvbVRlcm1zQXJyYXkiLCJ0ZXJuYXJ5U3RyaW5nRnJvbVRlcm0iLCJ0eXBlU3RyaW5nRnJvbVR5cGVOYW1lQW5kQXJndW1lbnRUeXBlTmFtZSIsInZhbHVlU3RyaW5nRnJvbVByb3BlcnRpZXMiLCJ2YWx1ZXNTdHJpbmdGcm9tVmFsdWVzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVHlwZUFuZFZhcmlhYmxlIiwidmFyaWFibGVBc3NpZ25tZW50U3RyaW5nRnJvbVR5cGVBbmRWYXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmdGcm9tVmFyaWFibGVBc3NpZ25tZW50IiwidmFyaWFibGVTdHJpbmdGcm9tTmFtZSIsInRlcm0iLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidGVybmFyeVN0cmluZyIsIm5hbWUiLCJ2YXJpYWJsZVN0cmluZyIsInByb3BlcnRpZXMiLCJmb3JFYWNoIiwicHJvcGVydHkiLCJwcm9wZXJ0eVN0cmluZyIsInZhbHVlU3RyaW5nIiwiYm9vbGVhbiIsImV4cHJlc3NzaW9uU3RyaW5nIiwiaW50ZWdlciIsInRlcm1zQXJyYXkiLCJ0ZXJtc1N0cmluZyIsInJlZHVjZSIsInZhbHVlc0FycmF5IiwidmFsdWVzU3RyaW5nIiwidmFsdWUiLCJ2YXJpYWJsZSIsInZhbHVlcyIsImFsbFN0cmluZyIsIkVNUFRZX1NUUklORyIsImV4cHJlc3Npb25TdHJpbmciLCJub21pbmFsVmFsdWUiLCJzdHJpbmciLCJwcmltdGl2ZVN0cmluZyIsInN0cmluZ0xpdGVyYWwiLCJzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbCIsIm5vbWluYWxWYWx1ZXMiLCJwcmltaXRpdmVTdHJpbmciLCJub21pbmFsVmFsdWVTdHJpbmciLCJleGlzdHNTdHJpbmciLCJyZWZlcmVuY2VzQXJyYXkiLCJyZWZlcmVuY2VzU3RyaW5nIiwicmVmZXJlbmNlIiwicmVmZXJlbmNlU3RyaW5nIiwicmV0dXJuU3RhdGVtZW50IiwicmV0dXJuU3RhdGVtZW50U3RyaW5nIiwicmV0dXJuQmxvY2tTdHJpbmciLCJ0eXBlIiwibmFtZVN0cmluZyIsInR5cGVTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0eVN0cmluZyIsInR5cGVOYW1lIiwiYXJndW1lbnRUeXBlTmFtZSIsInByb2NlZHVyZUNhbGxTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnRTdHJpbmciLCJhbm9ueW1vdXNQcm9jZWR1cmUiLCJhbm9ueW1vdXNQcm9jZWR1cmVTdHJpbmciLCJzb21lU3RyaW5nIiwiZXZlcnlTdHJpbmciLCJ2YXJpYWJsZUFzc2lnbm1lbnQiLCJnZXRWYXJpYWJsZSIsInBhcmFtZXRlcnMiLCJyZXR1cm5CbG9jayIsInBhcmFtZXRlcnNTdHJpbmciLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzQXJyYXkiLCJub21pbmFsVmFsdWVQcm9wZXJ0aWVzU3RyaW5nIiwibm9taW5hbFZhbHVlUHJvcGVydHkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzQXJyYXkiLCJ2YXJpYWJsZUFzc2lnbm1lbnRzU3RyaW5nIiwibGFiZWwiLCJleHBvcnRlZCIsImxhYmVsU3RyaW5nIiwiZXhwb3J0U1RyaW5nIiwiRVhQT1JUIiwicHJvY2VkdXJlU3RyaW5nIiwiaW5pdGlhbEV4cHJlc3Npb24iLCJpbml0aWFsRXhwcmVzc2lvblN0cmluZyIsInJlZHVjZVN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBdUZnQkE7ZUFBQUE7O1FBbUpBQztlQUFBQTs7UUFoQkFDO2VBQUFBOztRQTNFQUM7ZUFBQUE7O1FBOUNBQztlQUFBQTs7UUFrSkFDO2VBQUFBOztRQXJFQUM7ZUFBQUE7O1FBL0hBQztlQUFBQTs7UUFNQUM7ZUFBQUE7O1FBMERBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBUEFDO2VBQUFBOztRQTRFQUM7ZUFBQUE7O1FBbUZBQztlQUFBQTs7UUFhQUM7ZUFBQUE7O1FBeklBQztlQUFBQTs7UUFjQUM7ZUFBQUE7O1FBMkNBQztlQUFBQTs7UUEvTEFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBckRBQztlQUFBQTs7UUFnTEFDO2VBQUFBOztRQXJKQUM7ZUFBQUE7O1FBd0NBQztlQUFBQTs7UUFpSUFDO2VBQUFBOztRQXVEQUM7ZUFBQUE7O1FBL0JBQztlQUFBQTs7UUFyTkFDO2VBQUFBOzs7MkJBWHFCOytCQUNHO3lCQUNDO0FBRWxDLFNBQVNQLHNCQUFzQlEsSUFBSTtJQUN4QyxNQUFNQyxhQUFhRCxLQUFLRSxTQUFTLElBQzNCQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUVGLFdBQVcsc0JBQXNCLENBQUM7SUFFL0QsT0FBT0U7QUFDVDtBQUVPLFNBQVNKLHVCQUF1QkssSUFB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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-furtle",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.524",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-furtle",
|
|
7
7
|
"description": "Occam's Furtle language.",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"necessary": "^17.7.2",
|
|
14
|
-
"occam-grammars": "^1.3.
|
|
15
|
-
"occam-languages": "^3.0.
|
|
14
|
+
"occam-grammars": "^1.3.692",
|
|
15
|
+
"occam-languages": "^3.0.83",
|
|
16
16
|
"occam-lexers": "^23.2.12",
|
|
17
17
|
"occam-parsers": "^23.2.17",
|
|
18
18
|
"occam-query": "^4.1.210"
|
|
@@ -28,8 +28,8 @@
|
|
|
28
28
|
"juxtapose": "^4.0.143",
|
|
29
29
|
"lively-cli": "^3.0.3",
|
|
30
30
|
"occam-grammar-utilities": "^8.1.27",
|
|
31
|
-
"occam-model": "^1.0.
|
|
32
|
-
"occam-server": "^7.0.
|
|
31
|
+
"occam-model": "^1.0.595",
|
|
32
|
+
"occam-server": "^7.0.94",
|
|
33
33
|
"watchful-cli": "^1.7.102"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
|
|
4
|
+
|
|
5
|
+
import elements from "../elements";
|
|
6
|
+
import Exception from "../exception";
|
|
7
|
+
|
|
8
|
+
import { define } from "../elements";
|
|
9
|
+
import { valueFromBoolean } from "../utilities/value";
|
|
10
|
+
import { LIST_TYPE_NAME, BOOLEAN_TYPE_NAME } from "../typeNames";
|
|
11
|
+
|
|
12
|
+
const { every } = continuationUtilities,
|
|
13
|
+
{ unbreakable } = breakPointUtilities;
|
|
14
|
+
|
|
15
|
+
export default define(class All extends Element {
|
|
16
|
+
constructor(context, string, node, breakPoint, values, variable, references) {
|
|
17
|
+
super(context, string, node, breakPoint);
|
|
18
|
+
|
|
19
|
+
this.string = string;
|
|
20
|
+
this.values = values;
|
|
21
|
+
this.variable = variable;
|
|
22
|
+
this.references = references;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
getValues() {
|
|
26
|
+
return this.values;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getVariable() {
|
|
30
|
+
return this.variable;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
getReferences() {
|
|
34
|
+
return this.references;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
evaluate = unbreakable(function (context, forward, back) {
|
|
38
|
+
const allString = this.getString();
|
|
39
|
+
|
|
40
|
+
context.trace(`Evaluating the '${allString}' function...`);
|
|
41
|
+
|
|
42
|
+
return this.variable.evaluate(context, (value, back) => {
|
|
43
|
+
const valueType = value.getType(),
|
|
44
|
+
valueTypeListType = valueType.isListType();
|
|
45
|
+
|
|
46
|
+
if (!valueTypeListType) {
|
|
47
|
+
const valueString = value.getString(),
|
|
48
|
+
message = `The '${valueString}' value's '${valueType}' type should be '${LIST_TYPE_NAME}'.`,
|
|
49
|
+
exception = Exception.fromMessage(message);
|
|
50
|
+
|
|
51
|
+
return back(exception);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const values = value.lift(context),
|
|
55
|
+
valuesLength = values.length,
|
|
56
|
+
referencesLength = this.references.getLength();
|
|
57
|
+
|
|
58
|
+
if (valuesLength !== referencesLength) {
|
|
59
|
+
const valueString = value.getString(),
|
|
60
|
+
referencesString = this.references.getString(),
|
|
61
|
+
message = `The ${valueString} values and '${referencesString}' function references are not the same length.`,
|
|
62
|
+
exception = Exception.fromMessage(message);
|
|
63
|
+
|
|
64
|
+
return back(exception);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
return every(values, (value, context, forward, back, index) => {
|
|
68
|
+
const reference = this.references.getReference(index);
|
|
69
|
+
|
|
70
|
+
return this.callProcedure(reference, value, context, (value, back) => {
|
|
71
|
+
const valueType = value.getType(),
|
|
72
|
+
valueTypeBooleanType = valueType.isBooleanType();
|
|
73
|
+
|
|
74
|
+
if (!valueTypeBooleanType) {
|
|
75
|
+
const valueString = value.getString(),
|
|
76
|
+
message = `The '${valueString}' value's '${valueType}' type should be '${BOOLEAN_TYPE_NAME}'.`,
|
|
77
|
+
exception = Exception.fromMessage(message);
|
|
78
|
+
|
|
79
|
+
return back(exception);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const primitiveValue = value.getPrimitiveValue(),
|
|
83
|
+
boolean = primitiveValue;
|
|
84
|
+
|
|
85
|
+
if (!boolean) {
|
|
86
|
+
return back();
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return forward(context, back);
|
|
90
|
+
}, back);
|
|
91
|
+
}, context, (context, back) => {
|
|
92
|
+
const boolean = true,
|
|
93
|
+
value = valueFromBoolean(boolean, context),
|
|
94
|
+
valueString = value.getString();
|
|
95
|
+
|
|
96
|
+
context.trace(`...evaluated the '${allString}' function as '${valueString}'.`);
|
|
97
|
+
|
|
98
|
+
return forward(value, back);
|
|
99
|
+
}, back);
|
|
100
|
+
}, back);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
callProcedure(reference, value, context, forward, back) {
|
|
104
|
+
let values;
|
|
105
|
+
|
|
106
|
+
const { Values } = elements;
|
|
107
|
+
|
|
108
|
+
values = Values.fromValue(value);
|
|
109
|
+
|
|
110
|
+
values = values.merge(this.values); ///
|
|
111
|
+
|
|
112
|
+
const { ProcedureCall } = elements,
|
|
113
|
+
procedureCall = ProcedureCall.fromReferenceAndValues(reference, values, context);
|
|
114
|
+
|
|
115
|
+
return procedureCall.evaluate(context, forward, back);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
static name = "All";
|
|
119
|
+
});
|
|
@@ -10,7 +10,7 @@ import { define } from "../../elements";
|
|
|
10
10
|
import { stringLiteralFromString } from "../../utilities/stringLiteral";
|
|
11
11
|
import { valueFromBoolean, valueFromStringLiteral, valueFromNodesAndNominalValue } from "../../utilities/value";
|
|
12
12
|
import { LIST_TYPE_NAME, STRING_TYPE_NAME, BOOLEAN_TYPE_NAME, NOMINAL_VALUE_TYPE_NAME } from "../../typeNames";
|
|
13
|
-
import { CONTENT_PARAMETER_NAME, TERMINAL_PARAMETER_NAME, CHILD_NODES_PARAMETER_NAME, NO_WHITESPACE_PARAMETER_NAME } from "../../parameterNames";
|
|
13
|
+
import { TYPE_PARAMETER_NAME, CONTENT_PARAMETER_NAME, TERMINAL_PARAMETER_NAME, CHILD_NODES_PARAMETER_NAME, NO_WHITESPACE_PARAMETER_NAME } from "../../parameterNames";
|
|
14
14
|
|
|
15
15
|
const { breakable } = breakPointUtilities;
|
|
16
16
|
|
|
@@ -70,6 +70,12 @@ export default define(class ObjectAssignment extends Element {
|
|
|
70
70
|
let evaluateNamedBinding;
|
|
71
71
|
|
|
72
72
|
switch (name) {
|
|
73
|
+
case TYPE_PARAMETER_NAME: {
|
|
74
|
+
evaluateNamedBinding = this.evaluateTypeNamedBinding.bind(this);
|
|
75
|
+
|
|
76
|
+
break;
|
|
77
|
+
}
|
|
78
|
+
|
|
73
79
|
case CONTENT_PARAMETER_NAME: {
|
|
74
80
|
evaluateNamedBinding = this.evaluateContentNamedBinding.bind(this);
|
|
75
81
|
|
|
@@ -107,6 +113,47 @@ export default define(class ObjectAssignment extends Element {
|
|
|
107
113
|
}, back);
|
|
108
114
|
}
|
|
109
115
|
|
|
116
|
+
evaluateTypeNamedBinding(namedBinding, term, context, forward, back) {
|
|
117
|
+
const type = namedBinding.getType(),
|
|
118
|
+
namedBindingString = namedBinding.getString();
|
|
119
|
+
|
|
120
|
+
context.trace(`Evaluating the type '${namedBindingString}' named binding...`);
|
|
121
|
+
|
|
122
|
+
const typeStringType = type.isStringType();
|
|
123
|
+
|
|
124
|
+
if (!typeStringType) {
|
|
125
|
+
const namedBindingString = namedBinding.getString(),
|
|
126
|
+
message = `The '${namedBindingString}' named binding's type should be '${STRING_TYPE_NAME}'.`,
|
|
127
|
+
exception = Exception.fromMessage(message);
|
|
128
|
+
|
|
129
|
+
return back(exception);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
const primitiveValue = term.getPrimitiveValue(),
|
|
133
|
+
nominalValue = primitiveValue, ///
|
|
134
|
+
node = nominalValue.getNode(),
|
|
135
|
+
nodeTerminalNode = node.isTerminalNode();
|
|
136
|
+
|
|
137
|
+
if (!nodeTerminalNode) {
|
|
138
|
+
const termString = term.getString(),
|
|
139
|
+
message = `The '${termString}' term's node must be terminal.`,
|
|
140
|
+
exception = Exception.fromMessage(message);
|
|
141
|
+
|
|
142
|
+
return back(exception);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
const terminalNode = node, ///
|
|
146
|
+
terminalNodeType = terminalNode.getType(),
|
|
147
|
+
string = terminalNodeType, ///
|
|
148
|
+
stringLiteral = stringLiteralFromString(string),
|
|
149
|
+
value = valueFromStringLiteral(stringLiteral, context),
|
|
150
|
+
valueSttring = value.getString();
|
|
151
|
+
|
|
152
|
+
context.debug(`...evaluated the type '${namedBindingString}' named binding as '${valueSttring}'.`);
|
|
153
|
+
|
|
154
|
+
return forward(value, back);
|
|
155
|
+
}
|
|
156
|
+
|
|
110
157
|
evaluateContentNamedBinding(namedBinding, term, context, forward, back) {
|
|
111
158
|
const type = namedBinding.getType(),
|
|
112
159
|
namedBindingString = namedBinding.getString();
|
package/src/element/error.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {Element, breakPointUtilities} from "occam-languages";
|
|
3
|
+
import { Element, breakPointUtilities } from "occam-languages";
|
|
4
4
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
|
|
7
|
-
const {
|
|
7
|
+
const { unbreakable } = breakPointUtilities;
|
|
8
8
|
|
|
9
9
|
export default define(class Error extends Element {
|
|
10
10
|
constructor(context, string, node, breakPoint) {
|
|
11
11
|
super(context, string, node, breakPoint);
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
verify =
|
|
14
|
+
verify = unbreakable(function (context, forward, back) {
|
|
15
15
|
const errorString = this.getString(); ///
|
|
16
16
|
|
|
17
17
|
context.warning(`The '${errorString}' error cannot be verified.`);
|
package/src/element/every.js
CHANGED
|
@@ -6,11 +6,11 @@ import elements from "../elements";
|
|
|
6
6
|
import Exception from "../exception";
|
|
7
7
|
|
|
8
8
|
import { define } from "../elements";
|
|
9
|
-
import { valueFromNode, valueFromBoolean } from "../utilities/value";
|
|
10
9
|
import { LIST_TYPE_NAME, BOOLEAN_TYPE_NAME } from "../typeNames";
|
|
10
|
+
import { valueFromBoolean, valueFromNominalValue } from "../utilities/value";
|
|
11
11
|
|
|
12
12
|
const { every } = continuationUtilities,
|
|
13
|
-
{
|
|
13
|
+
{ unbreakable } = breakPointUtilities;
|
|
14
14
|
|
|
15
15
|
export default define(class Every extends Element {
|
|
16
16
|
constructor(context, string, node, breakPoint, variable, anonymousProcedure) {
|
|
@@ -29,10 +29,10 @@ export default define(class Every extends Element {
|
|
|
29
29
|
return this.anonymousProcedure;
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
evaluate =
|
|
32
|
+
evaluate = unbreakable(function (context, forward, back) {
|
|
33
33
|
const everyString = this.getString();
|
|
34
34
|
|
|
35
|
-
context.trace(`Evaluating the '${everyString}'
|
|
35
|
+
context.trace(`Evaluating the '${everyString}' function...`);
|
|
36
36
|
|
|
37
37
|
return this.variable.evaluate(context, (value, back) => {
|
|
38
38
|
const valueType = value.getType(),
|
|
@@ -46,24 +46,26 @@ export default define(class Every extends Element {
|
|
|
46
46
|
return back(exception);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
const
|
|
49
|
+
const primitiveValue = value.getPrimitiveValue(),
|
|
50
|
+
nominalValues = primitiveValue; ///
|
|
50
51
|
|
|
51
|
-
return every(
|
|
52
|
-
return this.evaluateAnonymousProcedure(
|
|
53
|
-
}, (
|
|
54
|
-
const
|
|
52
|
+
return every(nominalValues, (nominalValue, context, forward, back) => {
|
|
53
|
+
return this.evaluateAnonymousProcedure(nominalValue, context, forward, back);
|
|
54
|
+
}, context, (context, back) => {
|
|
55
|
+
const boolean = true,
|
|
56
|
+
value = valueFromBoolean(boolean, context),
|
|
55
57
|
valueString = value.getString();
|
|
56
58
|
|
|
57
|
-
context.trace(`...evaluated the '${everyString}'
|
|
59
|
+
context.trace(`...evaluated the '${everyString}' function as '${valueString}'.`);
|
|
58
60
|
|
|
59
61
|
return forward(value, back);
|
|
60
62
|
}, back);
|
|
61
63
|
}, back);
|
|
62
64
|
});
|
|
63
65
|
|
|
64
|
-
evaluateAnonymousProcedure(
|
|
66
|
+
evaluateAnonymousProcedure(nominalValue, context, forward, back) {
|
|
65
67
|
const { Values } = elements,
|
|
66
|
-
value =
|
|
68
|
+
value = valueFromNominalValue(nominalValue, context),
|
|
67
69
|
values = Values.fromValue(value, context);
|
|
68
70
|
|
|
69
71
|
return this.anonymousProcedure.evaluate(values, context, (value, back) => {
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { Element, breakPointUtilities, continuationUtilities } from "occam-languages";
|
|
4
|
+
|
|
5
|
+
import { define } from "../elements";
|
|
6
|
+
|
|
7
|
+
const { exists } = continuationUtilities,
|
|
8
|
+
{ unbreakable } = breakPointUtilities;
|
|
9
|
+
|
|
10
|
+
export default define(class Exists extends Element {
|
|
11
|
+
constructor(context, string, node, breakPoint, values, variable, references) {
|
|
12
|
+
super(context, string, node, breakPoint);
|
|
13
|
+
|
|
14
|
+
this.string = string;
|
|
15
|
+
this.values = values;
|
|
16
|
+
this.variable = variable;
|
|
17
|
+
this.references = references;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getValues() {
|
|
21
|
+
return this.values;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getVariable() {
|
|
25
|
+
return this.variable;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getReferences() {
|
|
29
|
+
return this.references;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
evaluate = unbreakable(function (context, forward, back) {
|
|
33
|
+
const existsString = this.getString();
|
|
34
|
+
|
|
35
|
+
context.trace(`Evaluating the '${existsString}' function...`);
|
|
36
|
+
|
|
37
|
+
debugger
|
|
38
|
+
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
static name = "Exists";
|
|
42
|
+
});
|
|
@@ -5,13 +5,15 @@ import { Element } from "occam-languages";
|
|
|
5
5
|
import { define } from "../elements";
|
|
6
6
|
|
|
7
7
|
export default define(class Expression extends Element {
|
|
8
|
-
constructor(context, string, node, breakPoint, term, some, every, reduce, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall) {
|
|
8
|
+
constructor(context, string, node, breakPoint, term, some, every, reduce, all, exists, ternary, nodeQuery, nodesQuery, lengthOf, toInteger, tryInteger, contains, endsWith, startsWith, returnBlock, procedureCall) {
|
|
9
9
|
super(context, string, node, breakPoint);
|
|
10
10
|
|
|
11
11
|
this.term = term;
|
|
12
12
|
this.some = some;
|
|
13
13
|
this.every = every;
|
|
14
14
|
this.reduce = reduce;
|
|
15
|
+
this.all = all;
|
|
16
|
+
this.exists = exists;
|
|
15
17
|
this.ternary = ternary;
|
|
16
18
|
this.nodeQuery = nodeQuery;
|
|
17
19
|
this.nodesQuery = nodesQuery;
|
|
@@ -41,6 +43,14 @@ export default define(class Expression extends Element {
|
|
|
41
43
|
return this.reduce;
|
|
42
44
|
}
|
|
43
45
|
|
|
46
|
+
getAll() {
|
|
47
|
+
return this.all;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
getExists() {
|
|
51
|
+
return this.exists;
|
|
52
|
+
}
|
|
53
|
+
|
|
44
54
|
getTernary() {
|
|
45
55
|
return this.ternay;
|
|
46
56
|
}
|
|
@@ -98,6 +108,10 @@ export default define(class Expression extends Element {
|
|
|
98
108
|
type = this.every.getType();
|
|
99
109
|
} else if (this.reduce !== null) {
|
|
100
110
|
type = this.reduce.getType();
|
|
111
|
+
} else if (this.all !== null) {
|
|
112
|
+
type = this.all.getType();
|
|
113
|
+
} else if (this.exists !== null) {
|
|
114
|
+
type = this.exists.getType();
|
|
101
115
|
} else if (this.ternary !== null) {
|
|
102
116
|
type = this.ternary.getType();
|
|
103
117
|
} else if (this.nodeQuery !== null) {
|
|
@@ -152,6 +166,10 @@ export default define(class Expression extends Element {
|
|
|
152
166
|
return this.every.evaluate(context, forward, back);
|
|
153
167
|
} else if (this.reduce !== null) {
|
|
154
168
|
return this.reduce.evaluate(context, forward, back);
|
|
169
|
+
} else if (this.all !== null) {
|
|
170
|
+
return this.all.evaluate(context, forward, back);
|
|
171
|
+
} else if (this.exists !== null) {
|
|
172
|
+
return this.exists.evaluate(context, forward, back);
|
|
155
173
|
} else if (this.ternary !== null) {
|
|
156
174
|
return this.ternary.evaluate(context, forward, back);
|
|
157
175
|
} else if (this.procedureCall !== null) {
|
|
@@ -7,7 +7,7 @@ import { instantiate } from "../utilities/context";
|
|
|
7
7
|
import { instantiateImportStatement } from "../process/instantiate";
|
|
8
8
|
import { releaseNameFromJSON, importBindingsFromJSON, releaseNameToReleaseNameJSON, importBindingsToImportBindingsJSON } from "../utilities/json";
|
|
9
9
|
|
|
10
|
-
const { every } = continuationUtilities,
|
|
10
|
+
const { cut, every } = continuationUtilities,
|
|
11
11
|
{ unbreakable } = breakPointUtilities;
|
|
12
12
|
|
|
13
13
|
export default define(class ImportStatement extends Element {
|
|
@@ -45,6 +45,8 @@ export default define(class ImportStatement extends Element {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
verify = unbreakable(function (context, forward, back) {
|
|
48
|
+
forward = cut(forward, back); ///
|
|
49
|
+
|
|
48
50
|
const importStatementString = this.getString(); ///
|
|
49
51
|
|
|
50
52
|
context.trace(`Verifying the '${importStatementString}' import statement...`);
|
package/src/element/procedure.js
CHANGED
|
@@ -80,6 +80,8 @@ export default define(class Procedure extends Element {
|
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
verify = breakable(function (context, forward, back) {
|
|
83
|
+
forward = cut(forward, back); ///
|
|
84
|
+
|
|
83
85
|
const procedureString = this.getString();
|
|
84
86
|
|
|
85
87
|
context.trace(`Verifying the '${procedureString}' function...`);
|
|
@@ -6,6 +6,7 @@ import Exception from "../exception";
|
|
|
6
6
|
|
|
7
7
|
import { free } from "../utilities/context";
|
|
8
8
|
import { define } from "../elements";
|
|
9
|
+
import { procedureCallStringFromReferenceAndValues } from "../utilities/string";
|
|
9
10
|
|
|
10
11
|
export default define(class ProcedureCall extends Element {
|
|
11
12
|
constructor(context, string, node, breakPoint, reference, values) {
|
|
@@ -65,4 +66,17 @@ export default define(class ProcedureCall extends Element {
|
|
|
65
66
|
}
|
|
66
67
|
|
|
67
68
|
static name = "ProcedureCall";
|
|
69
|
+
|
|
70
|
+
static fromReferenceAndValues(reference, values, context) {
|
|
71
|
+
const procedureCallString = procedureCallStringFromReferenceAndValues(reference, values),
|
|
72
|
+
node = null,
|
|
73
|
+
string = procedureCallString, ///
|
|
74
|
+
breakPoint = null;
|
|
75
|
+
|
|
76
|
+
context = null;
|
|
77
|
+
|
|
78
|
+
const procedureCall = new ProcedureCall(context, string, node, breakPoint, reference, values);
|
|
79
|
+
|
|
80
|
+
return procedureCall;
|
|
81
|
+
}
|
|
68
82
|
});
|