occam-verify-cli 0.0.1030 → 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/type.js +13 -2
- 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/type.js +11 -0
- 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/file.js
CHANGED
|
@@ -390,20 +390,6 @@ export default class FileContext {
|
|
|
390
390
|
return label;
|
|
391
391
|
}
|
|
392
392
|
|
|
393
|
-
findMetavariableByMetavariableName(metavariableName) {
|
|
394
|
-
const name = metavariableName, ///
|
|
395
|
-
metavariables = this.getMetavariables(),
|
|
396
|
-
metavariable = metavariables.find((metavariable) => {
|
|
397
|
-
const nameMatches = metavariable.matchName(name);
|
|
398
|
-
|
|
399
|
-
if (nameMatches) {
|
|
400
|
-
return true;
|
|
401
|
-
}
|
|
402
|
-
}) || null;
|
|
403
|
-
|
|
404
|
-
return metavariable;
|
|
405
|
-
}
|
|
406
|
-
|
|
407
393
|
isTypePresentByTypeName(typeName) {
|
|
408
394
|
const type = this.findTypeByTypeName(typeName),
|
|
409
395
|
typePresent = (type !== null);
|
|
@@ -544,6 +530,33 @@ export default class FileContext {
|
|
|
544
530
|
return variable;
|
|
545
531
|
}
|
|
546
532
|
|
|
533
|
+
findJudgementByMetavariableName(metavariableName) {
|
|
534
|
+
const judgements = this.getJudgements(),
|
|
535
|
+
judgement = judgements.find((judgement) => {
|
|
536
|
+
const judgementMatchesMetavariableName = judgement.matchMetavariableName(metavariableName);
|
|
537
|
+
|
|
538
|
+
if (judgementMatchesMetavariableName) {
|
|
539
|
+
return true;
|
|
540
|
+
}
|
|
541
|
+
}) || null;
|
|
542
|
+
|
|
543
|
+
return judgement;
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
findMetavariableByMetavariableName(metavariableName) {
|
|
547
|
+
const name = metavariableName, ///
|
|
548
|
+
metavariables = this.getMetavariables(),
|
|
549
|
+
metavariable = metavariables.find((metavariable) => {
|
|
550
|
+
const nameMatches = metavariable.matchName(name);
|
|
551
|
+
|
|
552
|
+
if (nameMatches) {
|
|
553
|
+
return true;
|
|
554
|
+
}
|
|
555
|
+
}) || null;
|
|
556
|
+
|
|
557
|
+
return metavariable;
|
|
558
|
+
}
|
|
559
|
+
|
|
547
560
|
nodeAsString(node) {
|
|
548
561
|
const string = nodeAsString(node, this.tokens);
|
|
549
562
|
|
|
@@ -864,6 +877,27 @@ export default class FileContext {
|
|
|
864
877
|
});
|
|
865
878
|
}
|
|
866
879
|
|
|
880
|
+
static fromJSONAndReleaseContext(json, releaseContext) {
|
|
881
|
+
const { filePath } = json,
|
|
882
|
+
tokens = null,
|
|
883
|
+
node = null,
|
|
884
|
+
types = [],
|
|
885
|
+
rules = [],
|
|
886
|
+
axioms = [],
|
|
887
|
+
lemmas = [],
|
|
888
|
+
theorems = [],
|
|
889
|
+
variables = [],
|
|
890
|
+
metaLemmas = [],
|
|
891
|
+
conjectures = [],
|
|
892
|
+
combinators = [],
|
|
893
|
+
constructors = [],
|
|
894
|
+
metatheorems = [],
|
|
895
|
+
metavariables = [],
|
|
896
|
+
fileContext = new FileContext(releaseContext, filePath, tokens, node, types, rules, axioms, lemmas, variables, metaLemmas, theorems, conjectures, combinators, constructors, metatheorems, metavariables);
|
|
897
|
+
|
|
898
|
+
return fileContext;
|
|
899
|
+
}
|
|
900
|
+
|
|
867
901
|
static fromFileAndReleaseContext(file, releaseContext) {
|
|
868
902
|
const lexer = releaseContext.getLexer(),
|
|
869
903
|
parser = releaseContext.getParser(),
|
package/src/context/local.js
CHANGED
|
@@ -332,11 +332,21 @@ class LocalContext {
|
|
|
332
332
|
|
|
333
333
|
findMetaTypeByMetaTypeName(metaTypeName) { return this.context.findMetaTypeByMetaTypeName(metaTypeName); }
|
|
334
334
|
|
|
335
|
-
findVariableByVariableName(variableName) { return this.context.findVariableByVariableName(variableName); }
|
|
336
|
-
|
|
337
335
|
findLabelByMetavariableNode(metavariableNode) { return this.context.findLabelByMetavariableNode(metavariableNode); }
|
|
338
336
|
|
|
339
|
-
|
|
337
|
+
findVariableByVariableName(variableName) {
|
|
338
|
+
const name = variableName, ///
|
|
339
|
+
variables = this.getVariables(),
|
|
340
|
+
variable = variables.find((variable) => {
|
|
341
|
+
const nameMatches = variable.matchName(name);
|
|
342
|
+
|
|
343
|
+
if (nameMatches) {
|
|
344
|
+
return true;
|
|
345
|
+
}
|
|
346
|
+
}) || null;
|
|
347
|
+
|
|
348
|
+
return variable;
|
|
349
|
+
}
|
|
340
350
|
|
|
341
351
|
findJudgementByMetavariableName(metavariableName) {
|
|
342
352
|
const judgements = this.getJudgements(),
|
|
@@ -351,13 +361,13 @@ class LocalContext {
|
|
|
351
361
|
return judgement;
|
|
352
362
|
}
|
|
353
363
|
|
|
354
|
-
|
|
355
|
-
const
|
|
364
|
+
findMetavariableByMetavariableName(metavariableName) {
|
|
365
|
+
const name = metavariableName, ///
|
|
356
366
|
metavariables = this.getMetavariables(),
|
|
357
367
|
metavariable = metavariables.find((metavariable) => {
|
|
358
|
-
const
|
|
368
|
+
const nameMatches = metavariable.matchName(name);
|
|
359
369
|
|
|
360
|
-
if (
|
|
370
|
+
if (nameMatches) {
|
|
361
371
|
return true;
|
|
362
372
|
}
|
|
363
373
|
}) || null;
|
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;
|
package/src/type.js
CHANGED
|
@@ -228,6 +228,17 @@ Object.assign(shim, {
|
|
|
228
228
|
export default Type;
|
|
229
229
|
|
|
230
230
|
class ObjectType extends Type {
|
|
231
|
+
toJSON() {
|
|
232
|
+
const name = this.name,
|
|
233
|
+
superType = null,
|
|
234
|
+
json = {
|
|
235
|
+
name,
|
|
236
|
+
superType
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
return json;
|
|
240
|
+
}
|
|
241
|
+
|
|
231
242
|
static fromNothing() {
|
|
232
243
|
const name = OBJECT_TYPE_NAME,
|
|
233
244
|
string = name, //
|
|
@@ -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
|
-
}
|