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
|
@@ -41,14 +41,13 @@ export default function verifyQualifiedStatement(qualifiedStatementNode, assignm
|
|
|
41
41
|
if (qualifiedStatementVerified) {
|
|
42
42
|
derived = false; ///
|
|
43
43
|
|
|
44
|
-
const
|
|
45
|
-
verifyQualifiedStatementFunctions = [
|
|
44
|
+
const verifyQualifiedStatementFunctions = [
|
|
46
45
|
verifyQualifiedStatementAsEquality,
|
|
47
46
|
verifyQualifiedStatementAsTypeAssertion
|
|
48
47
|
];
|
|
49
48
|
|
|
50
49
|
qualifiedStatementVerified = verifyQualifiedStatementFunctions.every((verifyQualifiedStatementFunction) => { ///
|
|
51
|
-
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived,
|
|
50
|
+
const qualifiedStatementVerified = verifyQualifiedStatementFunction(qualifiedStatementNode, assignments, derived, localContext, () => {
|
|
52
51
|
const verifiedAhead = true;
|
|
53
52
|
|
|
54
53
|
return verifiedAhead;
|
|
@@ -188,44 +187,44 @@ function verifyQualifiedStatementAAgainstConjecture(qualifiedStatementNode, refe
|
|
|
188
187
|
return qualifiedStatementVerifiedAgainstConjecture;
|
|
189
188
|
}
|
|
190
189
|
|
|
191
|
-
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived,
|
|
190
|
+
function verifyQualifiedStatementAsEquality(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
192
191
|
let statementVerifiedAsEquality = true; ///
|
|
193
192
|
|
|
194
193
|
const equalityNode = equalityNodeQuery(qualifiedStatementNode);
|
|
195
194
|
|
|
196
195
|
if (equalityNode !== null) {
|
|
197
|
-
const qualifiedStatementString =
|
|
196
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
198
197
|
|
|
199
|
-
|
|
198
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as an equality...`, qualifiedStatementNode);
|
|
200
199
|
|
|
201
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived,
|
|
200
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
202
201
|
|
|
203
202
|
statementVerifiedAsEquality = equalityVerified; ///
|
|
204
203
|
|
|
205
204
|
if (statementVerifiedAsEquality) {
|
|
206
|
-
|
|
205
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as an equality.`, qualifiedStatementNode);
|
|
207
206
|
}
|
|
208
207
|
}
|
|
209
208
|
|
|
210
209
|
return statementVerifiedAsEquality;
|
|
211
210
|
}
|
|
212
211
|
|
|
213
|
-
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived,
|
|
212
|
+
function verifyQualifiedStatementAsTypeAssertion(qualifiedStatementNode, assignments, derived, localContext, verifyAhead) {
|
|
214
213
|
let statementVerifiedAsTypeAssertion = true; ///
|
|
215
214
|
|
|
216
215
|
const typeAssertionNode = typeAssertionNodeQuery(qualifiedStatementNode);
|
|
217
216
|
|
|
218
217
|
if (typeAssertionNode !== null) {
|
|
219
|
-
const qualifiedStatementString =
|
|
218
|
+
const qualifiedStatementString = localContext.nodeAsString(qualifiedStatementNode);
|
|
220
219
|
|
|
221
|
-
|
|
220
|
+
localContext.trace(`Verifying the '${qualifiedStatementString}' qualified statement as a type assertion...`, qualifiedStatementNode);
|
|
222
221
|
|
|
223
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived,
|
|
222
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead);
|
|
224
223
|
|
|
225
224
|
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
226
225
|
|
|
227
226
|
if (statementVerifiedAsTypeAssertion) {
|
|
228
|
-
|
|
227
|
+
localContext.debug(`...verified the '${qualifiedStatementString}' qualified statement as a type assertion.`, qualifiedStatementNode);
|
|
229
228
|
}
|
|
230
229
|
}
|
|
231
230
|
|
|
@@ -23,8 +23,7 @@ export default function verifyUnqualifiedStatement(unqualifiedStatementNode, ass
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
if (!unqualifiedStatementVerified) {
|
|
26
|
-
const
|
|
27
|
-
statementVerified = verifyStatement(statementNode, assignments, derived, context, () => {
|
|
26
|
+
const statementVerified = verifyStatement(statementNode, assignments, derived, localContext, () => {
|
|
28
27
|
const verifiedAhead = true;
|
|
29
28
|
|
|
30
29
|
return verifiedAhead;
|
package/src/verify/statement.js
CHANGED
|
@@ -17,12 +17,12 @@ const equalityNodeQuery = nodeQuery("/statement/equality!"),
|
|
|
17
17
|
metaArgumentNodeQuery = nodeQuery("/statement/metaArgument!"),
|
|
18
18
|
typeAssertionNodeQuery = nodeQuery("/statement/typeAssertion!");
|
|
19
19
|
|
|
20
|
-
function verifyStatement(statementNode, assignments, derived,
|
|
20
|
+
function verifyStatement(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
21
21
|
let statementVerified;
|
|
22
22
|
|
|
23
|
-
const statementString =
|
|
23
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
localContext.trace(`Verifying the '${statementString}' statement...`, statementNode);
|
|
26
26
|
|
|
27
27
|
const verifyStatementFunctions = [
|
|
28
28
|
verifyStatementAsEquality,
|
|
@@ -33,7 +33,7 @@ function verifyStatement(statementNode, assignments, derived, context, verifyAhe
|
|
|
33
33
|
];
|
|
34
34
|
|
|
35
35
|
statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
36
|
-
const statementVerified = verifyStatementFunction(statementNode, assignments, derived,
|
|
36
|
+
const statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext, verifyAhead);
|
|
37
37
|
|
|
38
38
|
if (statementVerified) {
|
|
39
39
|
return true;
|
|
@@ -41,27 +41,27 @@ function verifyStatement(statementNode, assignments, derived, context, verifyAhe
|
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
if (statementVerified) {
|
|
44
|
-
|
|
44
|
+
localContext.debug(`...verified the '${statementString}' statement.`, statementNode);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return statementVerified;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export function verifyStandaloneStatement(statementNode,
|
|
50
|
+
export function verifyStandaloneStatement(statementNode, localContext, verifyAhead) {
|
|
51
51
|
let standaloneStatementVerified;
|
|
52
52
|
|
|
53
|
-
const statementString =
|
|
53
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
localContext.trace(`Verifying the '${statementString}' standalone statement...`, statementNode);
|
|
56
56
|
|
|
57
57
|
const derived = false,
|
|
58
58
|
assignments = [],
|
|
59
|
-
statementVerified = verifyStatement(statementNode, assignments, derived,
|
|
59
|
+
statementVerified = verifyStatement(statementNode, assignments, derived, localContext, verifyAhead);
|
|
60
60
|
|
|
61
61
|
standaloneStatementVerified = statementVerified; ///
|
|
62
62
|
|
|
63
63
|
if (standaloneStatementVerified) {
|
|
64
|
-
|
|
64
|
+
localContext.debug(`...verified the '${statementString}' standalone statement.`, statementNode);
|
|
65
65
|
}
|
|
66
66
|
|
|
67
67
|
return standaloneStatementVerified;
|
|
@@ -73,86 +73,86 @@ Object.assign(statementAgainstCombinatorNodesVerifier, {
|
|
|
73
73
|
|
|
74
74
|
export default verifyStatement;
|
|
75
75
|
|
|
76
|
-
function verifyStatementAsEquality(statementNode, assignments, derived,
|
|
76
|
+
function verifyStatementAsEquality(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
77
77
|
let statementVerifiedAsEquality = false;
|
|
78
78
|
|
|
79
79
|
const equalityNode = equalityNodeQuery(statementNode);
|
|
80
80
|
|
|
81
81
|
if (equalityNode !== null) {
|
|
82
|
-
const statementString =
|
|
82
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
localContext.trace(`Verifying the '${statementString}' statement as an equality...`, statementNode);
|
|
85
85
|
|
|
86
|
-
const equalityVerified = verifyEquality(equalityNode, assignments, derived,
|
|
86
|
+
const equalityVerified = verifyEquality(equalityNode, assignments, derived, localContext, verifyAhead);
|
|
87
87
|
|
|
88
88
|
statementVerifiedAsEquality = equalityVerified; ///
|
|
89
89
|
|
|
90
90
|
if (statementVerifiedAsEquality) {
|
|
91
|
-
|
|
91
|
+
localContext.debug(`...verified the '${statementString}' statement as an equality.`, statementNode);
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
return statementVerifiedAsEquality;
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
-
function verifyStatementAboutDefining(statementNode, assignments, derived,
|
|
98
|
+
function verifyStatementAboutDefining(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
99
99
|
let statementVerifiedAboutDefining = false;
|
|
100
100
|
|
|
101
101
|
const definingNode = definingNodeQuery(statementNode);
|
|
102
102
|
|
|
103
103
|
if (definingNode !== null) {
|
|
104
|
-
const statementString =
|
|
104
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
localContext.trace(`Verifying the '${statementString}' statement about defining...`, statementNode);
|
|
107
107
|
|
|
108
108
|
const argumentNode = argumentNodeQuery(statementNode),
|
|
109
|
-
definingVerified = verifyDefining(argumentNode, definingNode,
|
|
109
|
+
definingVerified = verifyDefining(argumentNode, definingNode, localContext);
|
|
110
110
|
|
|
111
111
|
statementVerifiedAboutDefining = definingVerified; ///
|
|
112
112
|
|
|
113
113
|
if (statementVerifiedAboutDefining) {
|
|
114
|
-
|
|
114
|
+
localContext.debug(`...verified the '${statementString}' statement about defining.`, statementNode);
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
return statementVerifiedAboutDefining;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
function verifyStatementAsTypeAssertion(statementNode, assignments, derived,
|
|
121
|
+
function verifyStatementAsTypeAssertion(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
122
122
|
let statementVerifiedAsTypeAssertion = false;
|
|
123
123
|
|
|
124
124
|
const typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
125
125
|
|
|
126
126
|
if (typeAssertionNode !== null) {
|
|
127
|
-
const statementString =
|
|
127
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
128
128
|
|
|
129
|
-
|
|
129
|
+
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`, statementNode);
|
|
130
130
|
|
|
131
|
-
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived,
|
|
131
|
+
const typeAssertionVerified = verifyTypeAssertion(typeAssertionNode, assignments, derived, localContext, verifyAhead);
|
|
132
132
|
|
|
133
133
|
statementVerifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
134
134
|
|
|
135
135
|
if (statementVerifiedAsTypeAssertion) {
|
|
136
|
-
|
|
136
|
+
localContext.debug(`...verified the '${statementString}' statement as a type assertion.`, statementNode);
|
|
137
137
|
}
|
|
138
138
|
}
|
|
139
139
|
|
|
140
140
|
return statementVerifiedAsTypeAssertion;
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
function verifyStatementAboutContainment(statementNode, assignments, derived,
|
|
143
|
+
function verifyStatementAboutContainment(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
144
144
|
let statementVerifiedAboutContainment = false;
|
|
145
145
|
|
|
146
146
|
const containmentNode = containmentNodeQuery(statementNode);
|
|
147
147
|
|
|
148
148
|
if (containmentNode !== null) {
|
|
149
|
-
const statementString =
|
|
149
|
+
const statementString = localContext.nodeAsString(statementNode);
|
|
150
150
|
|
|
151
|
-
|
|
151
|
+
localContext.trace(`Verifying the '${statementString}' statement about containment...`, statementNode);
|
|
152
152
|
|
|
153
153
|
const argumentNode = argumentNodeQuery(statementNode),
|
|
154
154
|
metaArgumentNode = metaArgumentNodeQuery(statementNode),
|
|
155
|
-
containmentVerified = verifyContainment(argumentNode, containmentNode, metaArgumentNode,
|
|
155
|
+
containmentVerified = verifyContainment(argumentNode, containmentNode, metaArgumentNode, localContext);
|
|
156
156
|
|
|
157
157
|
if (containmentVerified) {
|
|
158
158
|
statementNode = statementNodeQuery(metaArgumentNode); ///
|
|
@@ -165,7 +165,7 @@ function verifyStatementAboutContainment(statementNode, assignments, derived, co
|
|
|
165
165
|
const statementVerified = verifyStatementFunctions.some((verifyStatementFunction) => {
|
|
166
166
|
const derived = false,
|
|
167
167
|
assignments = [],
|
|
168
|
-
statementVerified = verifyStatementFunction(statementNode, assignments, derived,
|
|
168
|
+
statementVerified = verifyStatementFunction(statementNode, assignments, derived, localContext, verifyAhead);
|
|
169
169
|
|
|
170
170
|
if (statementVerified) {
|
|
171
171
|
return true;
|
|
@@ -176,36 +176,36 @@ function verifyStatementAboutContainment(statementNode, assignments, derived, co
|
|
|
176
176
|
}
|
|
177
177
|
|
|
178
178
|
if (statementVerifiedAboutContainment) {
|
|
179
|
-
|
|
179
|
+
localContext.debug(`...verified the '${statementString}' statement about containment.`, statementNode);
|
|
180
180
|
}
|
|
181
181
|
}
|
|
182
182
|
|
|
183
183
|
return statementVerifiedAboutContainment;
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
function verifyStatementAgainstCombinator(statementNode, combinator,
|
|
186
|
+
function verifyStatementAgainstCombinator(statementNode, combinator, localContext, verifyAhead) {
|
|
187
187
|
let statementVerifiedAgainstCombinator;
|
|
188
188
|
|
|
189
|
-
const statementString =
|
|
189
|
+
const statementString = localContext.nodeAsString(statementNode),
|
|
190
190
|
combinatorString = combinator.getString();
|
|
191
191
|
|
|
192
|
-
|
|
192
|
+
localContext.trace(`Verifying the '${statementString}' statement against the '${combinatorString}' combinator...`, statementNode);
|
|
193
193
|
|
|
194
194
|
const combinatorStatementNode = combinator.getStatementNode(),
|
|
195
195
|
nonTerminalNodeA = statementNode, ///
|
|
196
196
|
nonTerminalNodeB = combinatorStatementNode, ///
|
|
197
|
-
nonTerminalNodeVerified = statementAgainstCombinatorNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB,
|
|
197
|
+
nonTerminalNodeVerified = statementAgainstCombinatorNodesVerifier.verifyNonTerminalNode(nonTerminalNodeA, nonTerminalNodeB, localContext, verifyAhead);
|
|
198
198
|
|
|
199
199
|
statementVerifiedAgainstCombinator = nonTerminalNodeVerified; ///
|
|
200
200
|
|
|
201
201
|
if (statementVerifiedAgainstCombinator) {
|
|
202
|
-
|
|
202
|
+
localContext.debug(`...verified the '${statementString}' statement against the '${combinatorString}' combinator.`, statementNode);
|
|
203
203
|
}
|
|
204
204
|
|
|
205
205
|
return statementVerifiedAgainstCombinator;
|
|
206
206
|
}
|
|
207
207
|
|
|
208
|
-
function verifyStatementAgainstCombinators(statementNode, assignments, derived,
|
|
208
|
+
function verifyStatementAgainstCombinators(statementNode, assignments, derived, localContext, verifyAhead) {
|
|
209
209
|
let statementVerifiedAgainstCombinators = false;
|
|
210
210
|
|
|
211
211
|
const equalityNode = equalityNodeQuery(statementNode),
|
|
@@ -214,7 +214,7 @@ function verifyStatementAgainstCombinators(statementNode, assignments, derived,
|
|
|
214
214
|
typeAssertionNode = typeAssertionNodeQuery(statementNode);
|
|
215
215
|
|
|
216
216
|
if ((equalityNode === null) && (definingNode === null) && (containmentNode === null) && (typeAssertionNode === null)) {
|
|
217
|
-
let combinators =
|
|
217
|
+
let combinators = localContext.getCombinators();
|
|
218
218
|
|
|
219
219
|
combinators = [ ///
|
|
220
220
|
bracketedCombinator,
|
|
@@ -222,7 +222,7 @@ function verifyStatementAgainstCombinators(statementNode, assignments, derived,
|
|
|
222
222
|
];
|
|
223
223
|
|
|
224
224
|
statementVerifiedAgainstCombinators = combinators.some((combinator) => {
|
|
225
|
-
const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator,
|
|
225
|
+
const statementVerifiedAgainstCombinator = verifyStatementAgainstCombinator(statementNode, combinator, localContext, verifyAhead);
|
|
226
226
|
|
|
227
227
|
if (statementVerifiedAgainstCombinator) {
|
|
228
228
|
return true;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Combinator from "../combinator";
|
|
4
|
+
import LocalContext from "../context/local";
|
|
4
5
|
import statementAsCombinatorNodeVerifier from "../verifier/node/statementAsCombinator";
|
|
5
6
|
|
|
6
7
|
export default function verifyStatementAsCombinator(statementNode, fileContext) {
|
package/src/verify/term.js
CHANGED
|
@@ -11,12 +11,12 @@ import { nodeQuery } from "../utilities/query";
|
|
|
11
11
|
const termNodeQuery = nodeQuery("/term/argument/term"),
|
|
12
12
|
variableNodeQuery = nodeQuery("/term/variable!");
|
|
13
13
|
|
|
14
|
-
function verifyTerm(termNode, terms,
|
|
14
|
+
function verifyTerm(termNode, terms, localContext, verifyAhead) {
|
|
15
15
|
let termVerified;
|
|
16
16
|
|
|
17
|
-
const termString =
|
|
17
|
+
const termString = localContext.nodeAsString(termNode);
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
localContext.trace(`Verifying the '${termString}' term...`, termNode);
|
|
20
20
|
|
|
21
21
|
const verifyTermFunctions = [
|
|
22
22
|
verifyTermAsVariable,
|
|
@@ -25,7 +25,7 @@ function verifyTerm(termNode, terms, context, verifyAhead) {
|
|
|
25
25
|
];
|
|
26
26
|
|
|
27
27
|
termVerified = verifyTermFunctions.some((verifyTermFunction) => {
|
|
28
|
-
const termVerified = verifyTermFunction(termNode, terms,
|
|
28
|
+
const termVerified = verifyTermFunction(termNode, terms, localContext, verifyAhead);
|
|
29
29
|
|
|
30
30
|
if (termVerified) {
|
|
31
31
|
return true;
|
|
@@ -33,26 +33,26 @@ function verifyTerm(termNode, terms, context, verifyAhead) {
|
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
if (termVerified) {
|
|
36
|
-
|
|
36
|
+
localContext.debug(`...verified the '${termString}' term.`, termNode);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
return termVerified;
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
export function verifyStandaloneTerm(termNode,
|
|
42
|
+
export function verifyStandaloneTerm(termNode, localContext, verifyAhead) {
|
|
43
43
|
let standaloneTermVerified;
|
|
44
44
|
|
|
45
|
-
const termString =
|
|
45
|
+
const termString = localContext.nodeAsString(termNode);
|
|
46
46
|
|
|
47
|
-
|
|
47
|
+
localContext.trace(`Verifying the '${termString}' standalone term...`, termNode);
|
|
48
48
|
|
|
49
49
|
const terms = [],
|
|
50
|
-
termVerified = verifyTerm(termNode, terms,
|
|
50
|
+
termVerified = verifyTerm(termNode, terms, localContext, verifyAhead);
|
|
51
51
|
|
|
52
52
|
standaloneTermVerified = termVerified; ///
|
|
53
53
|
|
|
54
54
|
if (standaloneTermVerified) {
|
|
55
|
-
|
|
55
|
+
localContext.debug(`...verified the '${termString}' standalone term.`, termNode);
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
return standaloneTermVerified;
|
|
@@ -64,18 +64,18 @@ Object.assign(termAgainstConstructorNodesVerifier, {
|
|
|
64
64
|
|
|
65
65
|
export default verifyTerm;
|
|
66
66
|
|
|
67
|
-
function verifyTermAsVariable(termNode, terms,
|
|
67
|
+
function verifyTermAsVariable(termNode, terms, localContext, verifyAhead) {
|
|
68
68
|
let termVerifiedAsVariable = false;
|
|
69
69
|
|
|
70
70
|
const variableNode = variableNodeQuery(termNode);
|
|
71
71
|
|
|
72
72
|
if (variableNode !== null) {
|
|
73
|
-
const termString =
|
|
73
|
+
const termString = localContext.nodeAsString(termNode);
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
localContext.trace(`Verifying the '${termString}' term as a variable...`, termNode);
|
|
76
76
|
|
|
77
77
|
const variables = [],
|
|
78
|
-
givenVariableVerified = verifyGivenVariable(variableNode, variables,
|
|
78
|
+
givenVariableVerified = verifyGivenVariable(variableNode, variables, localContext, () => {
|
|
79
79
|
let verifiedAhead;
|
|
80
80
|
|
|
81
81
|
const firstVariable = first(variables),
|
|
@@ -97,25 +97,25 @@ function verifyTermAsVariable(termNode, terms, context, verifyAhead) {
|
|
|
97
97
|
termVerifiedAsVariable = givenVariableVerified; ///
|
|
98
98
|
|
|
99
99
|
if (termVerifiedAsVariable) {
|
|
100
|
-
|
|
100
|
+
localContext.debug(`...verified the '${termString}' term as a variable.`, termNode);
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
|
|
104
104
|
return termVerifiedAsVariable;
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
-
function verifyTermAgainstConstructor(termNode, terms, constructor,
|
|
107
|
+
function verifyTermAgainstConstructor(termNode, terms, constructor, localContext, verifyAhead) {
|
|
108
108
|
let termVerifiedAgainstConstructor;
|
|
109
109
|
|
|
110
|
-
const termString =
|
|
110
|
+
const termString = localContext.nodeAsString(termNode),
|
|
111
111
|
constructorString = constructor.getString();
|
|
112
112
|
|
|
113
|
-
|
|
113
|
+
localContext.trace(`Verifying the '${termString}' term against the '${constructorString}' constructor...`, termNode);
|
|
114
114
|
|
|
115
115
|
const constructorTermNode = constructor.getTermNode(),
|
|
116
116
|
nonTerminalNNdeA = termNode, ///
|
|
117
117
|
nonTerminalNodeB = constructorTermNode, ///
|
|
118
|
-
nodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNNdeA, nonTerminalNodeB,
|
|
118
|
+
nodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNNdeA, nonTerminalNodeB, localContext, () => {
|
|
119
119
|
let verifiedAhead;
|
|
120
120
|
|
|
121
121
|
const type = constructor.getType(),
|
|
@@ -135,22 +135,22 @@ function verifyTermAgainstConstructor(termNode, terms, constructor, context, ver
|
|
|
135
135
|
termVerifiedAgainstConstructor = nodeVerified; ///
|
|
136
136
|
|
|
137
137
|
if (termVerifiedAgainstConstructor) {
|
|
138
|
-
|
|
138
|
+
localContext.debug(`...verified the '${termString}' term against the '${constructorString}' constructor.`, termNode);
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
return termVerifiedAgainstConstructor;
|
|
142
142
|
}
|
|
143
143
|
|
|
144
|
-
function verifyTermAgainstConstructors(termNode, terms,
|
|
144
|
+
function verifyTermAgainstConstructors(termNode, terms, localContext, verifyAhead) {
|
|
145
145
|
let termVerifiedAgainstConstructors = false;
|
|
146
146
|
|
|
147
147
|
const variableNode = variableNodeQuery(termNode);
|
|
148
148
|
|
|
149
149
|
if (variableNode === null) {
|
|
150
|
-
const constructors =
|
|
150
|
+
const constructors = localContext.getConstructors();
|
|
151
151
|
|
|
152
152
|
termVerifiedAgainstConstructors = constructors.some((constructor) => {
|
|
153
|
-
const termVerifiedAgainstConstructor = verifyTermAgainstConstructor(termNode, terms, constructor,
|
|
153
|
+
const termVerifiedAgainstConstructor = verifyTermAgainstConstructor(termNode, terms, constructor, localContext, verifyAhead);
|
|
154
154
|
|
|
155
155
|
if (termVerifiedAgainstConstructor) {
|
|
156
156
|
return true;
|
|
@@ -161,18 +161,18 @@ function verifyTermAgainstConstructors(termNode, terms, context, verifyAhead) {
|
|
|
161
161
|
return termVerifiedAgainstConstructors;
|
|
162
162
|
}
|
|
163
163
|
|
|
164
|
-
function verifyTermAgainstBracketedConstructor(termNode, terms,
|
|
164
|
+
function verifyTermAgainstBracketedConstructor(termNode, terms, localContext, verifyAhead) {
|
|
165
165
|
let termVerifiedAgainstBracketedConstructor;
|
|
166
166
|
|
|
167
|
-
const termString =
|
|
167
|
+
const termString = localContext.nodeAsString(termNode),
|
|
168
168
|
bracketedConstructorString = bracketedConstructor.getString();
|
|
169
169
|
|
|
170
|
-
|
|
170
|
+
localContext.trace(`Verifying the '${termString}' term against the '${bracketedConstructorString}' bracketed constructor...`, termNode);
|
|
171
171
|
|
|
172
172
|
const bracketedConstructorTermNode = bracketedConstructor.getTermNode(),
|
|
173
173
|
nonTerminalNNdeA = termNode, ///
|
|
174
174
|
nonTerminalNodeB = bracketedConstructorTermNode, ///
|
|
175
|
-
nodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNNdeA, nonTerminalNodeB,
|
|
175
|
+
nodeVerified = termAgainstConstructorNodesVerifier.verifyNonTerminalNode(nonTerminalNNdeA, nonTerminalNodeB, localContext, () => {
|
|
176
176
|
let verifiedAhead;
|
|
177
177
|
|
|
178
178
|
const bracketedTermNode = termNode; ///
|
|
@@ -184,7 +184,7 @@ function verifyTermAgainstBracketedConstructor(termNode, terms, context, verifyA
|
|
|
184
184
|
} else {
|
|
185
185
|
let type;
|
|
186
186
|
|
|
187
|
-
verifyTerm(termNode, terms,
|
|
187
|
+
verifyTerm(termNode, terms, localContext, () => {
|
|
188
188
|
let verifiedAhead;
|
|
189
189
|
|
|
190
190
|
const firstTerm = first(terms),
|
|
@@ -218,7 +218,7 @@ function verifyTermAgainstBracketedConstructor(termNode, terms, context, verifyA
|
|
|
218
218
|
termVerifiedAgainstBracketedConstructor = nodeVerified; ///
|
|
219
219
|
|
|
220
220
|
if (termVerifiedAgainstBracketedConstructor) {
|
|
221
|
-
|
|
221
|
+
localContext.debug(`...verified the '${termString}' term against the '${bracketedConstructorString}' constructor.`, termNode);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
224
|
return termVerifiedAgainstBracketedConstructor;
|
|
@@ -3,18 +3,18 @@
|
|
|
3
3
|
import verifyTerm from "../verify/term";
|
|
4
4
|
import verifyGivenType from "../verify/givenType";
|
|
5
5
|
|
|
6
|
-
export default function verifyTermAndGivenType(termNode, typeNode, terms, types,
|
|
6
|
+
export default function verifyTermAndGivenType(termNode, typeNode, terms, types, localContext, verifyAhead) {
|
|
7
7
|
let termAndGivenTypeVerified;
|
|
8
8
|
|
|
9
|
-
const termString =
|
|
10
|
-
typeString =
|
|
9
|
+
const termString = localContext.nodeAsString(termNode),
|
|
10
|
+
typeString = localContext.nodeAsString(typeNode);
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
localContext.trace(`Verifying the '${termString}' term and the given '${typeString}' type...`, termNode);
|
|
13
13
|
|
|
14
|
-
const termVerified = verifyTerm(termNode, terms,
|
|
14
|
+
const termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
15
15
|
let verifiedAhead;
|
|
16
16
|
|
|
17
|
-
const givenTypeVerified = verifyGivenType(typeNode, types,
|
|
17
|
+
const givenTypeVerified = verifyGivenType(typeNode, types, localContext, () => {
|
|
18
18
|
let verifiedAhead;
|
|
19
19
|
|
|
20
20
|
verifiedAhead = verifyAhead();
|
|
@@ -30,7 +30,7 @@ export default function verifyTermAndGivenType(termNode, typeNode, terms, types,
|
|
|
30
30
|
termAndGivenTypeVerified = termVerified; ///
|
|
31
31
|
|
|
32
32
|
if (termAndGivenTypeVerified) {
|
|
33
|
-
|
|
33
|
+
localContext.debug(`...verified the '${termString}' term and the given '${typeString}' type.`, termNode);
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
return termAndGivenTypeVerified
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Constructor from "../constructor";
|
|
4
|
+
import LocalContext from "../context/local";
|
|
4
5
|
import termAsConstructorNodeVerifier from "../verifier/node/termAsConstructor";
|
|
5
6
|
|
|
6
7
|
import { typeNameFromTypeNode } from "../utilities/query";
|
|
@@ -14,7 +15,8 @@ export default function verifyTermAsConstructor(termNode, typeNode, fileContext)
|
|
|
14
15
|
|
|
15
16
|
const nonTerminalNode = termNode, ///
|
|
16
17
|
childNodes = nonTerminalNode.getChildNodes(),
|
|
17
|
-
|
|
18
|
+
localContext = LocalContext.fromFileContext(fileContext),
|
|
19
|
+
childNodesVerified = termAsConstructorNodeVerifier.verifyChildNodes(childNodes, localContext, () => {
|
|
18
20
|
const verifiedAhead = true;
|
|
19
21
|
|
|
20
22
|
return verifiedAhead;
|
package/src/verify/terms.js
CHANGED
|
@@ -4,20 +4,20 @@ import verifyTerm from "../verify/term";
|
|
|
4
4
|
|
|
5
5
|
import { first, second } from "../utilities/array";
|
|
6
6
|
|
|
7
|
-
export default function verifyTerms(termNodes, terms,
|
|
7
|
+
export default function verifyTerms(termNodes, terms, localContext, verifyAhead) {
|
|
8
8
|
let termsVerified;
|
|
9
9
|
|
|
10
10
|
const firstTermNode = first(termNodes),
|
|
11
11
|
secondTermNode = second(termNodes),
|
|
12
|
-
firstTermString =
|
|
13
|
-
secondTermString =
|
|
12
|
+
firstTermString = localContext.nodeAsString(firstTermNode),
|
|
13
|
+
secondTermString = localContext.nodeAsString(secondTermNode);
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
localContext.trace(`Verifying the '${firstTermString}' and '${secondTermString}' terms...`, firstTermNode);
|
|
16
16
|
|
|
17
|
-
const firstTermVerified = verifyTerm(firstTermNode, terms,
|
|
17
|
+
const firstTermVerified = verifyTerm(firstTermNode, terms, localContext, () => {
|
|
18
18
|
let verifiedAhead;
|
|
19
19
|
|
|
20
|
-
const secondTermVerified = verifyTerm(secondTermNode, terms,
|
|
20
|
+
const secondTermVerified = verifyTerm(secondTermNode, terms, localContext, () => {
|
|
21
21
|
let verifiedAhead;
|
|
22
22
|
|
|
23
23
|
verifiedAhead = verifyAhead();
|
|
@@ -33,7 +33,7 @@ export default function verifyTerms(termNodes, terms, context, verifyAhead) {
|
|
|
33
33
|
termsVerified = firstTermVerified; ///
|
|
34
34
|
|
|
35
35
|
if (termsVerified) {
|
|
36
|
-
|
|
36
|
+
localContext.debug(`...verified the '${firstTermString}' and '${secondTermString}' terms.`, firstTermNode);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
return termsVerified
|
package/src/verify/type.js
CHANGED
|
@@ -47,18 +47,18 @@ export default function verifyType(typeNode, superTypeNode, fileContext) {
|
|
|
47
47
|
return typeVerified;
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export function verifyStandaloneType(typeNode,
|
|
50
|
+
export function verifyStandaloneType(typeNode, fileContext, verifyAhead) {
|
|
51
51
|
let standaloneTypeVerified = false;
|
|
52
52
|
|
|
53
|
-
const typeString =
|
|
53
|
+
const typeString = fileContext.nodeAsString(typeNode);
|
|
54
54
|
|
|
55
|
-
|
|
55
|
+
fileContext.trace(`Verifying the '${typeString}' standalone type...`, typeNode);
|
|
56
56
|
|
|
57
57
|
const typeName = typeNameFromTypeNode(typeNode),
|
|
58
|
-
typePresent =
|
|
58
|
+
typePresent = fileContext.isTypePresentByTypeName(typeName);
|
|
59
59
|
|
|
60
60
|
if (!typePresent) {
|
|
61
|
-
|
|
61
|
+
fileContext.debug(`The type '${typeName}' is not present.`, typeNode);
|
|
62
62
|
} else {
|
|
63
63
|
const verifiedAhead = verifyAhead();
|
|
64
64
|
|
|
@@ -66,7 +66,7 @@ export function verifyStandaloneType(typeNode, context, verifyAhead) {
|
|
|
66
66
|
}
|
|
67
67
|
|
|
68
68
|
if (standaloneTypeVerified) {
|
|
69
|
-
|
|
69
|
+
fileContext.debug(`...verified the '${typeString}' standalone type.`, typeNode);
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
return standaloneTypeVerified;
|