occam-verify-cli 0.0.845 → 0.0.847
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/assignment/equality.js +4 -4
- package/lib/assignment/variable.js +4 -4
- package/lib/conclusion.js +5 -5
- package/lib/context/local.js +14 -1
- package/lib/equality.js +5 -3
- package/lib/equivalence.js +17 -17
- package/lib/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/lib/mixins/nodesVerifier/metaLevel.js +2 -2
- package/lib/premise.js +6 -5
- package/lib/term.js +9 -9
- package/lib/utilities/equivalences.js +14 -14
- package/lib/verifier/node/metastatement.js +5 -4
- package/lib/verifier/node/statementAsCombinator.js +6 -6
- package/lib/verifier/node/termAsConstructor.js +5 -5
- package/lib/verifier/nodes/metaLevel.js +7 -7
- package/lib/verifier/nodes/metaLevelToIntrinsicLevel.js +18 -19
- package/lib/verifier/nodes/statementAgainstCombinator.js +11 -11
- package/lib/verifier/nodes/substitution.js +13 -11
- package/lib/verifier/nodes/termAgainstConstructor.js +10 -10
- package/lib/verify/containment.js +2 -2
- package/lib/verify/defining.js +6 -6
- package/lib/verify/equality.js +17 -17
- package/lib/verify/givenType.js +6 -6
- package/lib/verify/givenVariable.js +6 -6
- package/lib/verify/metavariable.js +6 -6
- package/lib/verify/statement/qualified.js +13 -13
- package/lib/verify/statement/unqualified.js +2 -2
- package/lib/verify/statement.js +40 -40
- package/lib/verify/statementAsCombinator.js +2 -1
- package/lib/verify/term.js +30 -30
- package/lib/verify/termAndGivenType.js +7 -7
- package/lib/verify/termAsConstructor.js +3 -2
- package/lib/verify/terms.js +7 -7
- package/lib/verify/type.js +7 -7
- package/lib/verify/typeAssertion.js +19 -19
- package/lib/verify/variable.js +6 -6
- package/package.json +2 -2
- package/src/assignment/equality.js +5 -5
- package/src/assignment/variable.js +5 -5
- package/src/conclusion.js +6 -6
- package/src/context/local.js +12 -0
- package/src/equality.js +6 -4
- package/src/equivalence.js +16 -16
- package/src/mixins/nodesVerifier/intrinsiclevel.js +2 -2
- package/src/mixins/nodesVerifier/metaLevel.js +1 -1
- package/src/premise.js +9 -4
- package/src/term.js +8 -8
- package/src/utilities/equivalences.js +13 -13
- package/src/verifier/node/metastatement.js +8 -9
- package/src/verifier/node/statementAsCombinator.js +8 -11
- package/src/verifier/node/termAsConstructor.js +6 -8
- package/src/verifier/nodes/metaLevel.js +6 -6
- package/src/verifier/nodes/metaLevelToIntrinsicLevel.js +15 -19
- package/src/verifier/nodes/statementAgainstCombinator.js +10 -10
- package/src/verifier/nodes/substitution.js +18 -15
- package/src/verifier/nodes/termAgainstConstructor.js +9 -9
- package/src/verify/containment.js +1 -1
- package/src/verify/defining.js +5 -5
- package/src/verify/equality.js +16 -16
- package/src/verify/givenType.js +5 -5
- package/src/verify/givenVariable.js +5 -5
- package/src/verify/metavariable.js +5 -5
- package/src/verify/statement/qualified.js +12 -13
- package/src/verify/statement/unqualified.js +1 -2
- package/src/verify/statement.js +39 -39
- package/src/verify/statementAsCombinator.js +1 -0
- package/src/verify/term.js +29 -29
- package/src/verify/termAndGivenType.js +7 -7
- package/src/verify/termAsConstructor.js +3 -1
- package/src/verify/terms.js +7 -7
- package/src/verify/type.js +6 -6
- package/src/verify/typeAssertion.js +18 -18
- package/src/verify/variable.js +5 -5
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import LocalContext from "../../context/local";
|
|
4
3
|
import NodesVerifier from "../../verifier/nodes";
|
|
5
4
|
import TermForVariableSubstitution from "../../substitution/termForVariable";
|
|
6
5
|
import intrinsicLevelNodesVerifierMixins from "../../mixins/nodesVerifier/intrinsiclevel";
|
|
@@ -16,7 +15,7 @@ const variableNodeQuery = nodeQuery("/*/variable!"),
|
|
|
16
15
|
substitutionNodeQuery = nodeQuery("/metastatement/substitution!");
|
|
17
16
|
|
|
18
17
|
class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
19
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
18
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
20
19
|
let nonTerminalNodeVerified;
|
|
21
20
|
|
|
22
21
|
const nonTerminalNodeARuleName = nonTerminalNodeA.getRuleName();
|
|
@@ -24,7 +23,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
24
23
|
switch (nonTerminalNodeARuleName) {
|
|
25
24
|
case METASTATEMENT_RULE_NAME: {
|
|
26
25
|
const metastatementNodeA = nonTerminalNodeA, ///
|
|
27
|
-
metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions,
|
|
26
|
+
metaArgumentNodeVerified = this.verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
28
27
|
|
|
29
28
|
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
30
29
|
|
|
@@ -33,7 +32,6 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
33
32
|
|
|
34
33
|
case TERM_RULE_NAME: {
|
|
35
34
|
const termNodeA = nonTerminalNodeA, ///
|
|
36
|
-
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
37
35
|
termNodeVerified = this.verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
38
36
|
|
|
39
37
|
nonTerminalNodeVerified = termNodeVerified; ///
|
|
@@ -42,14 +40,14 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
42
40
|
}
|
|
43
41
|
|
|
44
42
|
default: {
|
|
45
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
43
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
46
44
|
}
|
|
47
45
|
}
|
|
48
46
|
|
|
49
47
|
return nonTerminalNodeVerified;
|
|
50
48
|
}
|
|
51
49
|
|
|
52
|
-
verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions,
|
|
50
|
+
verifyMetastatementNode(metastatementNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
53
51
|
let metastatementNodeVerified;
|
|
54
52
|
|
|
55
53
|
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -57,7 +55,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
57
55
|
switch (nonTerminalNodeBRuleName) {
|
|
58
56
|
case META_ARGUMENT_RULE_NAME: {
|
|
59
57
|
const metaArgumentNodeB = nonTerminalNodeB, ///
|
|
60
|
-
metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions,
|
|
58
|
+
metaArgumentNodeVerified = this.verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
61
59
|
|
|
62
60
|
metastatementNodeVerified = metaArgumentNodeVerified; ///
|
|
63
61
|
|
|
@@ -66,7 +64,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
66
64
|
|
|
67
65
|
case STATEMENT_RULE_NAME: {
|
|
68
66
|
const statementNodeB = nonTerminalNodeB, ///
|
|
69
|
-
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions,
|
|
67
|
+
statementNodeVerified = this.verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
70
68
|
|
|
71
69
|
metastatementNodeVerified = statementNodeVerified; ///
|
|
72
70
|
|
|
@@ -77,7 +75,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
77
75
|
return metastatementNodeVerified;
|
|
78
76
|
}
|
|
79
77
|
|
|
80
|
-
verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions,
|
|
78
|
+
verifyMetaArgumentNode(metastatementNodeA, metaArgumentNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
81
79
|
let metaArgumentNodeVerified = false;
|
|
82
80
|
|
|
83
81
|
const statementNodeB = statementNodeQuery(metaArgumentNodeB),
|
|
@@ -85,7 +83,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
85
83
|
|
|
86
84
|
if ((metavariableNodeA !== null) && (statementNodeB !== null)) {
|
|
87
85
|
const substitutionNodeA = substitutionNodeQuery(metastatementNodeA),
|
|
88
|
-
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions,
|
|
86
|
+
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
89
87
|
|
|
90
88
|
metaArgumentNodeVerified = metavariableNodeVerified; ///
|
|
91
89
|
}
|
|
@@ -93,14 +91,14 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
93
91
|
return metaArgumentNodeVerified;
|
|
94
92
|
}
|
|
95
93
|
|
|
96
|
-
verifyStatementNode(metastatementNodeA, statementNodeB, substitutions,
|
|
94
|
+
verifyStatementNode(metastatementNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
97
95
|
let statementNodeVerified;
|
|
98
96
|
|
|
99
97
|
const metavariableNodeA = metavariableNodeQuery(metastatementNodeA);
|
|
100
98
|
|
|
101
99
|
if (metavariableNodeA !== null) {
|
|
102
100
|
const substitutionNodeA = substitutionNodeQuery(metastatementNodeA),
|
|
103
|
-
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions,
|
|
101
|
+
metavariableNodeVerified = this.verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
104
102
|
|
|
105
103
|
statementNodeVerified = metavariableNodeVerified; ///
|
|
106
104
|
} else {
|
|
@@ -110,7 +108,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
110
108
|
nonTerminalNodeBChildNodes = nonTerminalNodeB.getChildNodes(),
|
|
111
109
|
childNodesA = nonTerminalNodeAChildNodes, ///
|
|
112
110
|
childNodesB = nonTerminalNodeBChildNodes, ///
|
|
113
|
-
childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions,
|
|
111
|
+
childNodesVerified = super.verifyChildNodes(childNodesA, childNodesB, substitutions, localContextA, localContextB, verifyAhead);
|
|
114
112
|
|
|
115
113
|
statementNodeVerified = childNodesVerified; ///
|
|
116
114
|
}
|
|
@@ -118,7 +116,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
118
116
|
return statementNodeVerified;
|
|
119
117
|
}
|
|
120
118
|
|
|
121
|
-
verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions,
|
|
119
|
+
verifyMetavariableNode(metavariableNodeA, substitutionNodeA, statementNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
122
120
|
let metavariableNodeVerified;
|
|
123
121
|
|
|
124
122
|
const substitution = substitutions.find((substitution) => {
|
|
@@ -130,8 +128,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
130
128
|
}) || null;
|
|
131
129
|
|
|
132
130
|
if (substitution !== null) {
|
|
133
|
-
const statementNode = substitution.getStatementNode()
|
|
134
|
-
localContextA = LocalContext.fromFileContext(fileContextA);
|
|
131
|
+
const statementNode = substitution.getStatementNode();
|
|
135
132
|
|
|
136
133
|
if (substitutionNodeA !== null) {
|
|
137
134
|
const substitutionNode = substitutionNodeA, ///
|
|
@@ -161,7 +158,7 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
161
158
|
return metavariableNodeVerified;
|
|
162
159
|
}
|
|
163
160
|
|
|
164
|
-
verifyTermNode(termNodeA, nonTerminalNodeB, substitutions,
|
|
161
|
+
verifyTermNode(termNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
165
162
|
let termNodeVerified = false;
|
|
166
163
|
|
|
167
164
|
const nonTerminalNodeBRuleName = nonTerminalNodeB.getRuleName();
|
|
@@ -172,14 +169,13 @@ class MetaLevelToIntrinsicLevelNodesVerifier extends NodesVerifier {
|
|
|
172
169
|
|
|
173
170
|
if (variableNodeA !== null) {
|
|
174
171
|
const termNodeB = nonTerminalNodeB, ///
|
|
175
|
-
localContextA = LocalContext.fromFileContext(fileContextA),
|
|
176
172
|
variableNodeVerified = this.verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
177
173
|
|
|
178
174
|
termNodeVerified = variableNodeVerified; ///
|
|
179
175
|
} else {
|
|
180
176
|
const nonTerminalNodeA = termNodeA, ///
|
|
181
177
|
nonTerminalNodeB = termNodeB, ///
|
|
182
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions,
|
|
178
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, substitutions, localContextA, localContextB, verifyAhead);
|
|
183
179
|
|
|
184
180
|
termNodeVerified = nonTerminalNodeVerified; ///
|
|
185
181
|
}
|
|
@@ -12,7 +12,7 @@ const metaTypeNodeQuery = nodeQuery("/metaArgument/metaType!"),
|
|
|
12
12
|
metaTypeTerminalNodeQuery = nodeQuery("/metaType/@meta-type");
|
|
13
13
|
|
|
14
14
|
class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
15
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
15
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
16
16
|
let nonTerminalNodeVerified = false;
|
|
17
17
|
|
|
18
18
|
const nonTerminalNode = nonTerminalNodeA, ///
|
|
@@ -25,7 +25,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
25
25
|
case META_ARGUMENT_RULE_NAME: {
|
|
26
26
|
const metaArgumentNode = nonTerminalNode, ///
|
|
27
27
|
combinatorMetaargumentNode = combinatorNonTerminalNode, ///
|
|
28
|
-
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode,
|
|
28
|
+
metaArgumentNodeVerified = this.verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead);
|
|
29
29
|
|
|
30
30
|
nonTerminalNodeVerified = metaArgumentNodeVerified; ///
|
|
31
31
|
|
|
@@ -35,7 +35,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
35
35
|
case ARGUMENT_RULE_NAME: {
|
|
36
36
|
const argumentNode = nonTerminalNode, ///
|
|
37
37
|
constructorArgumentNode = combinatorNonTerminalNode, ///
|
|
38
|
-
argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
38
|
+
argumentNodeVerified = termAgainstConstructorNodesVerifier.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
|
|
39
39
|
|
|
40
40
|
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
41
41
|
|
|
@@ -43,7 +43,7 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
43
43
|
}
|
|
44
44
|
|
|
45
45
|
default: {
|
|
46
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
46
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
47
47
|
|
|
48
48
|
break;
|
|
49
49
|
}
|
|
@@ -53,28 +53,28 @@ class StatementAgainstCombinatorNodesVerifier extends NodesVerifier {
|
|
|
53
53
|
return nonTerminalNodeVerified;
|
|
54
54
|
}
|
|
55
55
|
|
|
56
|
-
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode,
|
|
56
|
+
verifyMetaargumentNode(metaArgumentNode, combinatorMetaargumentNode, localContext, verifyAhead) {
|
|
57
57
|
let metaArgumentNodeVerified = false;
|
|
58
58
|
|
|
59
|
-
const metaArgumentString =
|
|
59
|
+
const metaArgumentString = localContext.nodeAsString(metaArgumentNode);
|
|
60
60
|
|
|
61
61
|
const statementNode = statementNodeQuery(metaArgumentNode),
|
|
62
62
|
combinatorMetaTYpeNode = metaTypeNodeQuery(combinatorMetaargumentNode);
|
|
63
63
|
|
|
64
64
|
if (statementNode === null) {
|
|
65
|
-
|
|
65
|
+
localContext.debug(`Expected a statement but got a '${metaArgumentString}' meta-type.`, metaArgumentNode);
|
|
66
66
|
} else {
|
|
67
67
|
if (combinatorMetaTYpeNode === null) {
|
|
68
|
-
const combinatorMetaargumentString =
|
|
68
|
+
const combinatorMetaargumentString = localContext.nodeAsString(combinatorMetaargumentNode);
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
localContext.debug(`Expected a meta-type but got a '${combinatorMetaargumentString}' statement.`, metaArgumentNode);
|
|
71
71
|
} else {
|
|
72
72
|
const combinatorMetaTypeTerminalNode = metaTypeTerminalNodeQuery(combinatorMetaTYpeNode),
|
|
73
73
|
content = combinatorMetaTypeTerminalNode.getContent(),
|
|
74
74
|
contentStatementMetaType = (content === STATEMENT_META_TYPE);
|
|
75
75
|
|
|
76
76
|
if (!contentStatementMetaType) {
|
|
77
|
-
|
|
77
|
+
localContext.debug(`Expected the meta-type of the combinator to be '${STATEMENT_META_TYPE}' but got '${content}' instead.`, metaArgumentNode);
|
|
78
78
|
} else {
|
|
79
79
|
const verifiedAhead = verifyAhead();
|
|
80
80
|
|
|
@@ -64,26 +64,29 @@ class SubstitutionNodesVerifier extends NodesVerifier {
|
|
|
64
64
|
verifyVariableNode(variableNodeA, termNodeB, substitutions, localContextA, localContextB, verifyAhead) {
|
|
65
65
|
let variableNodeVerified = false;
|
|
66
66
|
|
|
67
|
-
|
|
67
|
+
if (variableNodeVerified === false) {
|
|
68
|
+
const variableNodeB = variableNodeQuery(termNodeB);
|
|
68
69
|
|
|
69
|
-
|
|
70
|
-
|
|
70
|
+
if (variableNodeB !== null) {
|
|
71
|
+
const variableNodeAMatchedVariableNodeB = variableNodeA.match(variableNodeB);
|
|
71
72
|
|
|
72
|
-
|
|
73
|
-
|
|
73
|
+
if (variableNodeAMatchedVariableNodeB) {
|
|
74
|
+
const verifiedAhead = verifyAhead();
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
variableNodeVerified = verifiedAhead; ///
|
|
77
|
+
}
|
|
76
78
|
}
|
|
77
|
-
}
|
|
78
|
-
const variableNode = variableNodeA; ///
|
|
79
|
+
}
|
|
79
80
|
|
|
80
|
-
|
|
81
|
-
|
|
81
|
+
if (variableNodeVerified === false) {
|
|
82
|
+
const variableNode = variableNodeA,
|
|
83
|
+
substitution = substitutions.find((substitution) => {
|
|
84
|
+
const matches = substitution.matchVariableNode(variableNode);
|
|
82
85
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
86
|
+
if (matches) {
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
}) || null;
|
|
87
90
|
|
|
88
91
|
if (substitution !== null) {
|
|
89
92
|
const termNode = termNodeB, ///
|
|
@@ -109,7 +112,7 @@ class SubstitutionNodesVerifier extends NodesVerifier {
|
|
|
109
112
|
substitutions.pop();
|
|
110
113
|
}
|
|
111
114
|
|
|
112
|
-
variableNodeVerified = verifiedAhead;
|
|
115
|
+
variableNodeVerified = verifiedAhead; ///
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
118
|
|
|
@@ -10,7 +10,7 @@ const termNodeQuery = nodeQuery("/argument/term!"),
|
|
|
10
10
|
typeNodeQuery = nodeQuery("/argument/type!");
|
|
11
11
|
|
|
12
12
|
class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
13
|
-
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
13
|
+
verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead) {
|
|
14
14
|
let nonTerminalNodeVerified = false;
|
|
15
15
|
|
|
16
16
|
const nonTerminalNode = nonTerminalNodeA, ///
|
|
@@ -23,7 +23,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
23
23
|
case ARGUMENT_RULE_NAME: {
|
|
24
24
|
const argumentNode = nonTerminalNode, ///
|
|
25
25
|
constructorArgumentNode = constructorNonTerminalNode, ///
|
|
26
|
-
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
26
|
+
argumentNodeVerified = this.verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead);
|
|
27
27
|
|
|
28
28
|
nonTerminalNodeVerified = argumentNodeVerified; ///
|
|
29
29
|
|
|
@@ -31,7 +31,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
default: {
|
|
34
|
-
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode,
|
|
34
|
+
nonTerminalNodeVerified = super.verifyNonTerminalNode(nonTerminalNode, constructorNonTerminalNode, localContext, verifyAhead);
|
|
35
35
|
|
|
36
36
|
break;
|
|
37
37
|
}
|
|
@@ -41,15 +41,15 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
41
41
|
return nonTerminalNodeVerified;
|
|
42
42
|
}
|
|
43
43
|
|
|
44
|
-
verifyArgumentNode(argumentNode, constructorArgumentNode,
|
|
44
|
+
verifyArgumentNode(argumentNode, constructorArgumentNode, localContext, verifyAhead) {
|
|
45
45
|
let argumentNodeVerified = false;
|
|
46
46
|
|
|
47
|
-
const argumentString =
|
|
47
|
+
const argumentString = localContext.nodeAsString(argumentNode);
|
|
48
48
|
|
|
49
49
|
const typeNode = typeNodeQuery(argumentNode);
|
|
50
50
|
|
|
51
51
|
if (typeNode !== null) {
|
|
52
|
-
|
|
52
|
+
localContext.debug(`The '${argumentString}' argument should be a term, not a type.`, argumentNode);
|
|
53
53
|
} else {
|
|
54
54
|
const termNode = termNodeQuery(argumentNode);
|
|
55
55
|
|
|
@@ -59,7 +59,7 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
59
59
|
if (constructorTermNode !== null) {
|
|
60
60
|
const node = termNode, ///
|
|
61
61
|
constructorNode = constructorTermNode, ///
|
|
62
|
-
nodeVerified = this.verifyNode(node, constructorNode,
|
|
62
|
+
nodeVerified = this.verifyNode(node, constructorNode, localContext, verifyAhead);
|
|
63
63
|
|
|
64
64
|
argumentNodeVerified = nodeVerified; ///
|
|
65
65
|
}
|
|
@@ -71,14 +71,14 @@ class TermAgainstConstructorNodesVerifier extends NodesVerifier {
|
|
|
71
71
|
if (constructorTypeNode !== null) {
|
|
72
72
|
const { verifyTerm } = termAgainstConstructorNodesVerifier,
|
|
73
73
|
terms = [],
|
|
74
|
-
termVerified = verifyTerm(termNode, terms,
|
|
74
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
75
75
|
let verifiedAhead = false;
|
|
76
76
|
|
|
77
77
|
const constructorTypeName = typeNameFromTypeNode(constructorTypeNode),
|
|
78
78
|
firstTerm = first(terms),
|
|
79
79
|
term = firstTerm, ///
|
|
80
80
|
termType = term.getType(),
|
|
81
|
-
constructorType =
|
|
81
|
+
constructorType = localContext.findTypeByTypeName(constructorTypeName),
|
|
82
82
|
termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(constructorType);
|
|
83
83
|
|
|
84
84
|
if (termTypeEqualToOrSubTypeOfType) {
|
|
@@ -9,7 +9,7 @@ const termNodeQuery = nodeQuery("/argument/term!"),
|
|
|
9
9
|
metaArgumentTermNodesQuery = nodesQuery("/metaArgument//term"),
|
|
10
10
|
metaArgumentVariableNodesQuery = nodesQuery("/metaArgument//variable");
|
|
11
11
|
|
|
12
|
-
export default function verifyContainment(argumentNode, containmentNode, metaArgumentNode,
|
|
12
|
+
export default function verifyContainment(argumentNode, containmentNode, metaArgumentNode, localContext) {
|
|
13
13
|
let containmentVerified = false;
|
|
14
14
|
|
|
15
15
|
const contained = containedFromContainmentNode(containmentNode),
|
package/src/verify/defining.js
CHANGED
|
@@ -9,7 +9,7 @@ import { first, second } from "../utilities/array";
|
|
|
9
9
|
const termNodeQuery = nodeQuery("/argument/term!"),
|
|
10
10
|
variableNodeQuery = nodeQuery("/argument/term/variable!");
|
|
11
11
|
|
|
12
|
-
export default function verifyDefining(argumentNode, definingNode,
|
|
12
|
+
export default function verifyDefining(argumentNode, definingNode, localContext) {
|
|
13
13
|
let definingVerified = false;
|
|
14
14
|
|
|
15
15
|
const defined = definedFromDefiningNode(definingNode),
|
|
@@ -19,10 +19,10 @@ export default function verifyDefining(argumentNode, definingNode, context) {
|
|
|
19
19
|
if (false) {
|
|
20
20
|
///
|
|
21
21
|
} else if (variableNode !== null) {
|
|
22
|
-
const variable =
|
|
22
|
+
const variable = localContext.findVariableByVariableNode(variableNode);
|
|
23
23
|
|
|
24
24
|
if (variable !== null) {
|
|
25
|
-
const variableDefined =
|
|
25
|
+
const variableDefined = localContext.isVariableDefined(variable);
|
|
26
26
|
|
|
27
27
|
if (defined) {
|
|
28
28
|
if (variableDefined) {
|
|
@@ -38,12 +38,12 @@ export default function verifyDefining(argumentNode, definingNode, context) {
|
|
|
38
38
|
}
|
|
39
39
|
} else if (termNode !== null) {
|
|
40
40
|
const terms = [],
|
|
41
|
-
termVerified = verifyTerm(termNode, terms,
|
|
41
|
+
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
42
42
|
let verifiedAhead;
|
|
43
43
|
|
|
44
44
|
const firstTerm = first(terms),
|
|
45
45
|
term = firstTerm, ///
|
|
46
|
-
termGrounded =
|
|
46
|
+
termGrounded = localContext.isTermGrounded(term);
|
|
47
47
|
|
|
48
48
|
if (defined) {
|
|
49
49
|
if (termGrounded) {
|
package/src/verify/equality.js
CHANGED
|
@@ -10,12 +10,12 @@ import { first, second } from "../utilities/array";
|
|
|
10
10
|
const leftTermNodeQuery = nodeQuery("/equality/argument[0]/term!"),
|
|
11
11
|
rightTermNodeQuery = nodeQuery("/equality/argument[1]/term!");
|
|
12
12
|
|
|
13
|
-
export default function verifyEquality(equalityNode, assignments, derived,
|
|
13
|
+
export default function verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
14
14
|
let equalityVerified;
|
|
15
15
|
|
|
16
|
-
const equalityString =
|
|
16
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
localContext.trace(`Verifying the '${equalityString}' equality...`, equalityNode);
|
|
19
19
|
|
|
20
20
|
const verifyEqualityFunctions = [
|
|
21
21
|
verifyDerivedEquality,
|
|
@@ -23,7 +23,7 @@ export default function verifyEquality(equalityNode, assignments, derived, conte
|
|
|
23
23
|
];
|
|
24
24
|
|
|
25
25
|
equalityVerified = verifyEqualityFunctions.some((verifyEqualityFunction) => {
|
|
26
|
-
const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived,
|
|
26
|
+
const equalityVerified = verifyEqualityFunction(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
27
27
|
|
|
28
28
|
if (equalityVerified) {
|
|
29
29
|
return true;
|
|
@@ -31,19 +31,19 @@ export default function verifyEquality(equalityNode, assignments, derived, conte
|
|
|
31
31
|
});
|
|
32
32
|
|
|
33
33
|
if (equalityVerified) {
|
|
34
|
-
|
|
34
|
+
localContext.debug(`...verified the '${equalityString}' equality.`, equalityNode);
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
return equalityVerified;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
function verifyDerivedEquality(equalityNode, assignments, derived,
|
|
40
|
+
function verifyDerivedEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
41
41
|
let derivedEqualityVerified = false;
|
|
42
42
|
|
|
43
43
|
if (derived) {
|
|
44
|
-
const equalityString =
|
|
44
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
localContext.trace(`Verifying the '${equalityString}' derived equality...`, equalityNode);
|
|
47
47
|
|
|
48
48
|
const terms = [],
|
|
49
49
|
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
@@ -52,7 +52,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
52
52
|
leftTermNode,
|
|
53
53
|
rightTermNode
|
|
54
54
|
],
|
|
55
|
-
termsVerified = verifyTerms(termNodes, terms,
|
|
55
|
+
termsVerified = verifyTerms(termNodes, terms, localContext, () => {
|
|
56
56
|
let verifiedAhead = false;
|
|
57
57
|
|
|
58
58
|
const firstTerm = first(terms),
|
|
@@ -62,7 +62,7 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
62
62
|
equality = Equality.fromLeftTermRightTermAndEqualityNode(leftTerm, rightTerm, equalityNode);
|
|
63
63
|
|
|
64
64
|
if (equality !== null) {
|
|
65
|
-
const equalityEqual = equality.isEqual(
|
|
65
|
+
const equalityEqual = equality.isEqual(localContext);
|
|
66
66
|
|
|
67
67
|
if (equalityEqual) {
|
|
68
68
|
const equalityAssignment = EqualityAssignment.fromEquality(equality),
|
|
@@ -84,20 +84,20 @@ function verifyDerivedEquality(equalityNode, assignments, derived, context, veri
|
|
|
84
84
|
derivedEqualityVerified = termsVerified; ///
|
|
85
85
|
|
|
86
86
|
if (derivedEqualityVerified) {
|
|
87
|
-
|
|
87
|
+
localContext.trace(`...verified the '${equalityString}' derived equality.`, equalityNode);
|
|
88
88
|
}
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
return derivedEqualityVerified;
|
|
92
92
|
}
|
|
93
93
|
|
|
94
|
-
function verifyGivenEquality(equalityNode, assignments, derived,
|
|
94
|
+
function verifyGivenEquality(equalityNode, assignments, derived, localContext, verifyAhead) {
|
|
95
95
|
let givenEqualityVerified = false;
|
|
96
96
|
|
|
97
97
|
if (!derived) {
|
|
98
|
-
const equalityString =
|
|
98
|
+
const equalityString = localContext.nodeAsString(equalityNode);
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
localContext.trace(`Verifying the '${equalityString}' given equality...`, equalityNode);
|
|
101
101
|
|
|
102
102
|
const terms = [],
|
|
103
103
|
leftTermNode = leftTermNodeQuery(equalityNode),
|
|
@@ -106,7 +106,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
|
|
|
106
106
|
leftTermNode,
|
|
107
107
|
rightTermNode
|
|
108
108
|
],
|
|
109
|
-
termsVerified = verifyTerms(termNodes, terms,
|
|
109
|
+
termsVerified = verifyTerms(termNodes, terms, localContext, () => {
|
|
110
110
|
let verifiedAhead = false;
|
|
111
111
|
|
|
112
112
|
const firstTerm = first(terms),
|
|
@@ -134,7 +134,7 @@ function verifyGivenEquality(equalityNode, assignments, derived, context, verify
|
|
|
134
134
|
givenEqualityVerified = termsVerified; ///
|
|
135
135
|
|
|
136
136
|
if (givenEqualityVerified) {
|
|
137
|
-
|
|
137
|
+
localContext.trace(`...verified the '${equalityString}' given equality.`, equalityNode);
|
|
138
138
|
}
|
|
139
139
|
}
|
|
140
140
|
|
package/src/verify/givenType.js
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
import { typeNameFromTypeNode } from "../utilities/query";
|
|
4
4
|
|
|
5
|
-
export default function verifyGivenType(typeNode, types,
|
|
5
|
+
export default function verifyGivenType(typeNode, types, localContext, verifyAhead) {
|
|
6
6
|
let givenTypeVerified = false;
|
|
7
7
|
|
|
8
|
-
const typeString =
|
|
8
|
+
const typeString = localContext.nodeAsString(typeNode);
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
localContext.trace(`Verifying the given '${typeString}' type...`, typeNode);
|
|
11
11
|
|
|
12
12
|
const typeName = typeNameFromTypeNode(typeNode),
|
|
13
|
-
type =
|
|
13
|
+
type = localContext.findTypeByTypeName(typeName);
|
|
14
14
|
|
|
15
15
|
if (type !== null) {
|
|
16
16
|
let verifiedAhead;
|
|
@@ -27,7 +27,7 @@ export default function verifyGivenType(typeNode, types, context, verifyAhead) {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
if (givenTypeVerified) {
|
|
30
|
-
|
|
30
|
+
localContext.debug(`...verified the given '${typeString}' type.`, typeNode);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
return givenTypeVerified;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
export default function verifyGivenVariable(variableNode, variables,
|
|
3
|
+
export default function verifyGivenVariable(variableNode, variables, localContext, verifyAhead) {
|
|
4
4
|
let givenVariableVerified = false;
|
|
5
5
|
|
|
6
|
-
const variableString =
|
|
6
|
+
const variableString = localContext.nodeAsString(variableNode);
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
localContext.trace(`Verifying the '${variableString}' given variable...`, variableNode);
|
|
9
9
|
|
|
10
|
-
const variable =
|
|
10
|
+
const variable = localContext.findVariableByVariableNode(variableNode);
|
|
11
11
|
|
|
12
12
|
if (variable !== null) {
|
|
13
13
|
let verifiedAhead;
|
|
@@ -24,7 +24,7 @@ export default function verifyGivenVariable(variableNode, variables, context, ve
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
if (givenVariableVerified) {
|
|
27
|
-
|
|
27
|
+
localContext.debug(`...verified the '${variableString}' given variable.`, variableNode);
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
return givenVariableVerified;
|
|
@@ -35,14 +35,14 @@ export default function verifyMetavariable(metavariableNode, metaTypeNode, fileC
|
|
|
35
35
|
return metavariableVerified;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
-
export function verifyStandaloneMetavariable(metavariableNode,
|
|
38
|
+
export function verifyStandaloneMetavariable(metavariableNode, localMetaContext, verifyAhead) {
|
|
39
39
|
let standaloneMetavariableVerified = false;
|
|
40
40
|
|
|
41
|
-
const metavariableString =
|
|
41
|
+
const metavariableString = localMetaContext.nodeAsString(metavariableNode);
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
localMetaContext.trace(`Verifying the '${metavariableString}' standalone metavariable...`, metavariableNode);
|
|
44
44
|
|
|
45
|
-
const metavariablePresent =
|
|
45
|
+
const metavariablePresent = localMetaContext.isMetavariablePresentByMetavariableNode(metavariableNode);
|
|
46
46
|
|
|
47
47
|
if (metavariablePresent) {
|
|
48
48
|
const verifiedAhead = verifyAhead();
|
|
@@ -51,7 +51,7 @@ export function verifyStandaloneMetavariable(metavariableNode, contexct, verifyA
|
|
|
51
51
|
}
|
|
52
52
|
|
|
53
53
|
if (standaloneMetavariableVerified) {
|
|
54
|
-
|
|
54
|
+
localMetaContext.debug(`...verified the '${metavariableString}' standalone metavariable.`, metavariableNode);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
return standaloneMetavariableVerified;
|