occam-verify-cli 0.0.1032 → 0.0.1033
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/argument.js +2 -3
- package/lib/assertion/type.js +180 -0
- package/lib/context/file.js +32 -13
- package/lib/context/local.js +15 -15
- package/lib/context/release.js +9 -24
- package/lib/mixins/statement/verify.js +3 -3
- package/lib/term.js +19 -14
- package/lib/unifier/statementWithCombinator.js +2 -2
- package/lib/variable.js +27 -13
- package/package.json +1 -1
- package/src/argument.js +1 -3
- package/src/assertion/type.js +176 -0
- package/src/context/file.js +48 -14
- package/src/context/local.js +17 -7
- package/src/context/release.js +11 -35
- package/src/mixins/statement/verify.js +3 -2
- package/src/term.js +20 -15
- package/src/unifier/statementWithCombinator.js +1 -1
- package/src/variable.js +31 -18
- package/lib/verify/assertion/type.js +0 -99
- package/src/verify/assertion/type.js +0 -139
package/src/context/release.js
CHANGED
|
@@ -438,9 +438,9 @@ export default class ReleaseContext {
|
|
|
438
438
|
|
|
439
439
|
this.parser = nominalParser; ///
|
|
440
440
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
441
|
+
released ?
|
|
442
|
+
fileContextsFromJSONAndReleaseContext(this.json, this.fileContexts, releaseContext) :
|
|
443
|
+
fileContextsFromEntriesAndReleaseContext(this.entries, this.fileContexts, releaseContext);
|
|
444
444
|
|
|
445
445
|
this.initialised = true;
|
|
446
446
|
}
|
|
@@ -487,31 +487,20 @@ export default class ReleaseContext {
|
|
|
487
487
|
}
|
|
488
488
|
}
|
|
489
489
|
|
|
490
|
-
function
|
|
491
|
-
const
|
|
490
|
+
function fileContextsFromJSONAndReleaseContext(json, fileContexts, releaseContext) {
|
|
491
|
+
const fileContextsJSON = json; ///
|
|
492
492
|
|
|
493
|
-
|
|
494
|
-
const
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
if (filePathNominalFilePath) {
|
|
498
|
-
const fileContext = FileContext.fromFileAndReleaseContext(file, releaseContext),
|
|
499
|
-
filePath = fileContext.getFilePath();
|
|
500
|
-
|
|
501
|
-
fileContexts.push(fileContext);
|
|
493
|
+
fileContextsJSON.forEach((fileContextJSON) => {
|
|
494
|
+
const json = fileContextJSON,
|
|
495
|
+
fileContext = FileContext.fromJSONAndReleaseContext(json, releaseContext);
|
|
502
496
|
|
|
503
|
-
|
|
497
|
+
fileContext.initialise(fileContextJSON);
|
|
504
498
|
|
|
505
|
-
|
|
506
|
-
}
|
|
499
|
+
fileContexts.push(fileContext);
|
|
507
500
|
});
|
|
508
|
-
|
|
509
|
-
return fileContexts;
|
|
510
501
|
}
|
|
511
502
|
|
|
512
|
-
function fileContextsFromEntriesAndReleaseContext(entries, releaseContext) {
|
|
513
|
-
const fileContexts = [];
|
|
514
|
-
|
|
503
|
+
function fileContextsFromEntriesAndReleaseContext(entries, fileContexts, releaseContext) {
|
|
515
504
|
entries.forEachFile((file) => {
|
|
516
505
|
const filePath = file.getPath(),
|
|
517
506
|
filePathNominalFilePath = isFilePathNominalFilePath(filePath);
|
|
@@ -526,19 +515,6 @@ function fileContextsFromEntriesAndReleaseContext(entries, releaseContext) {
|
|
|
526
515
|
return fileContexts;
|
|
527
516
|
}
|
|
528
517
|
|
|
529
|
-
function findFileContextJSON(json, filePath) {
|
|
530
|
-
const fileContextsJSON = json, ///
|
|
531
|
-
fileContextJSON = fileContextsJSON.find((fileContextJSON) => {
|
|
532
|
-
const { filePath: fileContextFilePath } = fileContextJSON;
|
|
533
|
-
|
|
534
|
-
if (fileContextFilePath === filePath) {
|
|
535
|
-
return true;
|
|
536
|
-
}
|
|
537
|
-
});
|
|
538
|
-
|
|
539
|
-
return fileContextJSON;
|
|
540
|
-
}
|
|
541
|
-
|
|
542
518
|
function verifyFileContexts(fileContexts, verifiedFileContexts) {
|
|
543
519
|
let fileContextsVerified;
|
|
544
520
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import Equality from "../../equality";
|
|
4
|
+
import TypeAssertion from "../../assertion/type";
|
|
4
5
|
|
|
5
6
|
import verifyFrame from "../../verify/frame";
|
|
6
7
|
import verifyJudgement from "../../verify/judgement";
|
|
7
8
|
import verifyDeclaration from "../../verify/declaration";
|
|
8
|
-
import verifyTypeAssertion from "../../verify/assertion/type";
|
|
9
9
|
import metavariableUnifier from "../../unifier/metavariable";
|
|
10
10
|
import verifyDefinedAssertion from "../../verify/assertion/defined";
|
|
11
11
|
import verifySubproofAssertion from "../../verify/assertion/subproof";
|
|
@@ -151,7 +151,8 @@ function verifyAsTypeAssertion(statement, assignments, stated, localContext) {
|
|
|
151
151
|
|
|
152
152
|
localContext.trace(`Verifying the '${statementString}' statement as a type assertion...`);
|
|
153
153
|
|
|
154
|
-
const
|
|
154
|
+
const typeAssertion = TypeAssertion.fromTypeAssertionNode(typeAssertionNode, localContext),
|
|
155
|
+
typeAssertionVerified = typeAssertion.verify(assignments, stated, localContext);
|
|
155
156
|
|
|
156
157
|
verifiedAsTypeAssertion = typeAssertionVerified; ///
|
|
157
158
|
|
package/src/term.js
CHANGED
|
@@ -8,6 +8,7 @@ import termAsConstructorVerifier from "./verifier/termAsConstructor";
|
|
|
8
8
|
import { filter } from "./utilities/array";
|
|
9
9
|
import { nodesQuery } from "./utilities/query"
|
|
10
10
|
import { termNodeFromTermString } from "./utilities/node";
|
|
11
|
+
import {objectType} from "./type";
|
|
11
12
|
|
|
12
13
|
const variableNodesQuery = nodesQuery("//variable");
|
|
13
14
|
|
|
@@ -136,22 +137,26 @@ class Term {
|
|
|
136
137
|
verifyType(fileContext) {
|
|
137
138
|
let typeVerified;
|
|
138
139
|
|
|
139
|
-
|
|
140
|
+
if (this.type === objectType) {
|
|
141
|
+
typeVerified = true;
|
|
142
|
+
} else {
|
|
143
|
+
const typeName = this.type.getName();
|
|
140
144
|
|
|
141
|
-
|
|
145
|
+
fileContext.trace(`Verifying the '${typeName}' type...`);
|
|
142
146
|
|
|
143
|
-
|
|
147
|
+
const type = fileContext.findTypeByTypeName(typeName);
|
|
144
148
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
+
if (type === null) {
|
|
150
|
+
fileContext.debug(`The '${typeName}' type is missing.`);
|
|
151
|
+
} else {
|
|
152
|
+
this.type = type; ///
|
|
149
153
|
|
|
150
|
-
|
|
151
|
-
|
|
154
|
+
typeVerified = true;
|
|
155
|
+
}
|
|
152
156
|
|
|
153
|
-
|
|
154
|
-
|
|
157
|
+
if (typeVerified) {
|
|
158
|
+
fileContext.debug(`...verified the '${typeName}' type.`);
|
|
159
|
+
}
|
|
155
160
|
}
|
|
156
161
|
|
|
157
162
|
return typeVerified;
|
|
@@ -160,10 +165,10 @@ class Term {
|
|
|
160
165
|
verifyGivenType(type, localContext) {
|
|
161
166
|
let verifiedGivenType;
|
|
162
167
|
|
|
163
|
-
const
|
|
164
|
-
|
|
168
|
+
const typeName = type.getName(),
|
|
169
|
+
termString = this.getString();
|
|
165
170
|
|
|
166
|
-
localContext.trace(`Verifying the '${termString}' term given the '${
|
|
171
|
+
localContext.trace(`Verifying the '${termString}' term given the '${typeName}' type...`);
|
|
167
172
|
|
|
168
173
|
const verified = this.verify(localContext, () => {
|
|
169
174
|
let verifiedAhead;
|
|
@@ -180,7 +185,7 @@ class Term {
|
|
|
180
185
|
verifiedGivenType = verified; ///
|
|
181
186
|
|
|
182
187
|
if (verifiedGivenType) {
|
|
183
|
-
localContext.debug(`...verified the '${termString}' term given the '${
|
|
188
|
+
localContext.debug(`...verified the '${termString}' term given the '${typeName}' type.`);
|
|
184
189
|
}
|
|
185
190
|
|
|
186
191
|
return verifiedGivenType;
|
|
@@ -55,7 +55,7 @@ class StatementWithCombinatorUnifier extends Unifier {
|
|
|
55
55
|
metaTypeNode = metaTypeNodeB, ///
|
|
56
56
|
frameNode = frameNodeA, ///
|
|
57
57
|
metaType = MetaType.fromMetaTypeNode(metaTypeNode, localContext),
|
|
58
|
-
frame = Frame.
|
|
58
|
+
frame = Frame.fromFrameNode(frameNode, localContext),
|
|
59
59
|
frameVerifiedGivenType = frame.verifyGivenMetaType(metaType, localContext);
|
|
60
60
|
|
|
61
61
|
unified = frameVerifiedGivenType;
|
package/src/variable.js
CHANGED
|
@@ -4,9 +4,9 @@ import shim from "./shim";
|
|
|
4
4
|
import LocalContext from "./context/local";
|
|
5
5
|
|
|
6
6
|
import { nodeQuery } from "./utilities/query";
|
|
7
|
-
import { objectType } from "./type";
|
|
8
7
|
import { variableNameFromVariableNode} from "./utilities/name";
|
|
9
8
|
import { variableNodeFromVariableString } from "./utilities/node";
|
|
9
|
+
import {objectType} from "./type";
|
|
10
10
|
|
|
11
11
|
const typeNodeQuery = nodeQuery("/variableDeclaration/type"),
|
|
12
12
|
variableNodeQuery = nodeQuery("/variableDeclaration/variable");
|
|
@@ -35,6 +35,10 @@ export default class Variable {
|
|
|
35
35
|
return this.type;
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
setType(type) {
|
|
39
|
+
this.type = type;
|
|
40
|
+
}
|
|
41
|
+
|
|
38
42
|
matchNode(node) {
|
|
39
43
|
const nodeMatches = this.node.match(node);
|
|
40
44
|
|
|
@@ -78,22 +82,26 @@ export default class Variable {
|
|
|
78
82
|
verifyType(fileContext) {
|
|
79
83
|
let typeVerified;
|
|
80
84
|
|
|
81
|
-
|
|
85
|
+
if (this.type === objectType) {
|
|
86
|
+
typeVerified = true;
|
|
87
|
+
} else {
|
|
88
|
+
const typeName = this.type.getName();
|
|
82
89
|
|
|
83
|
-
|
|
90
|
+
fileContext.trace(`Verifying the '${typeName}' type...`);
|
|
84
91
|
|
|
85
|
-
|
|
92
|
+
const type = fileContext.findTypeByTypeName(typeName);
|
|
86
93
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
94
|
+
if (type === null) {
|
|
95
|
+
fileContext.debug(`The '${typeName}' type is missing.`);
|
|
96
|
+
} else {
|
|
97
|
+
this.type = type; ///
|
|
91
98
|
|
|
92
|
-
|
|
93
|
-
|
|
99
|
+
typeVerified = true;
|
|
100
|
+
}
|
|
94
101
|
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
if (typeVerified) {
|
|
103
|
+
fileContext.debug(`...verified the '${typeName}' type.`);
|
|
104
|
+
}
|
|
97
105
|
}
|
|
98
106
|
|
|
99
107
|
return typeVerified;
|
|
@@ -153,12 +161,17 @@ export default class Variable {
|
|
|
153
161
|
}
|
|
154
162
|
|
|
155
163
|
static fromVariableNode(variableNode, localContext) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
164
|
+
let variable = null;
|
|
165
|
+
|
|
166
|
+
if (variableNode !== null) {
|
|
167
|
+
const node = variableNode, ///
|
|
168
|
+
variableName = variableNameFromVariableNode(variableNode),
|
|
169
|
+
string = localContext.nodeAsString(node),
|
|
170
|
+
name = variableName, ///
|
|
171
|
+
type = null;
|
|
172
|
+
|
|
173
|
+
variable = new Variable(string, node, name, type);
|
|
174
|
+
}
|
|
162
175
|
|
|
163
176
|
return variable;
|
|
164
177
|
}
|
|
@@ -1,99 +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 verifyTypeAssertion;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _variable = /*#__PURE__*/ _interop_require_default(require("../../variable"));
|
|
12
|
-
var _variable1 = /*#__PURE__*/ _interop_require_default(require("../../assignment/variable"));
|
|
13
|
-
var _array = require("../../utilities/array");
|
|
14
|
-
var _query = require("../../utilities/query");
|
|
15
|
-
function _interop_require_default(obj) {
|
|
16
|
-
return obj && obj.__esModule ? obj : {
|
|
17
|
-
default: obj
|
|
18
|
-
};
|
|
19
|
-
}
|
|
20
|
-
var termNodeQuery = (0, _query.nodeQuery)("/typeAssertion/term!"), typeNodeQuery = (0, _query.nodeQuery)("/typeAssertion/type!"), variableNodeQuery = (0, _query.nodeQuery)("/term/variable!");
|
|
21
|
-
var verifyTypeAssertionFunctions = [
|
|
22
|
-
verifyDerivedTypeAssertion,
|
|
23
|
-
verifyStatedTypeAssertion
|
|
24
|
-
];
|
|
25
|
-
function verifyTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
26
|
-
var typeAssertionVerified;
|
|
27
|
-
var typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
28
|
-
localContext.trace("Verifying the '".concat(typeAssertionString, "' type assertion..."), typeAssertionNode);
|
|
29
|
-
typeAssertionVerified = verifyTypeAssertionFunctions.some(function(verifyTypeAssertionFunction) {
|
|
30
|
-
var typeAssertionVerified = verifyTypeAssertionFunction(typeAssertionNode, assignments, stated, localContext);
|
|
31
|
-
if (typeAssertionVerified) {
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
});
|
|
35
|
-
if (typeAssertionVerified) {
|
|
36
|
-
localContext.debug("...verified the '".concat(typeAssertionString, "' type assertion."), typeAssertionNode);
|
|
37
|
-
}
|
|
38
|
-
return typeAssertionVerified;
|
|
39
|
-
}
|
|
40
|
-
function verifyDerivedTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
41
|
-
var derivedTypeAssertionVerified = false;
|
|
42
|
-
if (!stated) {
|
|
43
|
-
var typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
44
|
-
localContext.trace("Verifying the '".concat(typeAssertionString, "' derived type assertion..."), typeAssertionNode);
|
|
45
|
-
var typeNode = typeNodeQuery(typeAssertionNode), type = localContext.findTypeByTypeNode(typeNode);
|
|
46
|
-
if (type === null) {
|
|
47
|
-
var typeString = localContext.nodeAsString(typeNode);
|
|
48
|
-
localContext.debug("The '".concat(typeString, "' type is not present."), typeNode);
|
|
49
|
-
}
|
|
50
|
-
var terms = [], termNode = termNodeQuery(typeAssertionNode), termVerified = verifyTerm(termNode, terms, localContext, function() {
|
|
51
|
-
var verifiedAhead = false;
|
|
52
|
-
var firstTerm = (0, _array.first)(terms), term = firstTerm, termType = localContext.getTermType(term), typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
|
|
53
|
-
if (typeEqualToOrSuperTypeOfTermType) {
|
|
54
|
-
verifiedAhead = true;
|
|
55
|
-
}
|
|
56
|
-
return verifiedAhead;
|
|
57
|
-
});
|
|
58
|
-
derivedTypeAssertionVerified = termVerified; ///
|
|
59
|
-
if (derivedTypeAssertionVerified) {
|
|
60
|
-
localContext.debug("...verified the '".concat(typeAssertionString, "' derived type assertion."), typeAssertionNode);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
return derivedTypeAssertionVerified;
|
|
64
|
-
}
|
|
65
|
-
function verifyStatedTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
66
|
-
var statedTypeAssertionVerified = false;
|
|
67
|
-
if (stated) {
|
|
68
|
-
var typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
69
|
-
localContext.trace("Verifying the '".concat(typeAssertionString, "' stated type assertion..."), typeAssertionNode);
|
|
70
|
-
var typeNode = typeNodeQuery(typeAssertionNode), type = localContext.findTypeByTypeNode(typeNode);
|
|
71
|
-
if (type === null) {
|
|
72
|
-
var typeString = localContext.nodeAsString(typeNode);
|
|
73
|
-
localContext.debug("The '".concat(typeString, "' type is not present."), typeNode);
|
|
74
|
-
} else {
|
|
75
|
-
var terms = [], termNode = termNodeQuery(typeAssertionNode), termVerified = verifyTerm(termNode, terms, localContext, function() {
|
|
76
|
-
var verifiedAhead = false;
|
|
77
|
-
var firstTerm = (0, _array.first)(terms), term = firstTerm, termType = term.getType(), typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
|
|
78
|
-
if (typeEqualToOrSubTypeOfTermType) {
|
|
79
|
-
var variableNode = variableNodeQuery(termNode);
|
|
80
|
-
if (variableNode !== null) {
|
|
81
|
-
if (assignments !== null) {
|
|
82
|
-
var variable = _variable.default.fromVariableNodeAndType(variableNode, type), variableAssignment = _variable1.default.fromVariable(variable), assignment = variableAssignment; ///
|
|
83
|
-
assignments.push(assignment);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
verifiedAhead = true;
|
|
87
|
-
}
|
|
88
|
-
return verifiedAhead;
|
|
89
|
-
});
|
|
90
|
-
statedTypeAssertionVerified = termVerified; ///
|
|
91
|
-
}
|
|
92
|
-
if (statedTypeAssertionVerified) {
|
|
93
|
-
localContext.debug("...verified the '".concat(typeAssertionString, "' stated type assertion."), typeAssertionNode);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
return statedTypeAssertionVerified;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy92ZXJpZnkvYXNzZXJ0aW9uL3R5cGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBWYXJpYWJsZSBmcm9tIFwiLi4vLi4vdmFyaWFibGVcIjtcbi8vIGltcG9ydCB2ZXJpZnlUZXJtIGZyb20gXCIuLi8uLi92ZXJpZnkvdGVybVwiO1xuaW1wb3J0IFZhcmlhYmxlQXNzaWdubWVudCBmcm9tIFwiLi4vLi4vYXNzaWdubWVudC92YXJpYWJsZVwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvYXJyYXlcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvcXVlcnlcIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3Rlcm0hXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlQXNzZXJ0aW9uL3R5cGUhXCIpLFxuICAgICAgdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdGVybS92YXJpYWJsZSFcIik7XG5cbmNvbnN0IHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbnMgPSBbXG4gIHZlcmlmeURlcml2ZWRUeXBlQXNzZXJ0aW9uLFxuICB2ZXJpZnlTdGF0ZWRUeXBlQXNzZXJ0aW9uXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB2ZXJpZnlUeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb25Ob2RlLCBhc3NpZ25tZW50cywgc3RhdGVkLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHR5cGVBc3NlcnRpb25WZXJpZmllZDtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi4uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcblxuICB0eXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB2ZXJpZnlUeXBlQXNzZXJ0aW9uRnVuY3Rpb25zLnNvbWUoKHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbikgPT4ge1xuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gIH1cblxuICByZXR1cm4gdHlwZUFzc2VydGlvblZlcmlmaWVkO1xufVxuXG5mdW5jdGlvbiB2ZXJpZnlEZXJpdmVkVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBkZXJpdmVkVHlwZUFzc2VydGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbiAgaWYgKCFzdGF0ZWQpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uLi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGUgPSBsb2NhbENvbnRleHQuZmluZFR5cGVCeVR5cGVOb2RlKHR5cGVOb2RlKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlTm9kZSk7XG5cbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmAsIHR5cGVOb2RlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgdGVybVZlcmlmaWVkID0gdmVyaWZ5VGVybSh0ZXJtTm9kZSwgdGVybXMsIGxvY2FsQ29udGV4dCwgKCkgPT4ge1xuICAgICAgICAgICAgbGV0IHZlcmlmaWVkQWhlYWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RUZXJtID0gZmlyc3QodGVybXMpLFxuICAgICAgICAgICAgICAgICAgdGVybSA9IGZpcnN0VGVybSwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtVHlwZSA9IGxvY2FsQ29udGV4dC5nZXRUZXJtVHlwZSh0ZXJtKSxcbiAgICAgICAgICAgICAgICAgIHR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlRlcm1UeXBlID0gdHlwZS5pc0VxdWFsVG9PclN1cGVyVHlwZU9mKHRlcm1UeXBlKTtcblxuICAgICAgICAgICAgaWYgKHR5cGVFcXVhbFRvT3JTdXBlclR5cGVPZlRlcm1UeXBlKSB7XG4gICAgICAgICAgICAgIHZlcmlmaWVkQWhlYWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdmVyaWZpZWRBaGVhZDtcbiAgICAgICAgICB9KTtcblxuICAgIGRlcml2ZWRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSB0ZXJtVmVyaWZpZWQ7IC8vL1xuXG4gICAgaWYgKGRlcml2ZWRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLmAsIHR5cGVBc3NlcnRpb25Ob2RlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVyaXZlZFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cblxuZnVuY3Rpb24gdmVyaWZ5U3RhdGVkVHlwZUFzc2VydGlvbih0eXBlQXNzZXJ0aW9uTm9kZSwgYXNzaWdubWVudHMsIHN0YXRlZCwgbG9jYWxDb250ZXh0KSB7XG4gIGxldCBzdGF0ZWRUeXBlQXNzZXJ0aW9uVmVyaWZpZWQgPSBmYWxzZTtcblxuICBpZiAoc3RhdGVkKSB7XG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcodHlwZUFzc2VydGlvbk5vZGUpO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBzdGF0ZWQgdHlwZSBhc3NlcnRpb24uLi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG5cbiAgICBjb25zdCB0eXBlTm9kZSA9IHR5cGVOb2RlUXVlcnkodHlwZUFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgIHR5cGUgPSBsb2NhbENvbnRleHQuZmluZFR5cGVCeVR5cGVOb2RlKHR5cGVOb2RlKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyh0eXBlTm9kZSk7XG5cbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmAsIHR5cGVOb2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdGVybXMgPSBbXSxcbiAgICAgICAgICAgIHRlcm1Ob2RlID0gdGVybU5vZGVRdWVyeSh0eXBlQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgICB0ZXJtVmVyaWZpZWQgPSB2ZXJpZnlUZXJtKHRlcm1Ob2RlLCB0ZXJtcywgbG9jYWxDb250ZXh0LCAoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCB2ZXJpZmllZEFoZWFkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgY29uc3QgZmlyc3RUZXJtID0gZmlyc3QodGVybXMpLFxuICAgICAgICAgICAgICAgICAgICB0ZXJtID0gZmlyc3RUZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZUVxdWFsVG9PclN1YlR5cGVPZlRlcm1UeXBlID0gdHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0ZXJtVHlwZSk7XG5cbiAgICAgICAgICAgICAgaWYgKHR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZSA9IHZhcmlhYmxlTm9kZVF1ZXJ5KHRlcm1Ob2RlKTtcblxuICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChhc3NpZ25tZW50cyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21WYXJpYWJsZU5vZGVBbmRUeXBlKHZhcmlhYmxlTm9kZSwgdHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlQXNzaWdubWVudCA9IFZhcmlhYmxlQXNzaWdubWVudC5mcm9tVmFyaWFibGUodmFyaWFibGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NpZ25tZW50ID0gdmFyaWFibGVBc3NpZ25tZW50OyAgLy8vXG5cbiAgICAgICAgICAgICAgICAgICAgYXNzaWdubWVudHMucHVzaChhc3NpZ25tZW50KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiB2ZXJpZmllZEFoZWFkO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgIHN0YXRlZFR5cGVBc3NlcnRpb25WZXJpZmllZCA9IHRlcm1WZXJpZmllZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHN0YXRlZFR5cGVBc3NlcnRpb25WZXJpZmllZCkge1xuICAgICAgbG9jYWxDb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHN0YXRlZCB0eXBlIGFzc2VydGlvbi5gLCB0eXBlQXNzZXJ0aW9uTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlZFR5cGVBc3NlcnRpb25WZXJpZmllZDtcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlUeXBlQXNzZXJ0aW9uIiwidGVybU5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInR5cGVOb2RlUXVlcnkiLCJ2YXJpYWJsZU5vZGVRdWVyeSIsInZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbnMiLCJ2ZXJpZnlEZXJpdmVkVHlwZUFzc2VydGlvbiIsInZlcmlmeVN0YXRlZFR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsImFzc2lnbm1lbnRzIiwic3RhdGVkIiwibG9jYWxDb250ZXh0IiwidHlwZUFzc2VydGlvblZlcmlmaWVkIiwidHlwZUFzc2VydGlvblN0cmluZyIsIm5vZGVBc1N0cmluZyIsInRyYWNlIiwic29tZSIsInZlcmlmeVR5cGVBc3NlcnRpb25GdW5jdGlvbiIsImRlYnVnIiwiZGVyaXZlZFR5cGVBc3NlcnRpb25WZXJpZmllZCIsInR5cGVOb2RlIiwidHlwZSIsImZpbmRUeXBlQnlUeXBlTm9kZSIsInR5cGVTdHJpbmciLCJ0ZXJtcyIsInRlcm1Ob2RlIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsInZlcmlmaWVkQWhlYWQiLCJmaXJzdFRlcm0iLCJmaXJzdCIsInRlcm0iLCJ0ZXJtVHlwZSIsImdldFRlcm1UeXBlIiwidHlwZUVxdWFsVG9PclN1cGVyVHlwZU9mVGVybVR5cGUiLCJpc0VxdWFsVG9PclN1cGVyVHlwZU9mIiwic3RhdGVkVHlwZUFzc2VydGlvblZlcmlmaWVkIiwiZ2V0VHlwZSIsInR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUZXJtVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGUiLCJWYXJpYWJsZSIsImZyb21WYXJpYWJsZU5vZGVBbmRUeXBlIiwidmFyaWFibGVBc3NpZ25tZW50IiwiVmFyaWFibGVBc3NpZ25tZW50IiwiZnJvbVZhcmlhYmxlIiwiYXNzaWdubWVudCIsInB1c2giXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQXdCQTs7OytEQWhCSDtnRUFFVTtxQkFFVDtxQkFDSTs7Ozs7O0FBRTFCLElBQU1DLGdCQUFnQkMsSUFBQUEsZ0JBQVMsRUFBQyx5QkFDMUJDLGdCQUFnQkQsSUFBQUEsZ0JBQVMsRUFBQyx5QkFDMUJFLG9CQUFvQkYsSUFBQUEsZ0JBQVMsRUFBQztBQUVwQyxJQUFNRywrQkFBK0I7SUFDbkNDO0lBQ0FDO0NBQ0Q7QUFFYyxTQUFTUCxvQkFBb0JRLGlCQUFpQixFQUFFQyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsWUFBWTtJQUM5RixJQUFJQztJQUVKLElBQU1DLHNCQUFzQkYsYUFBYUcsWUFBWSxDQUFDTjtJQUV0REcsYUFBYUksS0FBSyxDQUFDLEFBQUMsa0JBQXFDLE9BQXBCRixxQkFBb0Isd0JBQXNCTDtJQUUvRUksd0JBQXdCUCw2QkFBNkJXLElBQUksQ0FBQyxTQUFDQztRQUN6RCxJQUFNTCx3QkFBd0JLLDRCQUE0QlQsbUJBQW1CQyxhQUFhQyxR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
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Variable from "../../variable";
|
|
4
|
-
// import verifyTerm from "../../verify/term";
|
|
5
|
-
import VariableAssignment from "../../assignment/variable";
|
|
6
|
-
|
|
7
|
-
import { first } from "../../utilities/array";
|
|
8
|
-
import { nodeQuery } from "../../utilities/query";
|
|
9
|
-
|
|
10
|
-
const termNodeQuery = nodeQuery("/typeAssertion/term!"),
|
|
11
|
-
typeNodeQuery = nodeQuery("/typeAssertion/type!"),
|
|
12
|
-
variableNodeQuery = nodeQuery("/term/variable!");
|
|
13
|
-
|
|
14
|
-
const verifyTypeAssertionFunctions = [
|
|
15
|
-
verifyDerivedTypeAssertion,
|
|
16
|
-
verifyStatedTypeAssertion
|
|
17
|
-
];
|
|
18
|
-
|
|
19
|
-
export default function verifyTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
20
|
-
let typeAssertionVerified;
|
|
21
|
-
|
|
22
|
-
const typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
23
|
-
|
|
24
|
-
localContext.trace(`Verifying the '${typeAssertionString}' type assertion...`, typeAssertionNode);
|
|
25
|
-
|
|
26
|
-
typeAssertionVerified = verifyTypeAssertionFunctions.some((verifyTypeAssertionFunction) => {
|
|
27
|
-
const typeAssertionVerified = verifyTypeAssertionFunction(typeAssertionNode, assignments, stated, localContext);
|
|
28
|
-
|
|
29
|
-
if (typeAssertionVerified) {
|
|
30
|
-
return true;
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
if (typeAssertionVerified) {
|
|
35
|
-
localContext.debug(`...verified the '${typeAssertionString}' type assertion.`, typeAssertionNode);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
return typeAssertionVerified;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
function verifyDerivedTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
42
|
-
let derivedTypeAssertionVerified = false;
|
|
43
|
-
|
|
44
|
-
if (!stated) {
|
|
45
|
-
const typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
46
|
-
|
|
47
|
-
localContext.trace(`Verifying the '${typeAssertionString}' derived type assertion...`, typeAssertionNode);
|
|
48
|
-
|
|
49
|
-
const typeNode = typeNodeQuery(typeAssertionNode),
|
|
50
|
-
type = localContext.findTypeByTypeNode(typeNode);
|
|
51
|
-
|
|
52
|
-
if (type === null) {
|
|
53
|
-
const typeString = localContext.nodeAsString(typeNode);
|
|
54
|
-
|
|
55
|
-
localContext.debug(`The '${typeString}' type is not present.`, typeNode);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const terms = [],
|
|
59
|
-
termNode = termNodeQuery(typeAssertionNode),
|
|
60
|
-
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
61
|
-
let verifiedAhead = false;
|
|
62
|
-
|
|
63
|
-
const firstTerm = first(terms),
|
|
64
|
-
term = firstTerm, ///
|
|
65
|
-
termType = localContext.getTermType(term),
|
|
66
|
-
typeEqualToOrSuperTypeOfTermType = type.isEqualToOrSuperTypeOf(termType);
|
|
67
|
-
|
|
68
|
-
if (typeEqualToOrSuperTypeOfTermType) {
|
|
69
|
-
verifiedAhead = true;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return verifiedAhead;
|
|
73
|
-
});
|
|
74
|
-
|
|
75
|
-
derivedTypeAssertionVerified = termVerified; ///
|
|
76
|
-
|
|
77
|
-
if (derivedTypeAssertionVerified) {
|
|
78
|
-
localContext.debug(`...verified the '${typeAssertionString}' derived type assertion.`, typeAssertionNode);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return derivedTypeAssertionVerified;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function verifyStatedTypeAssertion(typeAssertionNode, assignments, stated, localContext) {
|
|
86
|
-
let statedTypeAssertionVerified = false;
|
|
87
|
-
|
|
88
|
-
if (stated) {
|
|
89
|
-
const typeAssertionString = localContext.nodeAsString(typeAssertionNode);
|
|
90
|
-
|
|
91
|
-
localContext.trace(`Verifying the '${typeAssertionString}' stated type assertion...`, typeAssertionNode);
|
|
92
|
-
|
|
93
|
-
const typeNode = typeNodeQuery(typeAssertionNode),
|
|
94
|
-
type = localContext.findTypeByTypeNode(typeNode);
|
|
95
|
-
|
|
96
|
-
if (type === null) {
|
|
97
|
-
const typeString = localContext.nodeAsString(typeNode);
|
|
98
|
-
|
|
99
|
-
localContext.debug(`The '${typeString}' type is not present.`, typeNode);
|
|
100
|
-
} else {
|
|
101
|
-
const terms = [],
|
|
102
|
-
termNode = termNodeQuery(typeAssertionNode),
|
|
103
|
-
termVerified = verifyTerm(termNode, terms, localContext, () => {
|
|
104
|
-
let verifiedAhead = false;
|
|
105
|
-
|
|
106
|
-
const firstTerm = first(terms),
|
|
107
|
-
term = firstTerm, ///
|
|
108
|
-
termType = term.getType(),
|
|
109
|
-
typeEqualToOrSubTypeOfTermType = type.isEqualToOrSubTypeOf(termType);
|
|
110
|
-
|
|
111
|
-
if (typeEqualToOrSubTypeOfTermType) {
|
|
112
|
-
const variableNode = variableNodeQuery(termNode);
|
|
113
|
-
|
|
114
|
-
if (variableNode !== null) {
|
|
115
|
-
if (assignments !== null) {
|
|
116
|
-
const variable = Variable.fromVariableNodeAndType(variableNode, type),
|
|
117
|
-
variableAssignment = VariableAssignment.fromVariable(variable),
|
|
118
|
-
assignment = variableAssignment; ///
|
|
119
|
-
|
|
120
|
-
assignments.push(assignment);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
verifiedAhead = true;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
return verifiedAhead;
|
|
128
|
-
});
|
|
129
|
-
|
|
130
|
-
statedTypeAssertionVerified = termVerified; ///
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
if (statedTypeAssertionVerified) {
|
|
134
|
-
localContext.debug(`...verified the '${typeAssertionString}' stated type assertion.`, typeAssertionNode);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return statedTypeAssertionVerified;
|
|
139
|
-
}
|