occam-verify-cli 0.0.535 → 0.0.537
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/conclusion.js +3 -3
- package/lib/consequence.js +2 -2
- package/lib/constants.js +5 -1
- package/lib/context/metaproof.js +8 -1
- package/lib/context/proof.js +23 -1
- package/lib/equality.js +236 -69
- package/lib/log.js +6 -6
- package/lib/node/statement/equality.js +16 -0
- package/lib/premise.js +7 -7
- package/lib/supposition.js +4 -4
- package/lib/type.js +12 -5
- package/lib/utilities/array.js +2 -5
- package/lib/variable.js +3 -23
- package/lib/verifier/metastatementForMetavariable.js +16 -16
- package/lib/verifier/statementForMetavariable.js +17 -17
- package/lib/verifier/termForVariable.js +17 -17
- package/lib/verifier.js +65 -20
- package/lib/verify/assertion/type.js +22 -11
- package/lib/verify/metastatement/qualified.js +5 -1
- package/lib/verify/metastatement/unqualified.js +5 -1
- package/lib/verify/statement/qualified.js +5 -1
- package/lib/verify/statement/unqualified.js +5 -1
- package/lib/verify/statement.js +229 -21
- package/package.json +1 -1
- package/src/conclusion.js +4 -4
- package/src/consequence.js +2 -2
- package/src/constants.js +1 -0
- package/src/context/metaproof.js +12 -1
- package/src/context/proof.js +30 -1
- package/src/equality.js +159 -85
- package/src/log.js +7 -5
- package/src/node/statement/equality.js +9 -0
- package/src/premise.js +8 -8
- package/src/supposition.js +4 -4
- package/src/type.js +17 -8
- package/src/utilities/array.js +1 -1
- package/src/variable.js +2 -18
- package/src/verifier/metastatementForMetavariable.js +15 -15
- package/src/verifier/statementForMetavariable.js +16 -16
- package/src/verifier/termForVariable.js +16 -16
- package/src/verifier.js +18 -18
- package/src/verify/assertion/type.js +28 -13
- package/src/verify/metastatement/qualified.js +6 -0
- package/src/verify/metastatement/unqualified.js +6 -0
- package/src/verify/statement/qualified.js +6 -0
- package/src/verify/statement/unqualified.js +6 -0
- package/src/verify/statement.js +237 -36
- package/lib/verifier/statement.js +0 -199
- package/src/verifier/statement.js +0 -135
package/src/verify/statement.js
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import Verifier from "../verifier";
|
|
4
4
|
import Variable from "../variable";
|
|
5
|
+
import Equality from "../equality";
|
|
5
6
|
import Assignment from "../assignment";
|
|
6
7
|
import verifyTerm from "../verify/term";
|
|
7
|
-
import statementVerifier from "../verifier/statement";
|
|
8
8
|
import equalityCombinator from "../ocmbinator/equality";
|
|
9
9
|
import bracketedCombinator from "../ocmbinator/bracketed";
|
|
10
10
|
import verifyTypeAssertion from "../verify/assertion/type";
|
|
11
11
|
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
14
|
-
import {
|
|
12
|
+
import { objectType } from "../type";
|
|
13
|
+
import { first, second } from "../utilities/array";
|
|
14
|
+
import { OBJECT_TYPE_NAME } from "../typeNames";
|
|
15
|
+
import { STATEMENT_META_TYPE } from "../metaTypes";
|
|
15
16
|
import { verifyTermAsVariable } from "../verify/term";
|
|
17
|
+
import { nodeQuery, typeNameFromTypeNode } from "../utilities/query";
|
|
18
|
+
import { ARGUMENT_RULE_NAME, META_ARGUMENT_RULE_NAME } from "../ruleNames";
|
|
16
19
|
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
21
|
+
typeNodeQuery = nodeQuery("/argument/type!"),
|
|
22
|
+
metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
23
|
+
statementNodeQuery = nodeQuery("/metaArgument/statement!"),
|
|
24
|
+
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!"),
|
|
25
|
+
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
20
26
|
|
|
21
27
|
export default function verifyStatement(statementNode, assignments, derived, context) {
|
|
22
28
|
let statementVerified = false;
|
|
@@ -42,6 +48,121 @@ export default function verifyStatement(statementNode, assignments, derived, con
|
|
|
42
48
|
return statementVerified;
|
|
43
49
|
}
|
|
44
50
|
|
|
51
|
+
class StatementVerifier extends Verifier {
|
|
52
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context) {
|
|
53
|
+
let nonTerminalNodeVerified = false;
|
|
54
|
+
|
|
55
|
+
const nonTerminalNode = nonTerminalNodeA, ///
|
|
56
|
+
combinatorNonTerminalNode = nonTerminalNodeB; ///
|
|
57
|
+
|
|
58
|
+
const ruleName = nonTerminalNode.getRuleName(), ///
|
|
59
|
+
combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
60
|
+
|
|
61
|
+
if (ruleName === combinatorRuleName) {
|
|
62
|
+
switch (ruleName) {
|
|
63
|
+
case ARGUMENT_RULE_NAME: {
|
|
64
|
+
const argumentNode = nonTerminalNode, ///
|
|
65
|
+
combinatorArgumentNode = combinatorNonTerminalNode, ///
|
|
66
|
+
argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, context);
|
|
67
|
+
|
|
68
|
+
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
69
|
+
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
case META_ARGUMENT_RULE_NAME: {
|
|
74
|
+
const metaArgumentNode = nonTerminalNode, ///
|
|
75
|
+
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
76
|
+
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context);
|
|
77
|
+
|
|
78
|
+
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
79
|
+
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
default: {
|
|
84
|
+
const childNodes = nonTerminalNode.getChildNodes(),
|
|
85
|
+
combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(),
|
|
86
|
+
nodesA = childNodes, ///
|
|
87
|
+
nodesB = combinatorChildNodes, ///
|
|
88
|
+
nodesVerified = this.verifyNodes(nodesA, nodesB, context);
|
|
89
|
+
|
|
90
|
+
nonTerminalNodeVerified = nodesVerified; ///
|
|
91
|
+
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return nonTerminalNodeVerified;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
verifyArgumentNode(argumentNode, combinatorArgumentNode, context) {
|
|
101
|
+
let argumentNodeVerified = false;
|
|
102
|
+
|
|
103
|
+
const termNode = termNodeQuery(argumentNode);
|
|
104
|
+
|
|
105
|
+
if (termNode === null) {
|
|
106
|
+
const argumentString = context.nodeAsString(argumentNode);
|
|
107
|
+
|
|
108
|
+
context.error(`The ${argumentString} argument should be a term, not a type`, argumentNode);
|
|
109
|
+
} else {
|
|
110
|
+
const types = [],
|
|
111
|
+
termVerified = verifyTerm(termNode, types, context);
|
|
112
|
+
|
|
113
|
+
if (termVerified) {
|
|
114
|
+
const firstType = first(types),
|
|
115
|
+
termType = firstType, ///
|
|
116
|
+
typeNode = typeNodeQuery(combinatorArgumentNode),
|
|
117
|
+
typeName = typeNameFromTypeNode(typeNode),
|
|
118
|
+
type = (typeName === OBJECT_TYPE_NAME) ?
|
|
119
|
+
objectType : ///
|
|
120
|
+
context.findTypeByTypeName(typeName),
|
|
121
|
+
statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
122
|
+
|
|
123
|
+
if (statementTypeEqualToOrSubTypeOfType) {
|
|
124
|
+
argumentNodeVerified = true;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
return argumentNodeVerified;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, context) {
|
|
133
|
+
let metaArgumentNodeVerified = false;
|
|
134
|
+
|
|
135
|
+
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
136
|
+
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
137
|
+
|
|
138
|
+
if (statementNode === null) {
|
|
139
|
+
const metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
140
|
+
|
|
141
|
+
context.error(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
142
|
+
} else {
|
|
143
|
+
if (combinatorMetaTYpeNode === null) {
|
|
144
|
+
const combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
145
|
+
|
|
146
|
+
context.error(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
147
|
+
} else {
|
|
148
|
+
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
149
|
+
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
150
|
+
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
151
|
+
|
|
152
|
+
if (!contentStatementMetaType) {
|
|
153
|
+
context.error(`Expected the meta-type to be 'Statement' but got '${content}'.`, metaArgumentNode);
|
|
154
|
+
} else {
|
|
155
|
+
metaArgumentNodeVerified = true;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
return metaArgumentNodeVerified;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
const statementVerifier = new StatementVerifier();
|
|
165
|
+
|
|
45
166
|
function verifyStatementAgainstCombinators(statementNode, context) {
|
|
46
167
|
let statementVerifiedAgainstCombinators = false;
|
|
47
168
|
|
|
@@ -71,8 +192,7 @@ function verifyStatementAgainstCombinator(statementNode, combinator, context) {
|
|
|
71
192
|
const combinatorStatementNode = combinator.getStatementNode(),
|
|
72
193
|
nonTerminalNodeA = statementNode, ///
|
|
73
194
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
74
|
-
|
|
75
|
-
nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context),
|
|
195
|
+
nodeVerified = statementVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, context),
|
|
76
196
|
statementVerifiedAgainstCombinator = nodeVerified; ///
|
|
77
197
|
|
|
78
198
|
return statementVerifiedAgainstCombinator;
|
|
@@ -95,47 +215,116 @@ function verifyStatementAsTypeAssertion(statementNode, assignments, derived, con
|
|
|
95
215
|
function verifyStatementAsEquality(statementNode, assignments, derived, context) {
|
|
96
216
|
let statementVerifiedAsEquality = false;
|
|
97
217
|
|
|
98
|
-
const statementString = context.nodeAsString(statementNode);
|
|
99
|
-
|
|
100
218
|
const combinator = equalityCombinator, ///
|
|
101
219
|
statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, context);
|
|
102
220
|
|
|
103
221
|
if (statementVerifiedAgainstCombinator) {
|
|
104
|
-
const
|
|
105
|
-
rightTermNode = rightTermNodeQuery(statementNode);
|
|
222
|
+
const equality = Equality.fromStatementNode(statementNode);
|
|
106
223
|
|
|
107
224
|
if (derived) {
|
|
108
|
-
const
|
|
109
|
-
|
|
225
|
+
const equalities = context.getEqualities(),
|
|
226
|
+
equalityVerified = equality.verify(equalities, context);
|
|
110
227
|
|
|
111
|
-
statementVerifiedAsEquality =
|
|
228
|
+
statementVerifiedAsEquality = equalityVerified; ///
|
|
112
229
|
} else {
|
|
113
|
-
const
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
verifyTerm(rightTermNode, types, context);
|
|
230
|
+
const variables = [],
|
|
231
|
+
leftTermNode = equality.getLeftTermNode(),
|
|
232
|
+
rightTermNode = equality.getRightTermNode(),
|
|
233
|
+
leftTermVerifiedAsVariable = verifyTermAsVariable(leftTermNode, variables, context),
|
|
234
|
+
rightTermVerifiedAsVariable = verifyTermAsVariable(rightTermNode, variables, context);
|
|
119
235
|
|
|
236
|
+
if (leftTermVerifiedAsVariable && rightTermVerifiedAsVariable) {
|
|
120
237
|
const firstVariable = first(variables),
|
|
238
|
+
secondVariable = second(variables),
|
|
121
239
|
leftVariable = firstVariable, ///
|
|
122
|
-
|
|
123
|
-
|
|
240
|
+
rightVariable = secondVariable, ///
|
|
241
|
+
leftVariableName = leftVariable.getName(),
|
|
124
242
|
leftVariableType = leftVariable.getType(),
|
|
243
|
+
rightVariableName = rightVariable.getName(),
|
|
244
|
+
rightVariableType = rightVariable.getType(),
|
|
245
|
+
leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType = leftVariableType.isEqualToOrSubTypeOfOfSuperTypeOf(rightVariableType);
|
|
246
|
+
|
|
247
|
+
if (!leftVariableTypeEqualToOrSubTypeOfOfSuperTypeOfRightVariableType) {
|
|
248
|
+
const leftVariableTypeName = leftVariableType.getName(),
|
|
249
|
+
rightVariableTypeName = rightVariableType.getName();
|
|
250
|
+
|
|
251
|
+
context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightVariableName}' variable's '${rightVariableTypeName}' type.`, statementNode);
|
|
252
|
+
} else {
|
|
253
|
+
const leftVariableTypeSuperTypeOfRightVariableType = leftVariableType.isSuperTypeOf(rightVariableType),
|
|
254
|
+
rightVariableTypeSuperTypeOfLeftVariableType = rightVariableType.isSuperTypeOf(leftVariableType);
|
|
255
|
+
|
|
256
|
+
if (leftVariableTypeSuperTypeOfRightVariableType) {
|
|
257
|
+
const type = rightVariableType, ///
|
|
258
|
+
name = leftVariableName, ///
|
|
259
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
260
|
+
assignment = Assignment.fromVariable(variable);
|
|
261
|
+
|
|
262
|
+
assignments.push(assignment);
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
if (rightVariableTypeSuperTypeOfLeftVariableType) {
|
|
266
|
+
const type = leftVariableType, ///
|
|
267
|
+
name = rightVariableName, ///
|
|
268
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
269
|
+
assignment = Assignment.fromVariable(variable);
|
|
270
|
+
|
|
271
|
+
assignments.push(assignment);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
statementVerifiedAsEquality = true;
|
|
275
|
+
}
|
|
276
|
+
} else if (leftTermVerifiedAsVariable) {
|
|
277
|
+
const types = [];
|
|
278
|
+
|
|
279
|
+
verifyTerm(rightTermNode, types, context);
|
|
280
|
+
|
|
281
|
+
const firstType = first(types),
|
|
282
|
+
firstVariable = first(variables),
|
|
283
|
+
leftVariable = firstVariable, ///
|
|
284
|
+
rightTermType = firstType, ///
|
|
125
285
|
leftVariableName = leftVariable.getName(),
|
|
286
|
+
leftVariableType = leftVariable.getType(),
|
|
126
287
|
leftVariableTypeEqualToOrSuperTypeOfRightTermType = leftVariableType.isEqualToOrSuperTypeOf(rightTermType);
|
|
127
288
|
|
|
128
289
|
if (!leftVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
129
|
-
const rightTermString = nodeAsString(rightTermNode),
|
|
290
|
+
const rightTermString = context.nodeAsString(rightTermNode),
|
|
130
291
|
rightTermTypeName = rightTermType.getName(),
|
|
131
292
|
leftVariableTypeName = leftVariableType.getName();
|
|
132
293
|
|
|
133
294
|
context.error(`The left '${leftVariableName}' variable's '${leftVariableTypeName}' type is not equal to or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
|
|
134
295
|
} else {
|
|
135
|
-
const type =
|
|
296
|
+
const type = rightTermType, ///
|
|
136
297
|
name = leftVariableName, ///
|
|
137
|
-
|
|
138
|
-
|
|
298
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
299
|
+
assignment = Assignment.fromVariable(variable);
|
|
300
|
+
|
|
301
|
+
assignments.push(assignment);
|
|
302
|
+
|
|
303
|
+
statementVerifiedAsEquality = true;
|
|
304
|
+
}
|
|
305
|
+
} else if (rightTermVerifiedAsVariable) {
|
|
306
|
+
const types = [];
|
|
307
|
+
|
|
308
|
+
verifyTerm(leftTermNode, types, context);
|
|
309
|
+
|
|
310
|
+
const firstType = first(types),
|
|
311
|
+
firstVariable = first(variables),
|
|
312
|
+
leftTermType = firstType, ///
|
|
313
|
+
rightVariable = firstVariable, ///
|
|
314
|
+
rightVariableName = rightVariable.getName(),
|
|
315
|
+
rightVariableType = rightVariable.getType(),
|
|
316
|
+
rightVariableTypeEqualToOrSuperTypeOfRightTermType = rightVariableType.isEqualToOrSuperTypeOf(leftTermType);
|
|
317
|
+
|
|
318
|
+
if (!rightVariableTypeEqualToOrSuperTypeOfRightTermType) {
|
|
319
|
+
const leftTermString = context.nodeAsString(leftTermNode),
|
|
320
|
+
leftTermTypeName = leftTermType.getName(),
|
|
321
|
+
rightVariableTypeName = rightVariableType.getName();
|
|
322
|
+
|
|
323
|
+
context.error(`The right '${rightVariableName}' variable's '${rightVariableTypeName}' type is not equal to or a super-type of the left '${leftTermString}' term's '${leftTermTypeName}' type.`, statementNode);
|
|
324
|
+
} else {
|
|
325
|
+
const type = leftTermType, ///
|
|
326
|
+
name = rightVariableName, ///
|
|
327
|
+
variable = Variable.fromTypeAndName(type, name),
|
|
139
328
|
assignment = Assignment.fromVariable(variable);
|
|
140
329
|
|
|
141
330
|
assignments.push(assignment);
|
|
@@ -143,15 +332,25 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context)
|
|
|
143
332
|
statementVerifiedAsEquality = true;
|
|
144
333
|
}
|
|
145
334
|
} else {
|
|
146
|
-
const
|
|
335
|
+
const types = [];
|
|
147
336
|
|
|
148
|
-
|
|
149
|
-
const firstVariable = first(variables),
|
|
150
|
-
rightVariable = firstVariable, ///
|
|
151
|
-
leftTermString = nodeAsString(leftTermNode),
|
|
152
|
-
rightVariableName = rightVariable.getName();
|
|
337
|
+
verifyTerm(leftTermNode, types, context);
|
|
153
338
|
|
|
154
|
-
|
|
339
|
+
verifyTerm(rightTermNode, types, context);
|
|
340
|
+
|
|
341
|
+
const firstType = first(types),
|
|
342
|
+
secondType = second(types),
|
|
343
|
+
leftTermType = firstType, ///
|
|
344
|
+
rightTermType = secondType, ///
|
|
345
|
+
leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf = leftTermType.isEqualToOrSubTypeOfOfSuperTypeOf(rightTermType);
|
|
346
|
+
|
|
347
|
+
if (!leftTermTypeEqualToOrSubTypeOfOfSuperTypeOf) {
|
|
348
|
+
const leftTermString = context.nodeAsString(leftTermNode),
|
|
349
|
+
rightTermString = context.nodeAsString(rightTermNode),
|
|
350
|
+
leftTermTypeName = leftTermType.getName(),
|
|
351
|
+
rightTermTypeName = rightTermType.getName();
|
|
352
|
+
|
|
353
|
+
context.error(`The left '${leftTermString}' term's '${leftTermTypeName}' type is not equal to, a sub-type of or a super-type of the right '${rightTermString}' term's '${rightTermTypeName}' type.`, statementNode);
|
|
155
354
|
} else {
|
|
156
355
|
statementVerifiedAsEquality = true;
|
|
157
356
|
}
|
|
@@ -160,6 +359,8 @@ function verifyStatementAsEquality(statementNode, assignments, derived, context)
|
|
|
160
359
|
}
|
|
161
360
|
|
|
162
361
|
if (statementVerifiedAsEquality) {
|
|
362
|
+
const statementString = context.nodeAsString(statementNode);
|
|
363
|
+
|
|
163
364
|
context.info(`Verified the '${statementString}' statement as an equality.`, statementNode);
|
|
164
365
|
}
|
|
165
366
|
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "default", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _verifier = /*#__PURE__*/ _interopRequireDefault(require("../verifier"));
|
|
12
|
-
var _term = /*#__PURE__*/ _interopRequireDefault(require("../verify/term"));
|
|
13
|
-
var _array = require("../utilities/array");
|
|
14
|
-
var _type = require("../type");
|
|
15
|
-
var _typeNames = require("../typeNames");
|
|
16
|
-
var _metaTypes = require("../metaTypes");
|
|
17
|
-
var _query = require("../utilities/query");
|
|
18
|
-
var _ruleNames = require("../ruleNames");
|
|
19
|
-
function _assertThisInitialized(self) {
|
|
20
|
-
if (self === void 0) {
|
|
21
|
-
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
22
|
-
}
|
|
23
|
-
return self;
|
|
24
|
-
}
|
|
25
|
-
function _classCallCheck(instance, Constructor) {
|
|
26
|
-
if (!(instance instanceof Constructor)) {
|
|
27
|
-
throw new TypeError("Cannot call a class as a function");
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function _defineProperties(target, props) {
|
|
31
|
-
for(var i = 0; i < props.length; i++){
|
|
32
|
-
var descriptor = props[i];
|
|
33
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
34
|
-
descriptor.configurable = true;
|
|
35
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
36
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
function _createClass(Constructor, protoProps, staticProps) {
|
|
40
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
41
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
42
|
-
return Constructor;
|
|
43
|
-
}
|
|
44
|
-
function _getPrototypeOf(o) {
|
|
45
|
-
_getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) {
|
|
46
|
-
return o.__proto__ || Object.getPrototypeOf(o);
|
|
47
|
-
};
|
|
48
|
-
return _getPrototypeOf(o);
|
|
49
|
-
}
|
|
50
|
-
function _inherits(subClass, superClass) {
|
|
51
|
-
if (typeof superClass !== "function" && superClass !== null) {
|
|
52
|
-
throw new TypeError("Super expression must either be null or a function");
|
|
53
|
-
}
|
|
54
|
-
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
55
|
-
constructor: {
|
|
56
|
-
value: subClass,
|
|
57
|
-
writable: true,
|
|
58
|
-
configurable: true
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
if (superClass) _setPrototypeOf(subClass, superClass);
|
|
62
|
-
}
|
|
63
|
-
function _interopRequireDefault(obj) {
|
|
64
|
-
return obj && obj.__esModule ? obj : {
|
|
65
|
-
default: obj
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
function _possibleConstructorReturn(self, call) {
|
|
69
|
-
if (call && (_typeof(call) === "object" || typeof call === "function")) {
|
|
70
|
-
return call;
|
|
71
|
-
}
|
|
72
|
-
return _assertThisInitialized(self);
|
|
73
|
-
}
|
|
74
|
-
function _setPrototypeOf(o, p) {
|
|
75
|
-
_setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
|
|
76
|
-
o.__proto__ = p;
|
|
77
|
-
return o;
|
|
78
|
-
};
|
|
79
|
-
return _setPrototypeOf(o, p);
|
|
80
|
-
}
|
|
81
|
-
var _typeof = function(obj) {
|
|
82
|
-
"@swc/helpers - typeof";
|
|
83
|
-
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
84
|
-
};
|
|
85
|
-
function _isNativeReflectConstruct() {
|
|
86
|
-
if (typeof Reflect === "undefined" || !Reflect.construct) return false;
|
|
87
|
-
if (Reflect.construct.sham) return false;
|
|
88
|
-
if (typeof Proxy === "function") return true;
|
|
89
|
-
try {
|
|
90
|
-
Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
91
|
-
return true;
|
|
92
|
-
} catch (e) {
|
|
93
|
-
return false;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
function _createSuper(Derived) {
|
|
97
|
-
var hasNativeReflectConstruct = _isNativeReflectConstruct();
|
|
98
|
-
return function _createSuperInternal() {
|
|
99
|
-
var Super = _getPrototypeOf(Derived), result;
|
|
100
|
-
if (hasNativeReflectConstruct) {
|
|
101
|
-
var NewTarget = _getPrototypeOf(this).constructor;
|
|
102
|
-
result = Reflect.construct(Super, arguments, NewTarget);
|
|
103
|
-
} else {
|
|
104
|
-
result = Super.apply(this, arguments);
|
|
105
|
-
}
|
|
106
|
-
return _possibleConstructorReturn(this, result);
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
|
-
var termNodeQuery = (0, _query.nodeQuery)("/argument/term!"), typeNodeQuery = (0, _query.nodeQuery)("/argument/type!"), metaTypeNodeQuery = (0, _query.nodeQuery)("/metaArgument/metaType!"), statementNodeQuery = (0, _query.nodeQuery)("/metaArgument/statement!"), metaTypeTerminalNodeQuery = (0, _query.nodeQuery)("/metaType/@meta-type");
|
|
110
|
-
var StatementVerifier = /*#__PURE__*/ function(Verifier) {
|
|
111
|
-
_inherits(StatementVerifier, Verifier);
|
|
112
|
-
var _super = _createSuper(StatementVerifier);
|
|
113
|
-
function StatementVerifier() {
|
|
114
|
-
_classCallCheck(this, StatementVerifier);
|
|
115
|
-
return _super.apply(this, arguments);
|
|
116
|
-
}
|
|
117
|
-
_createClass(StatementVerifier, [
|
|
118
|
-
{
|
|
119
|
-
key: "verifyNonTerminalNode",
|
|
120
|
-
value: function verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, context) {
|
|
121
|
-
var nonTerminalNodeVerified = false;
|
|
122
|
-
var nonTerminalNode = nonTerminalNodeA, combinatorNonTerminalNode = nonTerminalNodeB; ///
|
|
123
|
-
var ruleName = nonTerminalNode.getRuleName(), combinatorRuleName = combinatorNonTerminalNode.getRuleName(); ///
|
|
124
|
-
if (ruleName === combinatorRuleName) {
|
|
125
|
-
switch(ruleName){
|
|
126
|
-
case _ruleNames.ARGUMENT_RULE_NAME:
|
|
127
|
-
{
|
|
128
|
-
var argumentNode = nonTerminalNode, combinatorArgumentNode = combinatorNonTerminalNode, argumentNodeVerified = this.verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context);
|
|
129
|
-
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
130
|
-
break;
|
|
131
|
-
}
|
|
132
|
-
case _ruleNames.META_ARGUMENT_RULE_NAME:
|
|
133
|
-
{
|
|
134
|
-
var metaArgumentNode = nonTerminalNode, combinatorMetaargumentNode = combinatorNonTerminalNode, metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context);
|
|
135
|
-
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
136
|
-
break;
|
|
137
|
-
}
|
|
138
|
-
default:
|
|
139
|
-
{
|
|
140
|
-
var childNodes = nonTerminalNode.getChildNodes(), combinatorChildNodes = combinatorNonTerminalNode.getChildNodes(), nodesA = childNodes, nodesB = combinatorChildNodes, nodesVerified = this.verifyNodes(nodesA, nodesB, substitutions, context);
|
|
141
|
-
nonTerminalNodeVerified = nodesVerified; ///
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return nonTerminalNodeVerified;
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
key: "verifyArgumentNode",
|
|
151
|
-
value: function verifyArgumentNode(argumentNode, combinatorArgumentNode, substitutions, context) {
|
|
152
|
-
var argumentNodeVerified = false;
|
|
153
|
-
var termNode = termNodeQuery(argumentNode);
|
|
154
|
-
if (termNode === null) {
|
|
155
|
-
var argumentString = context.nodeAsString(argumentNode);
|
|
156
|
-
context.error("The ".concat(argumentString, " argument should be a term, not a type"), argumentNode);
|
|
157
|
-
} else {
|
|
158
|
-
var types = [], termVerified = (0, _term.default)(termNode, types, context);
|
|
159
|
-
if (termVerified) {
|
|
160
|
-
var firstType = (0, _array.first)(types), termType = firstType, typeNode = typeNodeQuery(combinatorArgumentNode), typeName = (0, _query.typeNameFromTypeNode)(typeNode), type = typeName === _typeNames.OBJECT_TYPE_NAME ? _type.objectType : context.findTypeByTypeName(typeName), statementTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
161
|
-
if (statementTypeEqualToOrSubTypeOfType) {
|
|
162
|
-
argumentNodeVerified = true;
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
return argumentNodeVerified;
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
{
|
|
170
|
-
key: "verifyMetaargumentNode",
|
|
171
|
-
value: function verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, substitutions, context) {
|
|
172
|
-
var metaArgumentNodeVerified = false;
|
|
173
|
-
var statementNode = statementNodeQuery(metaArgumentNode), combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
174
|
-
if (statementNode === null) {
|
|
175
|
-
var metaArgumentString = context.nodeAsString(metaArgumentNode);
|
|
176
|
-
context.error("Expected a statement but got a '".concat(metaArgumentString, "' meta-type."), metaArgumentNode);
|
|
177
|
-
} else {
|
|
178
|
-
if (combinatorMetaTYpeNode === null) {
|
|
179
|
-
var combinatorMetaargumentString = context.nodeAsString(combinatorMetaargumentNode);
|
|
180
|
-
context.error("Expected a meta-type but got a '".concat(combinatorMetaargumentString, "' statement."), metaArgumentNode);
|
|
181
|
-
} else {
|
|
182
|
-
var combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode), content = combinatorMetaTypeTerminalNode.getContent(), contentStatementMetaType = content === _metaTypes.STATEMENT_META_TYPE;
|
|
183
|
-
if (!contentStatementMetaType) {
|
|
184
|
-
context.error("Expected the meta-type to be 'Statement' but got '".concat(content, "'."), metaArgumentNode);
|
|
185
|
-
} else {
|
|
186
|
-
metaArgumentNodeVerified = true;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
return metaArgumentNodeVerified;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
]);
|
|
194
|
-
return StatementVerifier;
|
|
195
|
-
}(_verifier.default);
|
|
196
|
-
var statementVerifier = new StatementVerifier();
|
|
197
|
-
var _default = statementVerifier;
|
|
198
|
-
|
|
199
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy92ZXJpZmllci9zdGF0ZW1lbnQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWZXJpZmllciBmcm9tIFwiLi4vdmVyaWZpZXJcIjtcbmltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi92ZXJpZnkvdGVybVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG9iamVjdFR5cGUgfSBmcm9tIFwiLi4vdHlwZVwiO1xuaW1wb3J0IHsgT0JKRUNUX1RZUEVfTkFNRSB9IGZyb20gXCIuLi90eXBlTmFtZXNcIjtcbmltcG9ydCB7IFNUQVRFTUVOVF9NRVRBX1RZUEUgfSBmcm9tIFwiLi4vbWV0YVR5cGVzXCI7XG5pbXBvcnQgeyBub2RlUXVlcnksIHR5cGVOYW1lRnJvbVR5cGVOb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgQVJHVU1FTlRfUlVMRV9OQU1FLCBNRVRBX0FSR1VNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuLi9ydWxlTmFtZXNcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9hcmd1bWVudC90ZXJtIVwiKSxcbiAgICAgIHR5cGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXJndW1lbnQvdHlwZSFcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhQXJndW1lbnQvbWV0YVR5cGUhXCIpLFxuICAgICAgc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFBcmd1bWVudC9zdGF0ZW1lbnQhXCIpLFxuICAgICAgbWV0YVR5cGVUZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZS9AbWV0YS10eXBlXCIpO1xuXG5jbGFzcyBTdGF0ZW1lbnRWZXJpZmllciBleHRlbmRzIFZlcmlmaWVyIHtcbiAgdmVyaWZ5Tm9uVGVybWluYWxOb2RlKG5vblRlcm1pbmFsTm9kZUEsIG5vblRlcm1pbmFsTm9kZUIsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpIHtcbiAgICBsZXQgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vblRlcm1pbmFsTm9kZUEsIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUgPSBub25UZXJtaW5hbE5vZGVCOyAvLy9cblxuICAgIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksIC8vL1xuICAgICAgICAgIGNvbWJpbmF0b3JSdWxlTmFtZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgICBpZiAocnVsZU5hbWUgPT09IGNvbWJpbmF0b3JSdWxlTmFtZSkge1xuICAgICAgc3dpdGNoIChydWxlTmFtZSkge1xuICAgICAgICBjYXNlIEFSR1VNRU5UX1JVTEVfTkFNRToge1xuICAgICAgICAgIGNvbnN0IGFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckFyZ3VtZW50Tm9kZSA9IGNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUsIC8vL1xuICAgICAgICAgICAgICAgIGFyZ3VtZW50Tm9kZVZlcmlmaWVkID0gdGhpcy52ZXJpZnlBcmd1bWVudE5vZGUoYXJndW1lbnROb2RlLCBjb21iaW5hdG9yQXJndW1lbnROb2RlLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkID0gYXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBjYXNlIE1FVEFfQVJHVU1FTlRfUlVMRV9OQU1FOiB7XG4gICAgICAgICAgY29uc3QgbWV0YUFyZ3VtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSB0aGlzLnZlcmlmeU1ldGFhcmd1bWVudE5vZGUobWV0YUFyZ3VtZW50Tm9kZSwgY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQ7IC8vL1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgICAgICAgY29tYmluYXRvckNoaWxkTm9kZXMgPSBjb21iaW5hdG9yTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgICBub2Rlc0EgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgICBub2Rlc0IgPSBjb21iaW5hdG9yQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgbm9kZXNWZXJpZmllZCA9IHRoaXMudmVyaWZ5Tm9kZXMobm9kZXNBLCBub2Rlc0IsIHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgbm9uVGVybWluYWxOb2RlVmVyaWZpZWQgPSBub2Rlc1ZlcmlmaWVkOyAvLy9cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vblRlcm1pbmFsTm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5QXJndW1lbnROb2RlKGFyZ3VtZW50Tm9kZSwgY29tYmluYXRvckFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBhcmd1bWVudE5vZGVWZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KGFyZ3VtZW50Tm9kZSk7XG5cbiAgICBpZiAodGVybU5vZGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGFyZ3VtZW50U3RyaW5nID0gY29udGV4dC5ub2RlQXNTdHJpbmcoYXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgVGhlICR7YXJndW1lbnRTdHJpbmd9IGFyZ3VtZW50IHNob3VsZCBiZSBhIHRlcm0sIG5vdCBhIHR5cGVgLCBhcmd1bWVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlcyA9IFtdLFxuICAgICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdHlwZXMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VHlwZSA9IGZpcnN0KHR5cGVzKSxcbiAgICAgICAgICAgICAgdGVybVR5cGUgPSBmaXJzdFR5cGUsIC8vL1xuICAgICAgICAgICAgICB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkoY29tYmluYXRvckFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgICAgIHR5cGVOYW1lID0gdHlwZU5hbWVGcm9tVHlwZU5vZGUodHlwZU5vZGUpLFxuICAgICAgICAgICAgICB0eXBlID0gKHR5cGVOYW1lID09PSBPQkpFQ1RfVFlQRV9OQU1FKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlIDogIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmZpbmRUeXBlQnlUeXBlTmFtZSh0eXBlTmFtZSksXG4gICAgICAgICAgICAgIHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgICAgYXJndW1lbnROb2RlVmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG5cbiAgdmVyaWZ5TWV0YWFyZ3VtZW50Tm9kZShtZXRhQXJndW1lbnROb2RlLCBjb21iaW5hdG9yTWV0YWFyZ3VtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucywgY29udGV4dCkge1xuICAgIGxldCBtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlUXVlcnkobWV0YUFyZ3VtZW50Tm9kZSksXG4gICAgICAgICAgY29tYmluYXRvck1ldGFUWXBlTm9kZSA9IG1ldGFUeXBlTm9kZVF1ZXJ5KGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgIGlmIChzdGF0ZW1lbnROb2RlID09PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhQXJndW1lbnRTdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhtZXRhQXJndW1lbnROb2RlKTtcblxuICAgICAgY29udGV4dC5lcnJvcihgRXhwZWN0ZWQgYSBzdGF0ZW1lbnQgYnV0IGdvdCBhICcke21ldGFBcmd1bWVudFN0cmluZ30nIG1ldGEtdHlwZS5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbWJpbmF0b3JNZXRhVFlwZU5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgY29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZyA9IGNvbnRleHQubm9kZUFzU3RyaW5nKGNvbWJpbmF0b3JNZXRhYXJndW1lbnROb2RlKTtcblxuICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCBhIG1ldGEtdHlwZSBidXQgZ290IGEgJyR7Y29tYmluYXRvck1ldGFhcmd1bWVudFN0cmluZ30nIHN0YXRlbWVudC5gLCBtZXRhQXJndW1lbnROb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmF0b3JNZXRhVHlwZVRlcm1pbmFsTm9kZSA9IG1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkoY29tYmluYXRvck1ldGFUWXBlTm9kZSksXG4gICAgICAgICAgICAgIGNvbnRlbnQgPSBjb21iaW5hdG9yTWV0YVR5cGVUZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgICAgICBjb250ZW50U3RhdGVtZW50TWV0YVR5cGUgPSAoY29udGVudCA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRSk7XG5cbiAgICAgICAgaWYgKCFjb250ZW50U3RhdGVtZW50TWV0YVR5cGUpIHtcbiAgICAgICAgICBjb250ZXh0LmVycm9yKGBFeHBlY3RlZCB0aGUgbWV0YS10eXBlIHRvIGJlICdTdGF0ZW1lbnQnIGJ1dCBnb3QgJyR7Y29udGVudH0nLmAsIG1ldGFBcmd1bWVudE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1ldGFBcmd1bWVudE5vZGVWZXJpZmllZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YUFyZ3VtZW50Tm9kZVZlcmlmaWVkO1xuICB9XG59XG5cbmNvbnN0IHN0YXRlbWVudFZlcmlmaWVyID0gbmV3IFN0YXRlbWVudFZlcmlmaWVyKCk7XG5cbmV4cG9ydCBkZWZhdWx0IHN0YXRlbWVudFZlcmlmaWVyO1xuXG4iXSwibmFtZXMiOlsidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJtZXRhVHlwZU5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGVRdWVyeSIsIm1ldGFUeXBlVGVybWluYWxOb2RlUXVlcnkiLCJTdGF0ZW1lbnRWZXJpZmllciIsInZlcmlmeU5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZUEiLCJub25UZXJtaW5hbE5vZGVCIiwic3Vic3RpdHV0aW9ucyIsImNvbnRleHQiLCJub25UZXJtaW5hbE5vZGVWZXJpZmllZCIsIm5vblRlcm1pbmFsTm9kZSIsImNvbWJpbmF0b3JOb25UZXJtaW5hbE5vZGUiLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiY29tYmluYXRvclJ1bGVOYW1lIiwiQVJHVU1FTlRfUlVMRV9OQU1FIiwiYXJndW1lbnROb2RlIiwiY29tYmluYXRvckFyZ3VtZW50Tm9kZSIsImFyZ3VtZW50Tm9kZVZlcmlmaWVkIiwidmVyaWZ5QXJndW1lbnROb2RlIiwiTUVUQV9BUkdVTUVOVF9SVUxFX05BTUUiLCJtZXRhQXJndW1lbnROb2RlIiwiY29tYmluYXRvck1ldGFhcmd1bWVudE5vZGUiLCJtZXRhQXJndW1lbnROb2RlVmVyaWZpZWQiLCJ2ZXJpZnlNZXRhYXJndW1lbnROb2RlIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJjb21iaW5hdG9yQ2hpbGROb2RlcyIsIm5vZGVzQSIsIm5vZGVzQiIsIm5vZGVzVmVyaWZpZWQiLCJ2ZXJpZnlOb2RlcyIsInRlcm1Ob2RlIiwiYXJndW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJlcnJvciIsInR5cGVzIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsImZpcnN0VHlwZSIsImZpcnN0IiwidGVybVR5cGUiLCJ0eXBlTm9kZSIsInR5cGVOYW1lIiwidHlwZU5hbWVGcm9tVHlwZU5vZGUiLCJ0eXBlIiwiT0JKRUNUX1RZUEVfTkFNRSIsIm9iamVjdFR5cGUiLCJmaW5kVHlwZUJ5VHlwZU5hbWUiLCJzdGF0ZW1lbnRUeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwic3RhdGVtZW50Tm9kZSIsImNvbWJpbmF0b3JNZXRhVFlwZU5vZGUiLCJtZXRhQXJndW1lbnRTdHJpbmciLCJjb21iaW5hdG9yTWV0YWFyZ3VtZW50U3RyaW5nIiwiY29tYmluYXRvck1ldGFUeXBlVGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJjb250ZW50U3RhdGVtZW50TWV0YVR5cGUiLCJTVEFURU1FTlRfTUVUQV9UWVBFIiwiVmVyaWZpZXIiLCJzdGF0ZW1lbnRWZXJpZmllciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBcUlBOzs7ZUFBQTs7OzZEQW5JcUI7eURBQ0U7cUJBRUQ7b0JBQ0s7eUJBQ007eUJBQ0c7cUJBQ1k7eUJBQ1k7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUQsSUFBTUEsZ0JBQWdCQyxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkMsZ0JBQWdCRCxJQUFBQSxnQkFBUyxFQUFDLG9CQUMxQkUsb0JBQW9CRixJQUFBQSxnQkFBUyxFQUFDLDRCQUM5QkcscUJBQXFCSCxJQUFBQSxnQkFBUyxFQUFDLDZCQUMvQkksNEJBQTRCSixJQUFBQSxnQkFBUyxFQUFDO0FBRTVDLElBQUEsQUFBTUssa0NBaUhILEFBakhIO2NBQU1BOzhCQUFBQTthQUFBQTs4QkFBQUE7OztpQkFBQUE7O1lBQ0pDLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0JDLGdCQUFnQixFQUFFQyxnQkFBZ0IsRUFBRUMsYUFBYSxFQUFFQyxPQUFPLEVBQUU7Z0JBQ2hGLElBQUlDLDBCQUEwQixLQUFLO2dCQUVuQyxJQUFNQyxrQkFBa0JMLGtCQUNsQk0sNEJBQTRCTCxrQkFBa0IsR0FBRztnQkFFdkQsSUFBTU0sV0FBV0YsZ0JBQWdCRyxXQUFXLElBQ3RDQyxxQkFBcUJILDBCQUEwQkUsV0FBVyxJQUFJLEdBQUc7Z0JBRXZFLElBQUlELGFBQWFFLG9CQUFvQjtvQkFDbkMsT0FBUUY7d0JBQ04sS0FBS0csNkJBQWtCOzRCQUFFO2dDQUN2QixJQUFNQyxlQUFlTixpQkFDZk8seUJBQXlCTiwyQkFDekJPLHVCQUF1QixJQUFJLENBQUNDLGtCQUFrQixDQUFDSCxjQUFj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
|