occam-verify-cli 1.0.781 → 1.0.787
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/branching.js +1 -1
- package/lib/context/ephemeral.js +22 -11
- package/lib/context/file/nominal.js +4 -4
- package/lib/context/proof.js +45 -40
- package/lib/context.js +16 -24
- package/lib/element/assumption.js +53 -17
- package/lib/element/frame.js +1 -39
- package/lib/element/judgement.js +33 -5
- package/lib/element/label.js +9 -1
- package/lib/element/metavariable.js +7 -7
- package/lib/element/proofAssertion/step.js +3 -3
- package/lib/element/reference.js +24 -22
- package/lib/element/substitution/frame.js +5 -7
- package/lib/element/substitution/reference.js +9 -9
- package/lib/element/substitution/statement.js +7 -11
- package/lib/element/substitution/term.js +4 -6
- package/lib/element/topLevelMetaAssertion.js +9 -9
- package/lib/nonTerminalNodeMap.js +1 -3
- package/lib/preamble.js +1 -2
- package/lib/process/instantiate.js +2 -8
- package/lib/process/unify.js +72 -5
- package/lib/ruleNames.js +1 -5
- package/lib/utilities/context.js +5 -22
- package/lib/utilities/element.js +25 -76
- package/lib/utilities/json.js +1 -23
- package/lib/utilities/string.js +8 -19
- package/lib/utilities/unification.js +8 -6
- package/package.json +4 -4
- package/src/context/branching.js +1 -1
- package/src/context/ephemeral.js +26 -10
- package/src/context/file/nominal.js +3 -3
- package/src/context/proof.js +52 -46
- package/src/context.js +21 -34
- package/src/element/assumption.js +82 -23
- package/src/element/frame.js +1 -61
- package/src/element/judgement.js +45 -5
- package/src/element/label.js +14 -0
- package/src/element/metavariable.js +6 -9
- package/src/element/proofAssertion/step.js +2 -2
- package/src/element/reference.js +32 -29
- package/src/element/substitution/frame.js +6 -8
- package/src/element/substitution/reference.js +13 -11
- package/src/element/substitution/statement.js +11 -15
- package/src/element/substitution/term.js +6 -8
- package/src/element/topLevelMetaAssertion.js +13 -13
- package/src/nonTerminalNodeMap.js +0 -3
- package/src/preamble.js +0 -1
- package/src/process/instantiate.js +2 -6
- package/src/process/unify.js +117 -7
- package/src/ruleNames.js +0 -1
- package/src/utilities/context.js +4 -33
- package/src/utilities/element.js +46 -101
- package/src/utilities/json.js +0 -26
- package/src/utilities/string.js +8 -22
- package/src/utilities/unification.js +8 -8
- package/lib/element/substitution/metaLevel.js +0 -148
- package/lib/node/substitution/metaLevel.js +0 -40
- package/src/element/substitution/metaLevel.js +0 -212
- package/src/node/substitution/metaLevel.js +0 -37
package/src/utilities/json.js
CHANGED
|
@@ -703,22 +703,6 @@ export function propertyRelationsFromJSON(json, context) {
|
|
|
703
703
|
return propertyRelations;
|
|
704
704
|
}
|
|
705
705
|
|
|
706
|
-
export function metaLevelSubstitutionsFromJSON(json, context) {
|
|
707
|
-
let { metaLevelSubstitutions } = json; ///
|
|
708
|
-
|
|
709
|
-
const { MetaLevelSubstitution } = elements,
|
|
710
|
-
metaLevelSubstitutionsJSON = metaLevelSubstitutions; ///
|
|
711
|
-
|
|
712
|
-
metaLevelSubstitutions = metaLevelSubstitutionsJSON.map((metaLevelSubstitutionJSON) => {
|
|
713
|
-
const json = metaLevelSubstitutionJSON, ///
|
|
714
|
-
metaLevelSubstitution = MetaLevelSubstitution.fromJSON(json, context);
|
|
715
|
-
|
|
716
|
-
return metaLevelSubstitution;
|
|
717
|
-
});
|
|
718
|
-
|
|
719
|
-
return metaLevelSubstitutions;
|
|
720
|
-
}
|
|
721
|
-
|
|
722
706
|
export function nameToNameJSON(name) {
|
|
723
707
|
const nameJSON = name; ///
|
|
724
708
|
|
|
@@ -1127,16 +1111,6 @@ export function propertyRelationsToPropertyRelationsJSON(propertyRelations) {
|
|
|
1127
1111
|
return propertyRelationsJSON;
|
|
1128
1112
|
}
|
|
1129
1113
|
|
|
1130
|
-
export function metaLevelSubstitutionsToMetaLevelSubstitutionsJSON(metaLevelSubstitutions) {
|
|
1131
|
-
const metaLevelSubstitutionsJSON = metaLevelSubstitutions.map((metaLevelSubstitution) => {
|
|
1132
|
-
const metaLevelSubstitutionJSON = metaLevelSubstitution.toJSON();
|
|
1133
|
-
|
|
1134
|
-
return metaLevelSubstitutionJSON;
|
|
1135
|
-
});
|
|
1136
|
-
|
|
1137
|
-
return metaLevelSubstitutionsJSON;
|
|
1138
|
-
}
|
|
1139
|
-
|
|
1140
1114
|
function findTypeByName(name, context) {
|
|
1141
1115
|
const typeName = name, ///
|
|
1142
1116
|
type = context.findTypeByTypeName(typeName);
|
package/src/utilities/string.js
CHANGED
|
@@ -117,20 +117,6 @@ export function suppositionsStringFromSuppositions(suppositions) {
|
|
|
117
117
|
return suppositionsString;
|
|
118
118
|
}
|
|
119
119
|
|
|
120
|
-
export function metaLevelSubstitutionsStringFromMetaLevelSubstitutions(metaLevelSubstitutions) {
|
|
121
|
-
const metaLevelSubstitutionsString = metaLevelSubstitutions.reduce((metaLevelSubstitutionsString, metaLevelSubstitution) => {
|
|
122
|
-
const metaLevelSubstitutionString = metaLevelSubstitution.getString();
|
|
123
|
-
|
|
124
|
-
metaLevelSubstitutionsString = (metaLevelSubstitutionsString === null) ?
|
|
125
|
-
metaLevelSubstitutionString: ///
|
|
126
|
-
`${metaLevelSubstitutionsString}, ${metaLevelSubstitutionString}`;
|
|
127
|
-
|
|
128
|
-
return metaLevelSubstitutionsString;
|
|
129
|
-
}, null);
|
|
130
|
-
|
|
131
|
-
return metaLevelSubstitutionsString;
|
|
132
|
-
}
|
|
133
|
-
|
|
134
120
|
export function signatureStringFromTerms(terms) {
|
|
135
121
|
const termsString = termsStringFromTerms(terms),
|
|
136
122
|
signatureString = `[${termsString}]`;
|
|
@@ -151,6 +137,14 @@ export function typeStringFromNominalTypeName(nominalTypeName) {
|
|
|
151
137
|
return typeString;
|
|
152
138
|
}
|
|
153
139
|
|
|
140
|
+
export function assumptionStringFromStatementAndReference(statement, reference) {
|
|
141
|
+
const statementString = statement.getString(),
|
|
142
|
+
referneceString = reference.getString(),
|
|
143
|
+
assumptionString = `${referneceString} :: ${statementString}`;
|
|
144
|
+
|
|
145
|
+
return assumptionString;
|
|
146
|
+
}
|
|
147
|
+
|
|
154
148
|
export function termSubstitutionStringFromTermAndVariable(term, variable) {
|
|
155
149
|
const termString = term.getString(),
|
|
156
150
|
variableString = variable.getString(),
|
|
@@ -198,14 +192,6 @@ export function frameSubstitutionStringFromFrameAndMetavariable(frame, metavaria
|
|
|
198
192
|
return string;
|
|
199
193
|
}
|
|
200
194
|
|
|
201
|
-
export function metaLevelSubstitutionStringFromStatementAndReference(statement, reference) {
|
|
202
|
-
const statementString = statement.getString(),
|
|
203
|
-
referenceString = reference.getString(),
|
|
204
|
-
metaLevelSubstitutionString = `[${statementString} for ${referenceString}]`;
|
|
205
|
-
|
|
206
|
-
return metaLevelSubstitutionString;
|
|
207
|
-
}
|
|
208
|
-
|
|
209
195
|
export function procedureCallStringFromProcedureReferenceAndParameters(procedureReference, parameters) {
|
|
210
196
|
const procedureReferenceName = procedureReference.getName(),
|
|
211
197
|
parametersString = parametersStringFromParameters(parameters),
|
|
@@ -55,17 +55,17 @@ async function unifyStatementWithReference(statement, reference, satisfiesAssert
|
|
|
55
55
|
statementUnifiesWithReference = true;
|
|
56
56
|
}
|
|
57
57
|
} else {
|
|
58
|
-
const
|
|
58
|
+
const metaLevel = context.isMetaLevel();
|
|
59
59
|
|
|
60
|
-
if (
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
specificContext = context; ///
|
|
60
|
+
if (metaLevel) {
|
|
61
|
+
descend((context) => {
|
|
62
|
+
const { Assumption } = elements,
|
|
63
|
+
assumption = Assumption.fromStatementAndReference(statement, reference, context);
|
|
65
64
|
|
|
66
|
-
|
|
65
|
+
assumption.validate(context);
|
|
67
66
|
|
|
68
|
-
|
|
67
|
+
statementUnifiesWithReference = true;
|
|
68
|
+
}, context);
|
|
69
69
|
}
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -1,148 +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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
|
|
12
|
-
const _elements = require("../../elements");
|
|
13
|
-
const _instantiate = require("../../process/instantiate");
|
|
14
|
-
const _element = require("../../utilities/element");
|
|
15
|
-
const _string = require("../../utilities/string");
|
|
16
|
-
const _context = require("../../utilities/context");
|
|
17
|
-
function _interop_require_default(obj) {
|
|
18
|
-
return obj && obj.__esModule ? obj : {
|
|
19
|
-
default: obj
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
const _default = (0, _elements.define)(class MetaLevelSubstitution extends _substitution.default {
|
|
23
|
-
constructor(context, string, node, targetReference, replacementStatement){
|
|
24
|
-
super(context, string, node);
|
|
25
|
-
this.targetReference = targetReference;
|
|
26
|
-
this.replacementStatement = replacementStatement;
|
|
27
|
-
}
|
|
28
|
-
getTargetReference() {
|
|
29
|
-
return this.targetReference;
|
|
30
|
-
}
|
|
31
|
-
getReplacementStatement() {
|
|
32
|
-
return this.replacementStatement;
|
|
33
|
-
}
|
|
34
|
-
getMetaLevelSubstitutionNode() {
|
|
35
|
-
const node = this.getNode(), metaLevelSubstitutionNode = node; ///
|
|
36
|
-
return metaLevelSubstitutionNode;
|
|
37
|
-
}
|
|
38
|
-
getTargetNode() {
|
|
39
|
-
const targetReferenceNode = this.targetReference.getNode(), tergetNode = targetReferenceNode; ///
|
|
40
|
-
return tergetNode;
|
|
41
|
-
}
|
|
42
|
-
getReplacementNode() {
|
|
43
|
-
const replacementStatementNode = this.replacementStatement.getNode(), replacementNode = replacementStatementNode; ///
|
|
44
|
-
return replacementNode;
|
|
45
|
-
}
|
|
46
|
-
matchMetaLevelSubstitutionNode(metaLevelSubstitutionNode) {
|
|
47
|
-
const node = metaLevelSubstitutionNode, nodeMatches = this.matchNode(node), metaLevelSubstitutionNodeMatches = nodeMatches; ///
|
|
48
|
-
return metaLevelSubstitutionNodeMatches;
|
|
49
|
-
}
|
|
50
|
-
findValidMetaLevelSubstiution(context) {
|
|
51
|
-
const metaLevelSubstitutionNode = this.getMetaLevelSubstitutionNode(), metaLevelSubstitution = context.findMetaLevelSubstitutionByMetaLevelSubstitutionNode(metaLevelSubstitutionNode), validMetaLevelSubstitution = metaLevelSubstitution; ///
|
|
52
|
-
return validMetaLevelSubstitution;
|
|
53
|
-
}
|
|
54
|
-
validate(generalContext, specificContext) {
|
|
55
|
-
let metaLevelSubstitution = null;
|
|
56
|
-
const context = specificContext, metaLevelSubstitutionString = this.getString(); ///
|
|
57
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution...`);
|
|
58
|
-
const validMetaLevelSubstitution = this.findValidMetaLevelSubstiution(context);
|
|
59
|
-
if (validMetaLevelSubstitution) {
|
|
60
|
-
metaLevelSubstitution = validMetaLevelSubstitution; ///
|
|
61
|
-
context.debug(`...the '${metaLevelSubstitutionString}' meta-level substitution is already valid.`);
|
|
62
|
-
} else {
|
|
63
|
-
let validates = false;
|
|
64
|
-
const targetReferenceValidates = this.validateTargetReference(generalContext, specificContext);
|
|
65
|
-
if (targetReferenceValidates) {
|
|
66
|
-
const replacementStatementValidates = this.validateReplacementStatement(generalContext, specificContext);
|
|
67
|
-
if (replacementStatementValidates) {
|
|
68
|
-
validates = true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
if (validates) {
|
|
72
|
-
metaLevelSubstitution = this; ///
|
|
73
|
-
context.addMetaLevelSubstitution(metaLevelSubstitution);
|
|
74
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution.`);
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
return metaLevelSubstitution;
|
|
78
|
-
}
|
|
79
|
-
validateTargetReference(generalContext, specificContext) {
|
|
80
|
-
let targetReferenceValidates = false;
|
|
81
|
-
const context = generalContext, targetReferenceString = this.targetReference.getString(), metaLevelSubstitutionString = this.getString(); ///
|
|
82
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution's '${targetReferenceString}' target reference...`);
|
|
83
|
-
const targetReference = this.targetReference.validate(context);
|
|
84
|
-
if (targetReference !== null) {
|
|
85
|
-
targetReferenceValidates = true;
|
|
86
|
-
}
|
|
87
|
-
if (targetReferenceValidates) {
|
|
88
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution's '${targetReferenceString}' target reference...`);
|
|
89
|
-
}
|
|
90
|
-
return targetReferenceValidates;
|
|
91
|
-
}
|
|
92
|
-
validateReplacementStatement(generalContext, specificContext) {
|
|
93
|
-
let replacementStatementValidates = false;
|
|
94
|
-
const context = this.getContext(), replacementStatementString = this.replacementStatement.getString(), metaLevelSubstitutionString = this.getString(); ///
|
|
95
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution's '${replacementStatementString}' replacement statement...`);
|
|
96
|
-
(0, _context.descend)((context)=>{
|
|
97
|
-
const replacementStatement = this.replacementStatement.validate(context);
|
|
98
|
-
if (replacementStatement !== null) {
|
|
99
|
-
replacementStatementValidates = true;
|
|
100
|
-
}
|
|
101
|
-
}, context);
|
|
102
|
-
if (replacementStatementValidates) {
|
|
103
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution's '${replacementStatementString}' replacement statement.`);
|
|
104
|
-
}
|
|
105
|
-
return replacementStatementValidates;
|
|
106
|
-
}
|
|
107
|
-
toJSON() {
|
|
108
|
-
const context = this.getContext();
|
|
109
|
-
return (0, _context.serialise)((context)=>{
|
|
110
|
-
const string = this.getString(), json = {
|
|
111
|
-
context,
|
|
112
|
-
string
|
|
113
|
-
};
|
|
114
|
-
return json;
|
|
115
|
-
}, context);
|
|
116
|
-
}
|
|
117
|
-
static name = "MetaLevelSubstitution";
|
|
118
|
-
static fromJSON(json, context) {
|
|
119
|
-
let metaLevelSubstitution;
|
|
120
|
-
(0, _context.unserialise)((json, context)=>{
|
|
121
|
-
(0, _context.instantiate)((context)=>{
|
|
122
|
-
const { string } = json, metaLevelSubstitutionNode = (0, _instantiate.instantiateMetaLevelSubstitution)(string, context), node = metaLevelSubstitutionNode, targetReference = targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context), replacementStatement = replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context);
|
|
123
|
-
metaLevelSubstitution = new MetaLevelSubstitution(context, string, node, targetReference, replacementStatement);
|
|
124
|
-
}, context);
|
|
125
|
-
}, json, context);
|
|
126
|
-
return metaLevelSubstitution;
|
|
127
|
-
}
|
|
128
|
-
static fromStatementAndReference(statement, reference, context) {
|
|
129
|
-
let metaLevelSubstitution;
|
|
130
|
-
(0, _context.simplify)((context)=>{
|
|
131
|
-
(0, _context.instantiate)((context)=>{
|
|
132
|
-
const metaLevelSubstitutionString = (0, _string.metaLevelSubstitutionStringFromStatementAndReference)(statement, reference), string = metaLevelSubstitutionString, metaLevelSubstitutionNode = (0, _instantiate.instantiateMetaLevelSubstitution)(string, context);
|
|
133
|
-
metaLevelSubstitution = (0, _element.metaLevelSubstitutionFromMetaLevelSubstitutionNode)(metaLevelSubstitutionNode, context);
|
|
134
|
-
}, context);
|
|
135
|
-
}, context);
|
|
136
|
-
return metaLevelSubstitution;
|
|
137
|
-
}
|
|
138
|
-
});
|
|
139
|
-
function targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
140
|
-
const targetReferenceNode = metaLevelSubstitutionNode.getTargetReferenceNode(), targetReference = context.findReferenceByReferenceNode(targetReferenceNode);
|
|
141
|
-
return targetReference;
|
|
142
|
-
}
|
|
143
|
-
function replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
144
|
-
const replacementStatementNode = metaLevelSubstitutionNode.getReplacementStatementNode(), replacementStatement = context.findStatementByStatementNode(replacementStatementNode);
|
|
145
|
-
return replacementStatement;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3N1YnN0aXR1dGlvbi9tZXRhTGV2ZWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdWJzdGl0dXRpb24gZnJvbSBcIi4uL3N1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlTWV0YUxldmVsU3Vic3RpdHV0aW9uIH0gZnJvbSBcIi4uLy4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IG1ldGFMZXZlbFN1YnN0aXR1dGlvbkZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5pbXBvcnQgeyBtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmdGcm9tU3RhdGVtZW50QW5kUmVmZXJlbmNlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGRlc2NlbmQsIHNpbXBsaWZ5LCBzZXJpYWxpc2UsIHVuc2VyaWFsaXNlLCBpbnN0YW50aWF0ZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgTWV0YUxldmVsU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCB0YXJnZXRSZWZlcmVuY2UsIHJlcGxhY2VtZW50U3RhdGVtZW50KSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlKTtcblxuICAgIHRoaXMudGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlO1xuICAgIHRoaXMucmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSByZXBsYWNlbWVudFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldFRhcmdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy50YXJnZXRSZWZlcmVuY2U7XG4gIH1cblxuICBnZXRSZXBsYWNlbWVudFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5yZXBsYWNlbWVudFN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0Tm9kZSgpIHtcbiAgICBjb25zdCB0YXJnZXRSZWZlcmVuY2VOb2RlID0gdGhpcy50YXJnZXRSZWZlcmVuY2UuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHRlcmdldE5vZGUgPSB0YXJnZXRSZWZlcmVuY2VOb2RlOyAvLy9cblxuICAgIHJldHVybiB0ZXJnZXROb2RlO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IHRoaXMucmVwbGFjZW1lbnRTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHJlcGxhY2VtZW50Tm9kZSA9IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZTsgLy8vXG5cbiAgICByZXR1cm4gcmVwbGFjZW1lbnROb2RlO1xuICB9XG5cbiAgbWF0Y2hNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlKG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gbWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIGZpbmRWYWxpZE1ldGFMZXZlbFN1YnN0aXV0aW9uKGNvbnRleHQpIHtcbiAgICBjb25zdCBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlID0gdGhpcy5nZXRNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uID0gY29udGV4dC5maW5kTWV0YUxldmVsU3Vic3RpdHV0aW9uQnlNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlKG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIHZhbGlkTWV0YUxldmVsU3Vic3RpdHV0aW9uID0gbWV0YUxldmVsU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gdmFsaWRNZXRhTGV2ZWxTdWJzdGl0dXRpb247XG4gIH1cblxuICB2YWxpZGF0ZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IG1ldGFMZXZlbFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkTWV0YUxldmVsU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kVmFsaWRNZXRhTGV2ZWxTdWJzdGl1dGlvbihjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZE1ldGFMZXZlbFN1YnN0aXR1dGlvbikge1xuICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uID0gdmFsaWRNZXRhTGV2ZWxTdWJzdGl0dXRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udGhlICcke21ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgc3Vic3RpdHV0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVRhcmdldFJlZmVyZW5jZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHRhcmdldFJlZmVyZW5jZVZhbGlkYXRlcykge1xuICAgICAgICBjb25zdCByZXBsYWNlbWVudFN0YXRlbWVudFZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGVSZXBsYWNlbWVudFN0YXRlbWVudChnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgICBpZiAocmVwbGFjZW1lbnRTdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRNZXRhTGV2ZWxTdWJzdGl0dXRpb24obWV0YUxldmVsU3Vic3RpdHV0aW9uKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgc3Vic3RpdHV0aW9uLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhTGV2ZWxTdWJzdGl0dXRpb247XG4gIH1cblxuICB2YWxpZGF0ZVRhcmdldFJlZmVyZW5jZShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHRhcmdldFJlZmVyZW5jZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICB0YXJnZXRSZWZlcmVuY2VTdHJpbmcgPSB0aGlzLnRhcmdldFJlZmVyZW5jZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHttZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmd9JyBtZXRhLWxldmVsIHN1YnN0aXR1dGlvbidzICcke3RhcmdldFJlZmVyZW5jZVN0cmluZ30nIHRhcmdldCByZWZlcmVuY2UuLi5gKTtcblxuICAgIGNvbnN0IHRhcmdldFJlZmVyZW5jZSA9IHRoaXMudGFyZ2V0UmVmZXJlbmNlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgaWYgKHRhcmdldFJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgICAgdGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgc3Vic3RpdHV0aW9uJ3MgJyR7dGFyZ2V0UmVmZXJlbmNlU3RyaW5nfScgdGFyZ2V0IHJlZmVyZW5jZS4uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXRSZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVJlcGxhY2VtZW50U3RhdGVtZW50KGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcmVwbGFjZW1lbnRTdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKSxcbiAgICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudFN0cmluZyA9IHRoaXMucmVwbGFjZW1lbnRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7bWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nfScgbWV0YS1sZXZlbCBzdWJzdGl0dXRpb24ncyAnJHtyZXBsYWNlbWVudFN0YXRlbWVudFN0cmluZ30nIHJlcGxhY2VtZW50IHN0YXRlbWVudC4uLmApO1xuXG4gICAgZGVzY2VuZCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVwbGFjZW1lbnRTdGF0ZW1lbnQgPSB0aGlzLnJlcGxhY2VtZW50U3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVwbGFjZW1lbnRTdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgcmVwbGFjZW1lbnRTdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgaWYgKHJlcGxhY2VtZW50U3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke21ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ30nIG1ldGEtbGV2ZWwgc3Vic3RpdHV0aW9uJ3MgJyR7cmVwbGFjZW1lbnRTdGF0ZW1lbnRTdHJpbmd9JyByZXBsYWNlbWVudCBzdGF0ZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICBzdHJpbmdcbiAgICAgICAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIk1ldGFMZXZlbFN1YnN0aXR1dGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IG1ldGFMZXZlbFN1YnN0aXR1dGlvbjtcblxuICAgIHVuc2VyaWFsaXNlKChqc29uLCBjb250ZXh0KSA9PiB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgbWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSA9IGluc3RhbnRpYXRlTWV0YUxldmVsU3Vic3RpdHV0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdGFyZ2V0UmVmZXJlbmNlID0gdGFyZ2V0UmVmZXJlbmNlRnJvbU1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUobWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZShtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb24gPSBuZXcgTWV0YUxldmVsU3Vic3RpdHV0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgdGFyZ2V0UmVmZXJlbmNlLCByZXBsYWNlbWVudFN0YXRlbWVudCk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9LCBqc29uLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBtZXRhTGV2ZWxTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudEFuZFJlZmVyZW5jZShzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgY29udGV4dCkge1xuICAgIGxldCBtZXRhTGV2ZWxTdWJzdGl0dXRpb247XG5cbiAgICBzaW1wbGlmeSgoY29udGV4dCkgPT4ge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nID0gbWV0YUxldmVsU3Vic3RpdHV0aW9uU3RyaW5nRnJvbVN0YXRlbWVudEFuZFJlZmVyZW5jZShzdGF0ZW1lbnQsIHJlZmVyZW5jZSksXG4gICAgICAgICAgICAgIHN0cmluZyA9IG1ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZywgIC8vL1xuICAgICAgICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlID0gaW5zdGFudGlhdGVNZXRhTGV2ZWxTdWJzdGl0dXRpb24oc3RyaW5nLCBjb250ZXh0KTtcblxuICAgICAgICBtZXRhTGV2ZWxTdWJzdGl0dXRpb24gPSBtZXRhTGV2ZWxTdWJzdGl0dXRpb25Gcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZShtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIG1ldGFMZXZlbFN1YnN0aXR1dGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHRhcmdldFJlZmVyZW5jZUZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlKG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgdGFyZ2V0UmVmZXJlbmNlTm9kZSA9IG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUuZ2V0VGFyZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICB0YXJnZXRSZWZlcmVuY2UgPSBjb250ZXh0LmZpbmRSZWZlcmVuY2VCeVJlZmVyZW5jZU5vZGUodGFyZ2V0UmVmZXJlbmNlTm9kZSk7XG5cbiAgcmV0dXJuIHRhcmdldFJlZmVyZW5jZTtcbn1cblxuZnVuY3Rpb24gcmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZShtZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSA9IG1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUuZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCksXG4gICAgICAgIHJlcGxhY2VtZW50U3RhdGVtZW50ID0gY29udGV4dC5maW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlKHJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSk7XG5cbiAgcmV0dXJuIHJlcGxhY2VtZW50U3RhdGVtZW50O1xufVxuIl0sIm5hbWVzIjpbImRlZmluZSIsIk1ldGFMZXZlbFN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwidGFyZ2V0UmVmZXJlbmNlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJnZXRUYXJnZXRSZWZlcmVuY2UiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudCIsImdldE1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUiLCJnZXROb2RlIiwibWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSIsImdldFRhcmdldE5vZGUiLCJ0YXJnZXRSZWZlcmVuY2VOb2RlIiwidGVyZ2V0Tm9kZSIsImdldFJlcGxhY2VtZW50Tm9kZSIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50Tm9kZSIsIm1hdGNoTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSIsIm5vZGVNYXRjaGVzIiwibWF0Y2hOb2RlIiwibWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJmaW5kVmFsaWRNZXRhTGV2ZWxTdWJzdGl1dGlvbiIsIm1ldGFMZXZlbFN1YnN0aXR1dGlvbiIsImZpbmRNZXRhTGV2ZWxTdWJzdGl0dXRpb25CeU1ldGFMZXZlbFN1YnN0aXR1dGlvbk5vZGUiLCJ2YWxpZE1ldGFMZXZlbFN1YnN0aXR1dGlvbiIsInZhbGlkYXRlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImRlYnVnIiwidmFsaWRhdGVzIiwidGFyZ2V0UmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVUYXJnZXRSZWZlcmVuY2UiLCJyZXBsYWNlbWVudFN0YXRlbWVudFZhbGlkYXRlcyIsInZhbGlkYXRlUmVwbGFjZW1lbnRTdGF0ZW1lbnQiLCJhZGRNZXRhTGV2ZWxTdWJzdGl0dXRpb24iLCJ0YXJnZXRSZWZlcmVuY2VTdHJpbmciLCJnZXRDb250ZXh0IiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRTdHJpbmciLCJkZXNjZW5kIiwidG9KU09OIiwic2VyaWFsaXNlIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsInVuc2VyaWFsaXNlIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZU1ldGFMZXZlbFN1YnN0aXR1dGlvbiIsInRhcmdldFJlZmVyZW5jZUZyb21NZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlIiwicmVwbGFjZW1lbnRTdGF0ZW1lbnRGcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnRBbmRSZWZlcmVuY2UiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzaW1wbGlmeSIsIm1ldGFMZXZlbFN1YnN0aXR1dGlvblN0cmluZ0Zyb21TdGF0ZW1lbnRBbmRSZWZlcmVuY2UiLCJtZXRhTGV2ZWxTdWJzdGl0dXRpb25Gcm9tTWV0YUxldmVsU3Vic3RpdHV0aW9uTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlSZWZlcmVuY2VOb2RlIiwiZ2V0UmVwbGFjZW1lbnRT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
|
|
@@ -1,40 +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 MetaLevelSubstitutionNode;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _substitution = /*#__PURE__*/ _interop_require_default(require("../../node/substitution"));
|
|
12
|
-
const _ruleNames = require("../../ruleNames");
|
|
13
|
-
function _interop_require_default(obj) {
|
|
14
|
-
return obj && obj.__esModule ? obj : {
|
|
15
|
-
default: obj
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
class MetaLevelSubstitutionNode extends _substitution.default {
|
|
19
|
-
getTargetReferenceNode() {
|
|
20
|
-
const referenceNode = this.getReferenceNode(), targetReferenceNode = referenceNode; ///
|
|
21
|
-
return targetReferenceNode;
|
|
22
|
-
}
|
|
23
|
-
getReplacementStatementNode() {
|
|
24
|
-
const statementNode = this.getStatementNode(), replacementStatementNode = statementNode; ///
|
|
25
|
-
return replacementStatementNode;
|
|
26
|
-
}
|
|
27
|
-
getReferenceNode() {
|
|
28
|
-
const ruleName = _ruleNames.REFERENCE_RULE_NAME, referenceNode = this.getNodeByRuleName(ruleName);
|
|
29
|
-
return referenceNode;
|
|
30
|
-
}
|
|
31
|
-
getStatementNode() {
|
|
32
|
-
const ruleName = _ruleNames.STATEMENT_RULE_NAME, statementNode = this.getFirstNodeByRuleName(ruleName);
|
|
33
|
-
return statementNode;
|
|
34
|
-
}
|
|
35
|
-
static fromRuleNameChildNodesOpacityAndPrecedence(ruleName, childNodes, opacity, precedence) {
|
|
36
|
-
return _substitution.default.fromRuleNameChildNodesOpacityAndPrecedence(MetaLevelSubstitutionNode, ruleName, childNodes, opacity, precedence);
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9ub2RlL3N1YnN0aXR1dGlvbi9tZXRhTGV2ZWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBTdWJzdGl0dXRpb25Ob2RlIGZyb20gXCIuLi8uLi9ub2RlL3N1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBTVEFURU1FTlRfUlVMRV9OQU1FLCBSRUZFUkVOQ0VfUlVMRV9OQU1FIH0gZnJvbSBcIi4uLy4uL3J1bGVOYW1lc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlIGV4dGVuZHMgU3Vic3RpdHV0aW9uTm9kZSB7XG4gIGdldFRhcmdldFJlZmVyZW5jZU5vZGUoKSB7XG4gICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuZ2V0UmVmZXJlbmNlTm9kZSgpLFxuICAgICAgICAgIHRhcmdldFJlZmVyZW5jZU5vZGUgPSByZWZlcmVuY2VOb2RlOyAvLy9cblxuICAgIHJldHVybiB0YXJnZXRSZWZlcmVuY2VOb2RlO1xuICB9XG5cbiAgZ2V0UmVwbGFjZW1lbnRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldFN0YXRlbWVudE5vZGUoKSxcbiAgICAgICAgICByZXBsYWNlbWVudFN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2RlOyAvLy9cblxuICAgIHJldHVybiByZXBsYWNlbWVudFN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRSZWZlcmVuY2VOb2RlKCkge1xuICAgIGNvbnN0IHJ1bGVOYW1lID0gUkVGRVJFTkNFX1JVTEVfTkFNRSxcbiAgICAgICAgICByZWZlcmVuY2VOb2RlID0gdGhpcy5nZXROb2RlQnlSdWxlTmFtZShydWxlTmFtZSk7XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTtcbiAgfVxuXG4gIGdldFN0YXRlbWVudE5vZGUoKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBTVEFURU1FTlRfUlVMRV9OQU1FLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZUJ5UnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBzdGF0aWMgZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlKHJ1bGVOYW1lLCBjaGlsZE5vZGVzLCBvcGFjaXR5LCBwcmVjZWRlbmNlKSB7IHJldHVybiBTdWJzdGl0dXRpb25Ob2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZShNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSk7IH1cbn1cbiJdLCJuYW1lcyI6WyJNZXRhTGV2ZWxTdWJzdGl0dXRpb25Ob2RlIiwiU3Vic3RpdHV0aW9uTm9kZSIsImdldFRhcmdldFJlZmVyZW5jZU5vZGUiLCJyZWZlcmVuY2VOb2RlIiwiZ2V0UmVmZXJlbmNlTm9kZSIsInRhcmdldFJlZmVyZW5jZU5vZGUiLCJnZXRSZXBsYWNlbWVudFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInJlcGxhY2VtZW50U3RhdGVtZW50Tm9kZSIsInJ1bGVOYW1lIiwiUkVGRVJFTkNFX1JVTEVfTkFNRSIsImdldE5vZGVCeVJ1bGVOYW1lIiwiU1RBVEVNRU5UX1JVTEVfTkFNRSIsImdldEZpcnN0Tm9kZUJ5UnVsZU5hbWUiLCJmcm9tUnVsZU5hbWVDaGlsZE5vZGVzT3BhY2l0eUFuZFByZWNlZGVuY2UiLCJjaGlsZE5vZGVzIiwib3BhY2l0eSIsInByZWNlZGVuY2UiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQU1BOzs7ZUFBcUJBOzs7cUVBSlE7MkJBRTRCOzs7Ozs7QUFFMUMsTUFBTUEsa0NBQWtDQyxxQkFBZ0I7SUFDckVDLHlCQUF5QjtRQUN2QixNQUFNQyxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsSUFDckNDLHNCQUFzQkYsZUFBZSxHQUFHO1FBRTlDLE9BQU9FO0lBQ1Q7SUFFQUMsOEJBQThCO1FBQzVCLE1BQU1DLGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQixJQUNyQ0MsMkJBQTJCRixlQUFlLEdBQUc7UUFFbkQsT0FBT0U7SUFDVDtJQUVBTCxtQkFBbUI7UUFDakIsTUFBTU0sV0FBV0MsOEJBQW1CLEVBQzlCUixnQkFBZ0IsSUFBSSxDQUFDUyxpQkFBaUIsQ0FBQ0Y7UUFFN0MsT0FBT1A7SUFDVDtJQUVBSyxtQkFBbUI7UUFDakIsTUFBTUUsV0FBV0csOEJBQW1CLEVBQzlCTixnQkFBZ0IsSUFBSSxDQUFDTyxzQkFBc0IsQ0FBQ0o7UUFFbEQsT0FBT0g7SUFDVDtJQUVBLE9BQU9RLDJDQUEyQ0wsUUFBUSxFQUFFTSxVQUFVLEVBQUVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFO1FBQUUsT0FBT2pCLHFCQUFnQixDQUFDYywwQ0FBMEMsQ0FBQ2YsMkJBQTJCVSxVQUFVTSxZQUFZQyxTQUFTQztJQUFhO0FBQzNPIn0=
|
|
@@ -1,212 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
import Substitution from "../substitution";
|
|
4
|
-
|
|
5
|
-
import { define } from "../../elements";
|
|
6
|
-
import { instantiateMetaLevelSubstitution } from "../../process/instantiate";
|
|
7
|
-
import { metaLevelSubstitutionFromMetaLevelSubstitutionNode } from "../../utilities/element";
|
|
8
|
-
import { metaLevelSubstitutionStringFromStatementAndReference } from "../../utilities/string";
|
|
9
|
-
import { descend, simplify, serialise, unserialise, instantiate } from "../../utilities/context";
|
|
10
|
-
|
|
11
|
-
export default define(class MetaLevelSubstitution extends Substitution {
|
|
12
|
-
constructor(context, string, node, targetReference, replacementStatement) {
|
|
13
|
-
super(context, string, node);
|
|
14
|
-
|
|
15
|
-
this.targetReference = targetReference;
|
|
16
|
-
this.replacementStatement = replacementStatement;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
getTargetReference() {
|
|
20
|
-
return this.targetReference;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
getReplacementStatement() {
|
|
24
|
-
return this.replacementStatement;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
getMetaLevelSubstitutionNode() {
|
|
28
|
-
const node = this.getNode(),
|
|
29
|
-
metaLevelSubstitutionNode = node; ///
|
|
30
|
-
|
|
31
|
-
return metaLevelSubstitutionNode;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
getTargetNode() {
|
|
35
|
-
const targetReferenceNode = this.targetReference.getNode(),
|
|
36
|
-
tergetNode = targetReferenceNode; ///
|
|
37
|
-
|
|
38
|
-
return tergetNode;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
getReplacementNode() {
|
|
42
|
-
const replacementStatementNode = this.replacementStatement.getNode(),
|
|
43
|
-
replacementNode = replacementStatementNode; ///
|
|
44
|
-
|
|
45
|
-
return replacementNode;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
matchMetaLevelSubstitutionNode(metaLevelSubstitutionNode) {
|
|
49
|
-
const node = metaLevelSubstitutionNode, ///
|
|
50
|
-
nodeMatches = this.matchNode(node),
|
|
51
|
-
metaLevelSubstitutionNodeMatches = nodeMatches; ///
|
|
52
|
-
|
|
53
|
-
return metaLevelSubstitutionNodeMatches;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
findValidMetaLevelSubstiution(context) {
|
|
57
|
-
const metaLevelSubstitutionNode = this.getMetaLevelSubstitutionNode(),
|
|
58
|
-
metaLevelSubstitution = context.findMetaLevelSubstitutionByMetaLevelSubstitutionNode(metaLevelSubstitutionNode),
|
|
59
|
-
validMetaLevelSubstitution = metaLevelSubstitution; ///
|
|
60
|
-
|
|
61
|
-
return validMetaLevelSubstitution;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
validate(generalContext, specificContext) {
|
|
65
|
-
let metaLevelSubstitution = null;
|
|
66
|
-
|
|
67
|
-
const context = specificContext, ///
|
|
68
|
-
metaLevelSubstitutionString = this.getString(); ///
|
|
69
|
-
|
|
70
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution...`);
|
|
71
|
-
|
|
72
|
-
const validMetaLevelSubstitution = this.findValidMetaLevelSubstiution(context);
|
|
73
|
-
|
|
74
|
-
if (validMetaLevelSubstitution) {
|
|
75
|
-
metaLevelSubstitution = validMetaLevelSubstitution; ///
|
|
76
|
-
|
|
77
|
-
context.debug(`...the '${metaLevelSubstitutionString}' meta-level substitution is already valid.`);
|
|
78
|
-
} else {
|
|
79
|
-
let validates = false;
|
|
80
|
-
|
|
81
|
-
const targetReferenceValidates = this.validateTargetReference(generalContext, specificContext);
|
|
82
|
-
|
|
83
|
-
if (targetReferenceValidates) {
|
|
84
|
-
const replacementStatementValidates = this.validateReplacementStatement(generalContext, specificContext);
|
|
85
|
-
|
|
86
|
-
if (replacementStatementValidates) {
|
|
87
|
-
validates = true;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
if (validates) {
|
|
92
|
-
metaLevelSubstitution = this; ///
|
|
93
|
-
|
|
94
|
-
context.addMetaLevelSubstitution(metaLevelSubstitution);
|
|
95
|
-
|
|
96
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution.`);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return metaLevelSubstitution;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
validateTargetReference(generalContext, specificContext) {
|
|
104
|
-
let targetReferenceValidates = false;
|
|
105
|
-
|
|
106
|
-
const context = generalContext, ///
|
|
107
|
-
targetReferenceString = this.targetReference.getString(),
|
|
108
|
-
metaLevelSubstitutionString = this.getString(); ///
|
|
109
|
-
|
|
110
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution's '${targetReferenceString}' target reference...`);
|
|
111
|
-
|
|
112
|
-
const targetReference = this.targetReference.validate(context);
|
|
113
|
-
|
|
114
|
-
if (targetReference !== null) {
|
|
115
|
-
targetReferenceValidates = true;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (targetReferenceValidates) {
|
|
119
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution's '${targetReferenceString}' target reference...`);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return targetReferenceValidates;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
validateReplacementStatement(generalContext, specificContext) {
|
|
126
|
-
let replacementStatementValidates = false;
|
|
127
|
-
|
|
128
|
-
const context = this.getContext(),
|
|
129
|
-
replacementStatementString = this.replacementStatement.getString(),
|
|
130
|
-
metaLevelSubstitutionString = this.getString(); ///
|
|
131
|
-
|
|
132
|
-
context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution's '${replacementStatementString}' replacement statement...`);
|
|
133
|
-
|
|
134
|
-
descend((context) => {
|
|
135
|
-
const replacementStatement = this.replacementStatement.validate(context);
|
|
136
|
-
|
|
137
|
-
if (replacementStatement !== null) {
|
|
138
|
-
replacementStatementValidates = true;
|
|
139
|
-
}
|
|
140
|
-
}, context);
|
|
141
|
-
|
|
142
|
-
if (replacementStatementValidates) {
|
|
143
|
-
context.debug(`...validated the '${metaLevelSubstitutionString}' meta-level substitution's '${replacementStatementString}' replacement statement.`);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
return replacementStatementValidates;
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
toJSON() {
|
|
150
|
-
const context = this.getContext();
|
|
151
|
-
|
|
152
|
-
return serialise((context) => {
|
|
153
|
-
const string = this.getString(),
|
|
154
|
-
json = {
|
|
155
|
-
context,
|
|
156
|
-
string
|
|
157
|
-
};
|
|
158
|
-
|
|
159
|
-
return json;
|
|
160
|
-
}, context);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
static name = "MetaLevelSubstitution";
|
|
164
|
-
|
|
165
|
-
static fromJSON(json, context) {
|
|
166
|
-
let metaLevelSubstitution;
|
|
167
|
-
|
|
168
|
-
unserialise((json, context) => {
|
|
169
|
-
instantiate((context) => {
|
|
170
|
-
const { string } = json,
|
|
171
|
-
metaLevelSubstitutionNode = instantiateMetaLevelSubstitution(string, context),
|
|
172
|
-
node = metaLevelSubstitutionNode, ///
|
|
173
|
-
targetReference = targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
|
|
174
|
-
replacementStatement = replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context);
|
|
175
|
-
|
|
176
|
-
metaLevelSubstitution = new MetaLevelSubstitution(context, string, node, targetReference, replacementStatement);
|
|
177
|
-
}, context);
|
|
178
|
-
}, json, context);
|
|
179
|
-
|
|
180
|
-
return metaLevelSubstitution;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
static fromStatementAndReference(statement, reference, context) {
|
|
184
|
-
let metaLevelSubstitution;
|
|
185
|
-
|
|
186
|
-
simplify((context) => {
|
|
187
|
-
instantiate((context) => {
|
|
188
|
-
const metaLevelSubstitutionString = metaLevelSubstitutionStringFromStatementAndReference(statement, reference),
|
|
189
|
-
string = metaLevelSubstitutionString, ///
|
|
190
|
-
metaLevelSubstitutionNode = instantiateMetaLevelSubstitution(string, context);
|
|
191
|
-
|
|
192
|
-
metaLevelSubstitution = metaLevelSubstitutionFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context);
|
|
193
|
-
}, context);
|
|
194
|
-
}, context);
|
|
195
|
-
|
|
196
|
-
return metaLevelSubstitution;
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
function targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
201
|
-
const targetReferenceNode = metaLevelSubstitutionNode.getTargetReferenceNode(),
|
|
202
|
-
targetReference = context.findReferenceByReferenceNode(targetReferenceNode);
|
|
203
|
-
|
|
204
|
-
return targetReference;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
function replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context) {
|
|
208
|
-
const replacementStatementNode = metaLevelSubstitutionNode.getReplacementStatementNode(),
|
|
209
|
-
replacementStatement = context.findStatementByStatementNode(replacementStatementNode);
|
|
210
|
-
|
|
211
|
-
return replacementStatement;
|
|
212
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
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
|
-
}
|