occam-verify-cli 1.0.732 → 1.0.734
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/context/ephemeral.js +2 -7
- package/lib/context/liminal.js +2 -7
- package/lib/context/scoped.js +27 -27
- package/lib/context.js +22 -6
- package/lib/element/substitution/metaLevel.js +138 -0
- package/lib/element/substitution/reference.js +4 -9
- package/lib/node/substitution/metaLevel.js +40 -0
- package/lib/nonTerminalNodeMap.js +6 -4
- package/lib/preamble.js +2 -1
- package/lib/process/instantiate.js +8 -2
- package/lib/ruleNames.js +6 -2
- package/lib/utilities/context.js +5 -5
- package/lib/utilities/element.js +26 -2
- package/lib/utilities/string.js +7 -12
- package/lib/utilities/unification.js +10 -5
- package/package.json +4 -4
- package/src/context/ephemeral.js +1 -9
- package/src/context/liminal.js +1 -9
- package/src/context/scoped.js +34 -34
- package/src/context.js +33 -6
- package/src/element/substitution/metaLevel.js +201 -0
- package/src/element/substitution/reference.js +3 -9
- package/src/node/substitution/metaLevel.js +37 -0
- package/src/nonTerminalNodeMap.js +7 -4
- package/src/preamble.js +1 -0
- package/src/process/instantiate.js +6 -2
- package/src/ruleNames.js +2 -1
- package/src/utilities/context.js +4 -4
- package/src/utilities/element.js +31 -1
- package/src/utilities/string.js +5 -13
- package/src/utilities/unification.js +13 -8
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import Substitution from "../substitution";
|
|
4
|
+
|
|
5
|
+
import { define } from "../../elements";
|
|
6
|
+
import { literally } from "../../utilities/context";
|
|
7
|
+
import { ephemeralContextFromJSON } from "../../utilities/json";
|
|
8
|
+
import { instantiateMetaLevelSubstitution } from "../../process/instantiate";
|
|
9
|
+
import { metaLevelSubstitutionStringFromStatementAndReference } from "../../utilities/string";
|
|
10
|
+
import { targetReferenceFromMetaLevelSubstitutionNode, replacementStatementFromMetaLevelSubstitutionNode, metaLevelSubstitutionFromMetaLevelSubstitutionNode } from "../../utilities/element";
|
|
11
|
+
|
|
12
|
+
export default define(class MetaLevelSubstitution extends Substitution {
|
|
13
|
+
constructor(context, string, node, targetReference, replacementStatement) {
|
|
14
|
+
super(context, string, node);
|
|
15
|
+
|
|
16
|
+
this.targetReference = targetReference;
|
|
17
|
+
this.replacementStatement = replacementStatement;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getTargetReference() {
|
|
21
|
+
return this.targetReference;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
getReplacementStatement() {
|
|
25
|
+
return this.replacementStatement;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
getMetaLevelSubstitutionNode() {
|
|
29
|
+
const node = this.getNode(),
|
|
30
|
+
metaLevelSubstitutionNode = node; ///
|
|
31
|
+
|
|
32
|
+
return metaLevelSubstitutionNode;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
getTargetNode() {
|
|
36
|
+
const targetReferenceNode = this.targetReference.getNode(),
|
|
37
|
+
tergetNode = targetReferenceNode; ///
|
|
38
|
+
|
|
39
|
+
return tergetNode;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
getReplacementNode() {
|
|
43
|
+
const replacementStatementNode = this.replacementStatement.getNode(),
|
|
44
|
+
replacementNode = replacementStatementNode; ///
|
|
45
|
+
|
|
46
|
+
return replacementNode;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
validate(generalContext, specificContext) {
|
|
50
|
+
let metaLevelSubstitution = null;
|
|
51
|
+
|
|
52
|
+
const context = this.getContext();
|
|
53
|
+
|
|
54
|
+
specificContext = context; ///
|
|
55
|
+
|
|
56
|
+
const metaLevelSubstitutionString = this.getString(); ///
|
|
57
|
+
|
|
58
|
+
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution...`);
|
|
59
|
+
|
|
60
|
+
const validSubstitution = this.findValidSubstiution(context);
|
|
61
|
+
|
|
62
|
+
if (validSubstitution) {
|
|
63
|
+
metaLevelSubstitution = validSubstitution; ///
|
|
64
|
+
|
|
65
|
+
context.debug(`...the '${metaLevelSubstitutionString}' meta-level substitution is already valid.`);
|
|
66
|
+
} else {
|
|
67
|
+
let validates = false;
|
|
68
|
+
|
|
69
|
+
const targetReferenceValidates = this.validateTargetReference(generalContext, specificContext);
|
|
70
|
+
|
|
71
|
+
if (targetReferenceValidates) {
|
|
72
|
+
const replacementStatementValidates = this.validateReplacementStatement(generalContext, specificContext);
|
|
73
|
+
|
|
74
|
+
if (replacementStatementValidates) {
|
|
75
|
+
validates = true;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if (validates) {
|
|
80
|
+
const substitution = this; ///
|
|
81
|
+
|
|
82
|
+
metaLevelSubstitution = substitution; ///
|
|
83
|
+
|
|
84
|
+
context.addSubstitution(substitution);
|
|
85
|
+
|
|
86
|
+
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution.`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return metaLevelSubstitution;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
validateTargetReference(generalContext, specificContext) {
|
|
94
|
+
let targetReferenceValidates = false;
|
|
95
|
+
|
|
96
|
+
const context = generalContext, ///
|
|
97
|
+
targetReferenceString = this.targetReference.getString(),
|
|
98
|
+
metaLevelSubstitutionString = this.getString(); ///
|
|
99
|
+
|
|
100
|
+
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level subtitution's '${targetReferenceString}' target reference...`);
|
|
101
|
+
|
|
102
|
+
const targetReference = this.targetReference.validate(context);
|
|
103
|
+
|
|
104
|
+
if (targetReference !== null) {
|
|
105
|
+
targetReferenceValidates = true;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (targetReferenceValidates) {
|
|
109
|
+
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level subtitution's '${targetReferenceString}' target reference...`);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return targetReferenceValidates;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
validateReplacementStatement(generalContext, specificContext) {
|
|
116
|
+
let replacementStatementValidates;
|
|
117
|
+
|
|
118
|
+
const context = specificContext, ///
|
|
119
|
+
replacementStatementString = this.replacementStatement.getString(),
|
|
120
|
+
metaLevelSubstitutionString = this.getString(); ///
|
|
121
|
+
|
|
122
|
+
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level subtitution's '${replacementStatementString}' replacement statement...`);
|
|
123
|
+
|
|
124
|
+
const stated = true,
|
|
125
|
+
replacementStatement = this.replacementStatement.validate(stated, context);
|
|
126
|
+
|
|
127
|
+
if (replacementStatement !== null) {
|
|
128
|
+
replacementStatementValidates = true;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
if (replacementStatementValidates) {
|
|
132
|
+
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level subtitution's '${replacementStatementString}' replacement statement.`);
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
return replacementStatementValidates;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
toJSON() {
|
|
139
|
+
let context;
|
|
140
|
+
|
|
141
|
+
context = this.getContext();
|
|
142
|
+
|
|
143
|
+
const contextJSON = context.toJSON();
|
|
144
|
+
|
|
145
|
+
context = contextJSON; ///
|
|
146
|
+
|
|
147
|
+
const string = this.getString(),
|
|
148
|
+
json = {
|
|
149
|
+
context,
|
|
150
|
+
string
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
return json;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
static name = "MetaLevelSubstitution";
|
|
157
|
+
|
|
158
|
+
static fromJSON(json, context) {
|
|
159
|
+
const metaLevelSubstitution = literally((context) => {
|
|
160
|
+
const { string } = json,
|
|
161
|
+
metaLevelSubstitutionNode = instantiateMetaLevelSubstitution(string, context),
|
|
162
|
+
targetReference = targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
|
|
163
|
+
replacementStatement = replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
|
|
164
|
+
node = metaLevelSubstitutionNode, ///
|
|
165
|
+
ephemeralContext = ephemeralContextFromJSON(json, context);
|
|
166
|
+
|
|
167
|
+
context = ephemeralContext; ///
|
|
168
|
+
|
|
169
|
+
const metaLevelSubstitution = new MetaLevelSubstitution(context, string, node, targetReference, replacementStatement);
|
|
170
|
+
|
|
171
|
+
return metaLevelSubstitution;
|
|
172
|
+
}, context);
|
|
173
|
+
|
|
174
|
+
return metaLevelSubstitution;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
static fromStatementAndReference(statement, reference, context) {
|
|
178
|
+
return literally((context) => {
|
|
179
|
+
const metaLevelSubstitutionString = metaLevelSubstitutionStringFromStatementAndReference(statement, reference),
|
|
180
|
+
string = metaLevelSubstitutionString, ///
|
|
181
|
+
metaLevelSubstitutionNode = instantiateMetaLevelSubstitution(string, context),
|
|
182
|
+
metaLevelSubstitution = metaLevelSubstitutionFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context);
|
|
183
|
+
|
|
184
|
+
return metaLevelSubstitution;
|
|
185
|
+
}, context);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
function targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
190
|
+
const targetReferenceNode = metaLevelSubstitutionNode.getTargetReferenceNode(),
|
|
191
|
+
targetReference = context.findReferenceByReferenceNode(targetReferenceNode);
|
|
192
|
+
|
|
193
|
+
return targetReference;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
function replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
197
|
+
const replacementStatementNode = metaLevelSubstitutionNode.getReplacementStatementNode(),
|
|
198
|
+
replacementStatement = context.findStatementByStatementNode(replacementStatementNode);
|
|
199
|
+
|
|
200
|
+
return replacementStatement;
|
|
201
|
+
}
|
|
@@ -123,16 +123,10 @@ export default define(class ReferenceSubstitution extends Substitution {
|
|
|
123
123
|
|
|
124
124
|
context.trace(`Validating the '${referenceSubstitutionString}' reference subtitution's '${targetReferenceString}' target reference...`);
|
|
125
125
|
|
|
126
|
-
const
|
|
126
|
+
const targetReference = this.targetReference.validate(context);
|
|
127
127
|
|
|
128
|
-
if (
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
if (targetReference !== null) {
|
|
132
|
-
targetReferenceValidates = true;
|
|
133
|
-
}
|
|
134
|
-
} else {
|
|
135
|
-
context.debug(`The '${referenceSubstitutionString}' reference subtitution's '${targetReferenceString}' target reference is not singular.`);
|
|
128
|
+
if (targetReference !== null) {
|
|
129
|
+
targetReferenceValidates = true;
|
|
136
130
|
}
|
|
137
131
|
|
|
138
132
|
if (targetReferenceValidates) {
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import SubstitutionNode from "../../node/substitution";
|
|
4
|
+
|
|
5
|
+
import { STATEMENT_RULE_NAME, REFERENCE_RULE_NAME } from "../../ruleNames";
|
|
6
|
+
|
|
7
|
+
export default class MetaLevelSubstitutionNode extends SubstitutionNode {
|
|
8
|
+
getTargetReferenceNode() {
|
|
9
|
+
const referenceNode = this.getReferenceNode(),
|
|
10
|
+
targetReferenceNode = referenceNode; ///
|
|
11
|
+
|
|
12
|
+
return targetReferenceNode;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
getReplacementStatementNode() {
|
|
16
|
+
const statementNode = this.getStatementNode(),
|
|
17
|
+
replacementStatementNode = statementNode; ///
|
|
18
|
+
|
|
19
|
+
return replacementStatementNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
getReferenceNode() {
|
|
23
|
+
const ruleName = REFERENCE_RULE_NAME,
|
|
24
|
+
referenceNode = this.getNodeByRuleName(ruleName);
|
|
25
|
+
|
|
26
|
+
return referenceNode;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
getStatementNode() {
|
|
30
|
+
const ruleName = STATEMENT_RULE_NAME,
|
|
31
|
+
statementNode = this.getFirstNodeByRuleName(ruleName);
|
|
32
|
+
|
|
33
|
+
return statementNode;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) { return SubstitutionNode.fromRuleNameChildNodesOpacityAndPrecedence(MetaLevelSubstitutionNode, ruleName, childNodes, opacity, precedence); }
|
|
37
|
+
}
|
|
@@ -75,10 +75,11 @@ import SatisfiesAssertionNode from "./node/assertion/satisfies";
|
|
|
75
75
|
import ParenthesisedLabelsNode from "./node/parenthesisedLabels"
|
|
76
76
|
import PropertyDeclarationNode from "./node/declaration/property";
|
|
77
77
|
import VariableDeclarationNode from "./node/declaration/variable";
|
|
78
|
-
import ReferenceSubstitutionNode from "./node/substitution/reference";
|
|
79
|
-
import StatementSubstitutionNode from "./node/substitution/statement";
|
|
80
78
|
import SimpleTypeDeclarationNode from "./node/declaration/simpleType";
|
|
81
79
|
import CombinatorDeclarationNode from "./node/declaration/combinator";
|
|
80
|
+
import ReferenceSubstitutionNode from "./node/substitution/reference";
|
|
81
|
+
import StatementSubstitutionNode from "./node/substitution/statement";
|
|
82
|
+
import MetaLevelSubstitutionNode from "./node/substitution/metaLevel";
|
|
82
83
|
import TypePrefixDeclarationNode from "./node/declaration/typePrefix";
|
|
83
84
|
import ComplexTypeDeclarationNode from "./node/declaration/complexType";
|
|
84
85
|
import DonstructorDeclarationNode from "./node/declaration/constructor";
|
|
@@ -160,9 +161,10 @@ import {
|
|
|
160
161
|
PARENTHESISED_LABELS_RULE_NAME,
|
|
161
162
|
PROPERTY_DECLARATION_RULE_NAME,
|
|
162
163
|
VARIABLE_DECLARATION_RULE_NAME,
|
|
164
|
+
COMBINATOR_DECLARATION_RULE_NAME,
|
|
163
165
|
REFERENCE_SUBSTITUTION_RULE_NAME,
|
|
164
166
|
STATEMENT_SUBSTITUTION_RULE_NAME,
|
|
165
|
-
|
|
167
|
+
META_LEVEL_SUBSTITUTION_RULE_NAME,
|
|
166
168
|
SIMPLE_TYPE_DECLARATION_RULE_NAME,
|
|
167
169
|
CONSTRUCTOR_DECLARATION_RULE_NAME,
|
|
168
170
|
TYPE_PREFIX_DECLARATION_RULE_NAME,
|
|
@@ -245,9 +247,10 @@ const NonTerminalNodeMap = {
|
|
|
245
247
|
[PARENTHESISED_LABELS_RULE_NAME]: ParenthesisedLabelsNode,
|
|
246
248
|
[VARIABLE_DECLARATION_RULE_NAME]: VariableDeclarationNode,
|
|
247
249
|
[PROPERTY_DECLARATION_RULE_NAME]: PropertyDeclarationNode,
|
|
250
|
+
[COMBINATOR_DECLARATION_RULE_NAME]: CombinatorDeclarationNode,
|
|
248
251
|
[STATEMENT_SUBSTITUTION_RULE_NAME]: StatementSubstitutionNode,
|
|
249
252
|
[REFERENCE_SUBSTITUTION_RULE_NAME]: ReferenceSubstitutionNode,
|
|
250
|
-
[
|
|
253
|
+
[META_LEVEL_SUBSTITUTION_RULE_NAME]: MetaLevelSubstitutionNode,
|
|
251
254
|
[SIMPLE_TYPE_DECLARATION_RULE_NAME]: SimpleTypeDeclarationNode,
|
|
252
255
|
[TYPE_PREFIX_DECLARATION_RULE_NAME]: TypePrefixDeclarationNode,
|
|
253
256
|
[CONSTRUCTOR_DECLARATION_RULE_NAME]: DonstructorDeclarationNode,
|
package/src/preamble.js
CHANGED
|
@@ -57,6 +57,7 @@ import SimpleTypeDeclaration from "./element/declaration/simpleType";
|
|
|
57
57
|
import StatementSubstitution from "./element/substitution/statement";
|
|
58
58
|
import ReferenceSubstitution from "./element/substitution/reference";
|
|
59
59
|
import CombinatorDeclaration from "./element/declaration/combinator";
|
|
60
|
+
import MetaLevelSubstitution from "./element/substitution/metaLevel";
|
|
60
61
|
import TypePrefixDeclaration from "./element/declaration/typePrefix";
|
|
61
62
|
import ConstructorDeclaration from "./element/declaration/constructor";
|
|
62
63
|
import ComplexTypeDeclaration from "./element/declaration/complexType";
|
|
@@ -34,7 +34,8 @@ import { TERM_RULE_NAME,
|
|
|
34
34
|
CONTAINED_ASSERTION_RULE_NAME,
|
|
35
35
|
SATISFIES_ASSERTION_RULE_NAME,
|
|
36
36
|
STATEMENT_SUBSTITUTION_RULE_NAME,
|
|
37
|
-
REFERENCE_SUBSTITUTION_RULE_NAME
|
|
37
|
+
REFERENCE_SUBSTITUTION_RULE_NAME,
|
|
38
|
+
META_LEVEL_SUBSTITUTION_RULE_NAME } from "../ruleNames";
|
|
38
39
|
|
|
39
40
|
const termPlaceholderRule = ruleFromRuleName(TERM_RULE_NAME),
|
|
40
41
|
typePlaceholderRule = ruleFromRuleName(TYPE_RULE_NAME),
|
|
@@ -69,7 +70,8 @@ const termPlaceholderRule = ruleFromRuleName(TERM_RULE_NAME),
|
|
|
69
70
|
containedAssertionPlaceholderRule = ruleFromRuleName(CONTAINED_ASSERTION_RULE_NAME),
|
|
70
71
|
satisfiesAssertionPlaceholderRule = ruleFromRuleName(SATISFIES_ASSERTION_RULE_NAME),
|
|
71
72
|
statementSubstitutionPlaceholderRule = ruleFromRuleName(STATEMENT_SUBSTITUTION_RULE_NAME),
|
|
72
|
-
referenceSubstitutionPlaceholderRule = ruleFromRuleName(REFERENCE_SUBSTITUTION_RULE_NAME)
|
|
73
|
+
referenceSubstitutionPlaceholderRule = ruleFromRuleName(REFERENCE_SUBSTITUTION_RULE_NAME),
|
|
74
|
+
metaLevelSubstitutionPlaceholderRule = ruleFromRuleName(META_LEVEL_SUBSTITUTION_RULE_NAME);
|
|
73
75
|
|
|
74
76
|
export function instantiatePremise(string, context) {
|
|
75
77
|
string = `${string}
|
|
@@ -159,6 +161,8 @@ export function instantiateStatementSubstitution(string, context) { return insta
|
|
|
159
161
|
|
|
160
162
|
export function instantiateReferenceSubstitution(string, context) { return instantiate(referenceSubstitutionPlaceholderRule, string, context); }
|
|
161
163
|
|
|
164
|
+
export function instantiateMetaLevelSubstitution(string, context) { return instantiate(metaLevelSubstitutionPlaceholderRule, string, context); }
|
|
165
|
+
|
|
162
166
|
function instantiate(placeholderRule, string, context) {
|
|
163
167
|
let node;
|
|
164
168
|
|
package/src/ruleNames.js
CHANGED
|
@@ -75,9 +75,10 @@ export const SATISFIES_ASSERTION_RULE_NAME = "satisfiesAssertion";
|
|
|
75
75
|
export const PARENTHESISED_LABELS_RULE_NAME = "parenthesisedLabels";
|
|
76
76
|
export const PROPERTY_DECLARATION_RULE_NAME = "propertyDeclaration";
|
|
77
77
|
export const VARIABLE_DECLARATION_RULE_NAME = "variableDeclaration";
|
|
78
|
+
export const COMBINATOR_DECLARATION_RULE_NAME = "combinatorDeclaration";
|
|
78
79
|
export const STATEMENT_SUBSTITUTION_RULE_NAME = "statementSubstitution";
|
|
79
80
|
export const REFERENCE_SUBSTITUTION_RULE_NAME = "referenceSubstitution";
|
|
80
|
-
export const
|
|
81
|
+
export const META_LEVEL_SUBSTITUTION_RULE_NAME = "metaLevelSubstitution";
|
|
81
82
|
export const TYPE_PREFIX_DECLARATION_RULE_NAME = "typePrefixDeclaration";
|
|
82
83
|
export const SIMPLE_TYPE_DECLARATION_RULE_NAME = "simpleTypeDeclaration";
|
|
83
84
|
export const CONSTRUCTOR_DECLARATION_RULE_NAME = "constructorDeclaration";
|
package/src/utilities/context.js
CHANGED
|
@@ -38,14 +38,14 @@ export function synthetically(innerFunction, contexts, context) {
|
|
|
38
38
|
return innerFunction(context);
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
export async function asyncScope(innerFunction,
|
|
41
|
+
export async function asyncScope(innerFunction, metaLevelSubstitutions, context) {
|
|
42
42
|
if (context === undefined) {
|
|
43
|
-
context =
|
|
43
|
+
context = metaLevelSubstitutions; ///
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
metaLevelSubstitutions = null;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
-
const scopedContext = ScopedContext.
|
|
48
|
+
const scopedContext = ScopedContext.fromMetaLevelSubstitutions(metaLevelSubstitutions, context);
|
|
49
49
|
|
|
50
50
|
context = scopedContext; ///
|
|
51
51
|
|
package/src/utilities/element.js
CHANGED
|
@@ -13,6 +13,7 @@ import { equivalenceStringFromTerms,
|
|
|
13
13
|
procedureCallStringFromProcedureReferenceAndParameters,
|
|
14
14
|
topLevelAssertionStringFromLabelsSuppositionsAndDeduction,
|
|
15
15
|
topLevelMetaAssertionStringFromLabelSuppositionsAndDeduction } from "../utilities/string";
|
|
16
|
+
import EphemeralContext from "../context/ephemeral";
|
|
16
17
|
|
|
17
18
|
export function typeFromTypeNode(typeNode, context) {
|
|
18
19
|
let type;
|
|
@@ -795,6 +796,21 @@ export function statementSubstitutionFromStatementSubstitutionNode(statementSubs
|
|
|
795
796
|
return statementSubstitution;
|
|
796
797
|
}
|
|
797
798
|
|
|
799
|
+
export function metaLevelSubstitutionFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
800
|
+
const { MetaLevelSubstitution } = elements,
|
|
801
|
+
node = metaLevelSubstitutionNode, ///
|
|
802
|
+
string = context.nodeAsString(node),
|
|
803
|
+
targetReference = targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
|
|
804
|
+
replacementStatement = replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
|
|
805
|
+
ephemeralContext = EphemeralContext.fromNothing(context);
|
|
806
|
+
|
|
807
|
+
context = ephemeralContext; ///
|
|
808
|
+
|
|
809
|
+
const metaLevelSubstitution = new MetaLevelSubstitution(context, string, node, targetReference, replacementStatement);
|
|
810
|
+
|
|
811
|
+
return metaLevelSubstitution;
|
|
812
|
+
}
|
|
813
|
+
|
|
798
814
|
export function constructorDeclarationFromConstructorDeclarationNode(constructorDeclarationNode, context) {
|
|
799
815
|
const { ConstructorDeclaration } = elements,
|
|
800
816
|
node = constructorDeclarationNode, ///
|
|
@@ -1859,7 +1875,14 @@ export function metavariableFromMetavariableDeclarationNode(metavariableDeclarat
|
|
|
1859
1875
|
|
|
1860
1876
|
export function targetReferenceFromReferenceSubstitutionNode(referenceSubstitutionNode, context) {
|
|
1861
1877
|
const targetReferenceNode = referenceSubstitutionNode.getTargetReferenceNode(),
|
|
1862
|
-
targetRefernece =
|
|
1878
|
+
targetRefernece = referenceFromReferenceNode(targetReferenceNode, context);
|
|
1879
|
+
|
|
1880
|
+
return targetRefernece;
|
|
1881
|
+
}
|
|
1882
|
+
|
|
1883
|
+
export function targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
1884
|
+
const targetReferenceNode = metaLevelSubstitutionNode.getTargetReferenceNode(),
|
|
1885
|
+
targetRefernece = referenceFromReferenceNode(targetReferenceNode, context);
|
|
1863
1886
|
|
|
1864
1887
|
return targetRefernece;
|
|
1865
1888
|
}
|
|
@@ -1909,6 +1932,13 @@ export function replacementStatementFromStatementSubstitutionNode(statementSubst
|
|
|
1909
1932
|
return replacementStatement;
|
|
1910
1933
|
}
|
|
1911
1934
|
|
|
1935
|
+
export function replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
1936
|
+
const replacementStatementNode = metaLevelSubstitutionNode.getReplacementStatementNode(),
|
|
1937
|
+
replacementStatement = statementFromStatementNode(replacementStatementNode, context);
|
|
1938
|
+
|
|
1939
|
+
return replacementStatement;
|
|
1940
|
+
}
|
|
1941
|
+
|
|
1912
1942
|
export function termsFromTermNodes(termNodes, context) {
|
|
1913
1943
|
const terms = termNodes.map((termNode) => {
|
|
1914
1944
|
const term = termFromTermNode(termNode, context);
|
package/src/utilities/string.js
CHANGED
|
@@ -184,20 +184,12 @@ export function frameSubstitutionStringFromFrameAndMetavariable(frame, metavaria
|
|
|
184
184
|
return string;
|
|
185
185
|
}
|
|
186
186
|
|
|
187
|
-
export function
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
`${typePrefixName}${typeName}`:
|
|
192
|
-
typeName;
|
|
193
|
-
|
|
194
|
-
const superTypesString = superTypesStringFromSuperTypes(superTypes);
|
|
195
|
-
|
|
196
|
-
if (superTypesString !== null) {
|
|
197
|
-
typeString = `${typeString}:${superTypesString}`;
|
|
198
|
-
}
|
|
187
|
+
export function metaLevelSubstitutionStringFromStatementAndReference(statement, reference) {
|
|
188
|
+
const statementString = statement.getString(),
|
|
189
|
+
referenceString = reference.getString(),
|
|
190
|
+
metaLevelSubstitutionString = `[${statementString} for ${referenceString}]`;
|
|
199
191
|
|
|
200
|
-
return
|
|
192
|
+
return metaLevelSubstitutionString;
|
|
201
193
|
}
|
|
202
194
|
|
|
203
195
|
export function procedureCallStringFromProcedureReferenceAndParameters(procedureReference, parameters) {
|
|
@@ -62,17 +62,22 @@ async function unifyStatementWithReference(statement, reference, satisfiesAssert
|
|
|
62
62
|
const metaLevelSubstitutions = context.hasMetaLevelSubstitutions();
|
|
63
63
|
|
|
64
64
|
if (metaLevelSubstitutions) {
|
|
65
|
-
|
|
66
|
-
metavariable = reference.getMetavariable(),
|
|
67
|
-
statementSubstitution = StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context),
|
|
68
|
-
substitution = statementSubstitution, ///
|
|
69
|
-
metaLevel = true;
|
|
65
|
+
let metaLevelSubstitution;
|
|
70
66
|
|
|
71
|
-
|
|
67
|
+
const { MetaLevelSubstitution } = elements;
|
|
72
68
|
|
|
73
|
-
|
|
69
|
+
metaLevelSubstitution = MetaLevelSubstitution.fromStatementAndReference(statement, reference, context);
|
|
74
70
|
|
|
75
|
-
|
|
71
|
+
const generalContext = context, ///
|
|
72
|
+
specificContext = context; ///
|
|
73
|
+
|
|
74
|
+
metaLevelSubstitution = metaLevelSubstitution.validate(generalContext, specificContext); ///
|
|
75
|
+
|
|
76
|
+
if (metaLevelSubstitution !== null) {
|
|
77
|
+
context.addMetaLevelSubstitution(metaLevelSubstitution);
|
|
78
|
+
|
|
79
|
+
statementUnifiesWithReference = true;
|
|
80
|
+
}
|
|
76
81
|
}
|
|
77
82
|
}
|
|
78
83
|
|