occam-verify-cli 1.0.762 → 1.0.768

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.
Files changed (47) hide show
  1. package/lib/context/file/nominal.js +19 -51
  2. package/lib/context/literal.js +1 -1
  3. package/lib/context/nominal.js +3 -6
  4. package/lib/context.js +51 -20
  5. package/lib/element/assertion/satisfies.js +2 -2
  6. package/lib/element/assumption.js +24 -26
  7. package/lib/element/conclusion.js +6 -3
  8. package/lib/element/deduction.js +6 -3
  9. package/lib/element/equivalence.js +4 -2
  10. package/lib/element/frame.js +1 -1
  11. package/lib/element/judgement.js +4 -3
  12. package/lib/element/label.js +2 -2
  13. package/lib/element/proofAssertion/supposition.js +7 -3
  14. package/lib/element/reference.js +2 -2
  15. package/lib/element/statement.js +2 -1
  16. package/lib/element/subproof.js +2 -2
  17. package/lib/element/substitution/frame.js +7 -7
  18. package/lib/element/substitution/metaLevel.js +8 -8
  19. package/lib/element/substitution/reference.js +6 -6
  20. package/lib/element/substitution/statement.js +20 -22
  21. package/lib/element/substitution/term.js +6 -6
  22. package/lib/utilities/context.js +10 -31
  23. package/lib/utilities/unification.js +4 -4
  24. package/package.json +4 -4
  25. package/src/context/file/nominal.js +28 -78
  26. package/src/context/literal.js +1 -1
  27. package/src/context/nominal.js +2 -10
  28. package/src/context.js +82 -28
  29. package/src/element/assertion/satisfies.js +1 -1
  30. package/src/element/assumption.js +29 -31
  31. package/src/element/conclusion.js +7 -1
  32. package/src/element/deduction.js +7 -1
  33. package/src/element/equivalence.js +5 -1
  34. package/src/element/frame.js +1 -1
  35. package/src/element/judgement.js +6 -2
  36. package/src/element/label.js +1 -1
  37. package/src/element/proofAssertion/supposition.js +7 -1
  38. package/src/element/reference.js +1 -1
  39. package/src/element/statement.js +2 -0
  40. package/src/element/subproof.js +1 -1
  41. package/src/element/substitution/frame.js +9 -8
  42. package/src/element/substitution/metaLevel.js +10 -9
  43. package/src/element/substitution/reference.js +8 -7
  44. package/src/element/substitution/statement.js +30 -30
  45. package/src/element/substitution/term.js +8 -7
  46. package/src/utilities/context.js +7 -49
  47. package/src/utilities/unification.js +3 -3
@@ -14,7 +14,7 @@ const { nominalLexerFromNothing } = lexersUtilities,
14
14
  const nominalLexer = nominalLexerFromNothing(NominalLexer),
15
15
  nominalParser = nominalParserFromNothing(NominalParser); ///
16
16
 
17
- class NominalContext extends Context {
17
+ export default class NominalContext extends Context {
18
18
  constructor(context, lexer, parser) {
19
19
  super(context);
20
20
 
@@ -30,11 +30,7 @@ class NominalContext extends Context {
30
30
  return this.parser;
31
31
  }
32
32
 
33
- findMetaTypeByMetaTypeName(metaTypeName) {
34
- const metaType = findMetaTypeByMetaTypeName(metaTypeName);
35
-
36
- return metaType;
37
- }
33
+ findMetaTypeByMetaTypeName(metaTypeName) { return findMetaTypeByMetaTypeName(metaTypeName); }
38
34
 
39
35
  static fromNothing() {
40
36
  const context = null,
@@ -45,7 +41,3 @@ class NominalContext extends Context {
45
41
  return nominalContext;
46
42
  }
47
43
  }
48
-
49
- const nominalContext = NominalContext.fromNothing();
50
-
51
- export default nominalContext;
package/src/context.js CHANGED
@@ -136,23 +136,47 @@ export default class Context extends ContextBase {
136
136
  return ephemeralContext;
137
137
  }
138
138
 
139
- findRuleByReference(reference) {
140
- const context = this.getContext(),
141
- rule = context.findRuleByReference(reference);
139
+ findMetavariable(metavariable, context) {
140
+ const childContext = context; ///
141
+
142
+ context = this.getContext();
143
+
144
+ const parentContext = context; ///
145
+
146
+ metavariable = parentContext.findMetavariable(metavariable, childContext); ///
147
+
148
+ return metavariable;
149
+ }
150
+
151
+ findRuleByReference(reference, context) {
152
+ const childContext = context; ///
153
+
154
+ context = this.getContext();
155
+
156
+ const parentContext = context, ///
157
+ rule = parentContext.findRuleByReference(reference, childContext);
142
158
 
143
159
  return rule;
144
160
  }
145
161
 
146
- findTopLevelAssertionByReference(reference) {
147
- const context = this.getContext(),
148
- topLevelAssertion = context.findTopLevelAssertionByReference(reference);
162
+ findTopLevelAssertionByReference(reference, context) {
163
+ const childContext = context; ///
164
+
165
+ context = this.getContext();
166
+
167
+ const parentContext = context, ///
168
+ topLevelAssertion = parentContext.findTopLevelAssertionByReference(reference, childContext);
149
169
 
150
170
  return topLevelAssertion;
151
171
  }
152
172
 
153
- findTopLevelMetaAssertionsByReference(reference) {
154
- const context = this.getContext(),
155
- topLevelMetaAssertion = context.findTopLevelMetaAssertionsByReference(reference);
173
+ findTopLevelMetaAssertionsByReference(reference, context) {
174
+ const childContext = context; ///
175
+
176
+ context = this.getContext();
177
+
178
+ const parentContext = context, ///
179
+ topLevelMetaAssertion = parentContext.findTopLevelMetaAssertionsByReference(reference, childContext);
156
180
 
157
181
  return topLevelMetaAssertion;
158
182
  }
@@ -171,18 +195,6 @@ export default class Context extends ContextBase {
171
195
  return metaType;
172
196
  }
173
197
 
174
- findMetavariable(metavariable, context) {
175
- const childContext = context; ///
176
-
177
- context = this.getContext();
178
-
179
- const parentContext = context; ///
180
-
181
- metavariable = parentContext.findMetavariable(metavariable, childContext); ///
182
-
183
- return metavariable;
184
- }
185
-
186
198
  findTermByTermNode(termNode) {
187
199
  const context = this.getContext(),
188
200
  term = context.findTermByTermNode(termNode);
@@ -325,20 +337,38 @@ export default class Context extends ContextBase {
325
337
  }
326
338
 
327
339
  isMetavariablePresent(metavariable, context) {
328
- metavariable = this.findMetavariable(metavariable, context); ///
340
+ const childContext = context; ///
341
+
342
+ context = this.getContext();
329
343
 
330
- const metavariablePresent = (metavariable !== null);
344
+ const parentContext = context, ///
345
+ metavariablePresent = parentContext.isMetavariablePresent(metavariable, childContext);
331
346
 
332
347
  return metavariablePresent;
333
348
  }
334
349
 
335
- isLabelPresentByReference(reference) {
336
- const context = this.getContext(),
337
- labelPresent = context.isLabelPresentByReference(reference);
350
+ isLabelPresentByReference(reference, context) {
351
+ const childContext = context; ///
352
+
353
+ context = this.getContext();
354
+
355
+ const parentContext = context, ///
356
+ labelPresent = parentContext.isLabelPresentByReference(reference, childContext);
338
357
 
339
358
  return labelPresent;
340
359
  }
341
360
 
361
+ isTopLevelMetaAssertionPresentByReference(reference, context) {
362
+ const childContext = context; ///
363
+
364
+ context = this.getContext();
365
+
366
+ const parentContext = context, ///
367
+ topLevelMetaAssertionPresent = parentContext.isTopLevelMetaAssertionPresentByReference(reference, childContext);
368
+
369
+ return topLevelMetaAssertionPresent;
370
+ }
371
+
342
372
  isTermPresentByTermNode(termNode) {
343
373
  const context = this.getContext(),
344
374
  termPresent = context.isTermPresentByTermNode(termNode);
@@ -437,6 +467,12 @@ export default class Context extends ContextBase {
437
467
  return metaLevelSubstitutions;
438
468
  }
439
469
 
470
+ addTerms(terms) {
471
+ const context = this.getContext();
472
+
473
+ context.addTerms(terms);
474
+ }
475
+
440
476
  addTerm(term) {
441
477
  const context = this.getContext();
442
478
 
@@ -449,22 +485,40 @@ export default class Context extends ContextBase {
449
485
  context.addFrame(frame);
450
486
  }
451
487
 
488
+ addEquality(equality) {
489
+ const context = this.getContext();
490
+
491
+ context.addEquality(equality);
492
+ }
493
+
494
+ addJudgement(judgement) {
495
+ const context = this.getContext();
496
+
497
+ context.addJudgement(judgement);
498
+ }
499
+
452
500
  addStatement(statement) {
453
501
  const context = this.getContext();
454
502
 
455
503
  context.addStatement(statement);
456
504
  }
457
505
 
506
+ addAssertion(assertion) {
507
+ const context = this.getContext();
508
+
509
+ context.addAssertion(assertion);
510
+ }
511
+
458
512
  addReference(reference) {
459
513
  const context = this.getContext();
460
514
 
461
515
  context.addReference(reference);
462
516
  }
463
517
 
464
- addJudgement(judgement) {
518
+ addAssumption(assumption) {
465
519
  const context = this.getContext();
466
520
 
467
- context.addJudgement(judgement);
521
+ context.addAssumption(assumption);
468
522
  }
469
523
 
470
524
  addAssignment(assignment) {
@@ -96,7 +96,7 @@ export default define(class SatisfiesAssertion extends Assertion {
96
96
 
97
97
  context.trace(`Validating the '${satisfiesAssertionString}' satisfies assertino's '${referenceString}' reference...`);
98
98
 
99
- const axiom = context.findAxiomByReference(this.reference, context);
99
+ const axiom = context.findAxiomByReference(this.reference);
100
100
 
101
101
  if (axiom !== null) {
102
102
  const axiomSatisfiable = axiom.isSatisfiable();
@@ -87,12 +87,12 @@ export default define(class Assumption extends Element {
87
87
  } else {
88
88
  let validates = false;
89
89
 
90
- const referenceValidates = this.validateReference(stated, context);
90
+ const statementValidates = this.validateStatement(stated, context);
91
91
 
92
- if (referenceValidates) {
93
- const statementValidates = this.validateStatement(stated, context);
92
+ if (statementValidates) {
93
+ const referenceValidates = this.validateReference(stated, context);
94
94
 
95
- if (statementValidates) {
95
+ if (referenceValidates) {
96
96
  let validatesWhenStated = false,
97
97
  validatesWhenDerived = false;
98
98
 
@@ -131,7 +131,25 @@ export default define(class Assumption extends Element {
131
131
  const reference = this.reference.validate(context);
132
132
 
133
133
  if (reference !== null) {
134
- referenceValidates = true;
134
+ const metavariable = this.reference.getMetavariable(),
135
+ metavariablePresent = context.isMetavariablePresent(metavariable, context);
136
+
137
+ if (metavariablePresent) {
138
+ referenceValidates = true;
139
+ } else {
140
+ const topLevelMetaAssertions = context.findTopLevelMetaAssertionsByReference(this.reference, context),
141
+ topLevelMetaAssertionsCompare = topLevelMetaAssertions.some((topLevelMetaAssertion) => {
142
+ const topLevelMetaAssertionUnifies = this.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
143
+
144
+ if (topLevelMetaAssertionUnifies) {
145
+ return true;
146
+ }
147
+ });
148
+
149
+ if (topLevelMetaAssertionsCompare) {
150
+ referenceValidates = true;
151
+ }
152
+ }
135
153
  }
136
154
 
137
155
  if (referenceValidates) {
@@ -165,31 +183,13 @@ export default define(class Assumption extends Element {
165
183
  }
166
184
 
167
185
  validateWhenStated(context) {
168
- let validatesWhenStated = false;
186
+ let validatesWhenStated;
169
187
 
170
188
  const assumptionString = this.getString(); ///
171
189
 
172
190
  context.trace(`Validating the '${assumptionString}' stated assumption...`);
173
191
 
174
- const metavariable = this.reference.getMetavariable(),
175
- metavariablePresent = context.isMetavariablePresent(metavariable, context);
176
-
177
- if (metavariablePresent) {
178
- validatesWhenStated = true;
179
- } else {
180
- const topLevelMetaAssertions = context.findTopLevelMetaAssertionsByReference(this.reference),
181
- topLevelMetaAssertionsCompare = topLevelMetaAssertions.some((topLevelMetaAssertion) => {
182
- const topLevelMetaAssertionCompares = this.unifyTopLevelMetaAssertion(topLevelMetaAssertion, context);
183
-
184
- if (topLevelMetaAssertionCompares) {
185
- return true;
186
- }
187
- });
188
-
189
- if (topLevelMetaAssertionsCompare) {
190
- validatesWhenStated = true;
191
- }
192
- }
192
+ validatesWhenStated = true
193
193
 
194
194
  if (validatesWhenStated) {
195
195
  context.debug(`...validated the '${assumptionString}' stated assumption.`);
@@ -199,17 +199,13 @@ export default define(class Assumption extends Element {
199
199
  }
200
200
 
201
201
  validateWhenDerived(context) {
202
- let validatesWhenDerived = false;
202
+ let validatesWhenDerived;
203
203
 
204
204
  const assumptionString = this.getString(); ///
205
205
 
206
206
  context.trace(`Validating the '${assumptionString}' derived assumption...`);
207
207
 
208
- const topLevelMetaAssertionPresent = context.isTopLevelMetaAssertionPresentByReference(this.reference);
209
-
210
- if (topLevelMetaAssertionPresent) {
211
- validatesWhenDerived = true;
212
- }
208
+ validatesWhenDerived = true;
213
209
 
214
210
  if (validatesWhenDerived) {
215
211
  context.debug(`...validated the '${assumptionString}' derived assumption.`);
@@ -258,6 +254,8 @@ export default define(class Assumption extends Element {
258
254
 
259
255
  if (labelUnifies) {
260
256
  topLevelMetaAssertionUnifies = this.statement.unifyTopLevelMetaAssertion(topLevelMetaAssertion, generalContext, specificContext);
257
+
258
+ specificContext.commit(context);
261
259
  }
262
260
  }, specificContext);
263
261
 
@@ -5,7 +5,6 @@ import { Element } from "occam-languages";
5
5
  import { define } from "../elements";
6
6
  import { attempt, instantiate } from "../utilities/context";
7
7
  import { instantiateConclusion } from "../process/instantiate";
8
- import { statementFromConclusionNode } from "../utilities/element";
9
8
  import { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../utilities/json";
10
9
 
11
10
  export default define(class Conclusion extends Element {
@@ -161,3 +160,10 @@ export default define(class Conclusion extends Element {
161
160
  }, context);
162
161
  }
163
162
  });
163
+
164
+ function statementFromConclusionNode(conclusionNode, context) {
165
+ const statementNode = conclusionNode.getStatementNode(),
166
+ statement = context.findStatementByStatementNode(statementNode);
167
+
168
+ return statement;
169
+ }
@@ -5,7 +5,6 @@ import { Element } from "occam-languages";
5
5
  import { define } from "../elements";
6
6
  import { attempt, instantiate } from "../utilities/context";
7
7
  import { instantiateDeduction } from "../process/instantiate";
8
- import { statementFromDeductionNode } from "../utilities/element";
9
8
  import { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../utilities/json";
10
9
 
11
10
  export default define(class Deduction extends Element {
@@ -186,3 +185,10 @@ export default define(class Deduction extends Element {
186
185
  }, context);
187
186
  }
188
187
  });
188
+
189
+ function statementFromDeductionNode(deductionNode, context) {
190
+ const statementNode = deductionNode.getStatementNode(),
191
+ statement = context.findStatementByStatementNode(statementNode);
192
+
193
+ return statement;
194
+ }
@@ -4,11 +4,11 @@ import { Element } from "occam-languages";
4
4
  import { arrayUtilities } from "necessary";
5
5
 
6
6
  import { define } from "../elements";
7
- import { instantiate } from "../utilities/context";
8
7
  import { instantiateEquivalence } from "../process/instantiate";
9
8
  import { stripBracketsFromTermNode } from "../utilities/brackets";
10
9
  import { equivalenceStringFromTerms } from "../utilities/string";
11
10
  import { equivalenceFromEquivalenceNode } from "../utilities/element";
11
+ import { instantiate, sanitisedContextFromContext } from "../utilities/context";
12
12
 
13
13
  const { compress } = arrayUtilities;
14
14
 
@@ -246,6 +246,10 @@ export default define(class Equivalence extends Element {
246
246
  static name = "Equivalence";
247
247
 
248
248
  static fromEquality(equality, context) {
249
+ const santisedContext = sanitisedContextFromContext(context);
250
+
251
+ context = santisedContext; ///
252
+
249
253
  return instantiate((context) => {
250
254
  const terms = equality.getTerms(),
251
255
  equivalenceString = equivalenceStringFromTerms(terms),
@@ -316,7 +316,7 @@ export default define(class Frame extends Element {
316
316
 
317
317
  context.trace(`Validating the '${frameString}' frame's '${metavariableString}' metavariable...`);
318
318
 
319
- const metavariable = this.metavariable.validate(context), ///
319
+ const metavariable = this.metavariable.validate(context),
320
320
  metaTypeName = FRAME_META_TYPE_NAME,
321
321
  frameMetaType = context.findMetaTypeByMetaTypeName(metaTypeName),
322
322
  metavariableMetaTypeEqualToFrameMetaType = metavariable.isMetaTypeEqualTo(frameMetaType);
@@ -5,8 +5,8 @@ import { Element } from "occam-languages";
5
5
  import elements from "../elements";
6
6
 
7
7
  import { define } from "../elements";
8
- import { instantiate } from "../utilities/context";
9
8
  import { instantiateJudgement } from "../process/instantiate";
9
+ import { reconcile, instantiate } from "../utilities/context";
10
10
  import { judgementAssignmentFromJudgement } from "../process/assign";
11
11
 
12
12
  export default define(class Judgement extends Element {
@@ -75,6 +75,10 @@ export default define(class Judgement extends Element {
75
75
  } else {
76
76
  let validates = false;
77
77
 
78
+ reconcile((context) => {
79
+
80
+ }, context);
81
+
78
82
  const frameValidates = this.validateFrame(stated, context);
79
83
 
80
84
  if (frameValidates) {
@@ -179,7 +183,7 @@ export default define(class Judgement extends Element {
179
183
 
180
184
  const metavariable = this.assumption.getMetavariable(),
181
185
  reference = referenceFromMetavariable(metavariable, context),
182
- topLevelMetaAssertion = context.findTopLevelMetaAssertionByReference(reference),
186
+ topLevelMetaAssertion = context.findTopLevelMetaAssertionByReference(reference, context),
183
187
  substitutions = topLevelMetaAssertion.getSubstitutions(),
184
188
  frameComparesToSubstitutions = this.frame.compareSubstitutions(substitutions, context);
185
189
 
@@ -156,8 +156,8 @@ export default define(class Label extends Element {
156
156
  return instantiate((context) => {
157
157
  const { string } = json,
158
158
  labelNode = instantiateLabel(string, context),
159
- metavariable = metavariableFromLabelNode(labelNode, context),
160
159
  node = labelNode, ///
160
+ metavariable = metavariableFromLabelNode(labelNode, context),
161
161
  label = new Label(context, string, node, metavariable);
162
162
 
163
163
  return label;
@@ -4,8 +4,8 @@ import ProofAssertion from "../proofAssertion";
4
4
 
5
5
  import { define } from "../../elements";
6
6
  import { instantiateSupposition} from "../../process/instantiate";
7
+ import { procedureCallFromSuppositionNode } from "../../utilities/element";
7
8
  import { join, attempt, reconcile, instantiate } from "../../utilities/context";
8
- import { statementFromSuppositionNode, procedureCallFromSuppositionNode } from "../../utilities/element";
9
9
  import { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../../utilities/json";
10
10
 
11
11
  export default define(class Supposition extends ProofAssertion {
@@ -327,3 +327,9 @@ export default define(class Supposition extends ProofAssertion {
327
327
  }
328
328
  });
329
329
 
330
+ function statementFromSuppositionNode(suppositionNode, context) {
331
+ const statementNode = suppositionNode.getStatementNode(),
332
+ statement = context.findStatementByStatementNode(statementNode);
333
+
334
+ return statement;
335
+ }
@@ -130,7 +130,7 @@ export default define(class Reference extends Element {
130
130
 
131
131
  if (metaType === null) {
132
132
  const reference = this, ///
133
- labelPresent = context.isLabelPresentByReference(reference);
133
+ labelPresent = context.isLabelPresentByReference(reference, context);
134
134
 
135
135
  if (labelPresent) {
136
136
  validates = true;
@@ -266,6 +266,8 @@ export default define(class Statement extends Element {
266
266
  const deductionStatementUnfies = this.unifyStatement(deductionStatement, generalContext, specificContext);
267
267
 
268
268
  if (deductionStatementUnfies) {
269
+ specificContext.commit();
270
+
269
271
  deductionUnifies = true;
270
272
  }
271
273
  }, specificContext);
@@ -121,7 +121,7 @@ export default define(class Subproof extends Element {
121
121
  context.trace(`Unifying the '${subproofString}' subproof with the '${satisfiesAssertionString}' satisfies assertion...`)
122
122
 
123
123
  const reference = satisfiesAssertion.getReference(),
124
- axiom = context.findAxiomByReference(reference);
124
+ axiom = context.findAxiomByReference(reference, context);
125
125
 
126
126
  if (axiom !== null) {
127
127
  const axiomSatisfiable = axiom.isSatisfiable();
@@ -3,8 +3,8 @@
3
3
  import Substitution from "../substitution";
4
4
 
5
5
  import { define } from "../../elements";
6
- import { instantiate } from "../../utilities/context";
7
6
  import { instantiateFrameSubstitution } from "../../process/instantiate";
7
+ import { instantiate, sanitisedContextFromContext } from "../../utilities/context";
8
8
  import { frameSubstitutionStringFromFrameAndMetavariable } from "../../utilities/string";
9
9
  import { frameSubstitutionFromStatementNode, frameSubstitutionFromFrameSubstitutionNode } from "../../utilities/element";
10
10
 
@@ -73,11 +73,8 @@ export default define(class FrameSubstitution extends Substitution {
73
73
  validate(generalContext, specificContext) {
74
74
  let frameSubstitution = null;
75
75
 
76
- const context = this.getContext();
77
-
78
- specificContext = context; ///
79
-
80
- const frameSubstitutionString = this.getString(); ///
76
+ const context = specificContext, ///
77
+ frameSubstitutionString = this.getString(); ///
81
78
 
82
79
  context.trace(`Validating the '${frameSubstitutionString}' frame substitution...`);
83
80
 
@@ -146,9 +143,9 @@ export default define(class FrameSubstitution extends Substitution {
146
143
  }
147
144
 
148
145
  validateReplacementFrame(generalContext, specificContext) {
149
- let replacementFrameValidates;
146
+ let replacementFrameValidates = false;
150
147
 
151
- const context = specificContext, ///
148
+ const context = this.getContext(),
152
149
  replacementFrameString = this.replacementFrame.getString(),
153
150
  frameSubstitutionString = this.getString(); ///
154
151
 
@@ -204,6 +201,10 @@ export default define(class FrameSubstitution extends Substitution {
204
201
  }
205
202
 
206
203
  static fromFrameAndMetavariable(frame, metavariable, context) {
204
+ const santisedContext = sanitisedContextFromContext(context);
205
+
206
+ context = santisedContext; ///
207
+
207
208
  return instantiate((context) => {
208
209
  const frameSubstitutionString = frameSubstitutionStringFromFrameAndMetavariable(frame, metavariable),
209
210
  string = frameSubstitutionString, ///
@@ -3,8 +3,8 @@
3
3
  import Substitution from "../substitution";
4
4
 
5
5
  import { define } from "../../elements";
6
- import { instantiate } from "../../utilities/context";
7
6
  import { instantiateMetaLevelSubstitution } from "../../process/instantiate";
7
+ import { instantiate, sanitisedContextFromContext } from "../../utilities/context";
8
8
  import { metaLevelSubstitutionFromMetaLevelSubstitutionNode } from "../../utilities/element";
9
9
  import { metaLevelSubstitutionStringFromStatementAndReference } from "../../utilities/string";
10
10
  import { ephemeralContextFromJSON, ephemeralContextToEphemeralContextJSON } from "../../utilities/json";
@@ -65,11 +65,8 @@ export default define(class MetaLevelSubstitution extends Substitution {
65
65
  validate(generalContext, specificContext) {
66
66
  let metaLevelSubstitution = null;
67
67
 
68
- const context = this.getContext();
69
-
70
- specificContext = context; ///
71
-
72
- const metaLevelSubstitutionString = this.getString(); ///
68
+ const context = specificContext, ///
69
+ metaLevelSubstitutionString = this.getString(); ///
73
70
 
74
71
  context.trace(`Validating the '${metaLevelSubstitutionString}' meta-level substitution...`);
75
72
 
@@ -127,9 +124,9 @@ export default define(class MetaLevelSubstitution extends Substitution {
127
124
  }
128
125
 
129
126
  validateReplacementStatement(generalContext, specificContext) {
130
- let replacementStatementValidates;
127
+ let replacementStatementValidates = false;
131
128
 
132
- const context = specificContext, ///
129
+ const context = this.getContext(),
133
130
  replacementStatementString = this.replacementStatement.getString(),
134
131
  metaLevelSubstitutionString = this.getString(); ///
135
132
 
@@ -179,9 +176,9 @@ export default define(class MetaLevelSubstitution extends Substitution {
179
176
  return instantiate((context) => {
180
177
  const { string } = json,
181
178
  metaLevelSubstitutionNode = instantiateMetaLevelSubstitution(string, context),
179
+ node = metaLevelSubstitutionNode, ///
182
180
  targetReference = targetReferenceFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
183
181
  replacementStatement = replacementStatementFromMetaLevelSubstitutionNode(metaLevelSubstitutionNode, context),
184
- node = metaLevelSubstitutionNode,
185
182
  metaLevelSubstitution = new MetaLevelSubstitution(context, string, node, targetReference, replacementStatement);
186
183
 
187
184
  return metaLevelSubstitution;
@@ -189,6 +186,10 @@ export default define(class MetaLevelSubstitution extends Substitution {
189
186
  }
190
187
 
191
188
  static fromStatementAndReference(statement, reference, context) {
189
+ const santisedContext = sanitisedContextFromContext(context);
190
+
191
+ context = santisedContext; ///
192
+
192
193
  return instantiate((context) => {
193
194
  const metaLevelSubstitutionString = metaLevelSubstitutionStringFromStatementAndReference(statement, reference),
194
195
  string = metaLevelSubstitutionString, ///
@@ -3,8 +3,8 @@
3
3
  import Substitution from "../substitution";
4
4
 
5
5
  import { define } from "../../elements";
6
- import { instantiate } from "../../utilities/context";
7
6
  import { instantiateReferenceSubstitution } from "../../process/instantiate";
7
+ import { instantiate, sanitisedContextFromContext } from "../../utilities/context";
8
8
  import { referenceSubstitutionFromReferenceSubstitutionNode } from "../../utilities/element";
9
9
  import { referenceSubstitutionStringFromReferenceAndMetavariable } from "../../utilities/string";
10
10
 
@@ -73,11 +73,8 @@ export default define(class ReferenceSubstitution extends Substitution {
73
73
  validate(generalContext, specificContext) {
74
74
  let referenceSubstitution = null;
75
75
 
76
- const context = this.getContext();
77
-
78
- specificContext = context; ///
79
-
80
- const referenceSubstitutionString = this.getString(); ///
76
+ const context = specificContext, ///
77
+ referenceSubstitutionString = this.getString(); ///
81
78
 
82
79
  context.trace(`Validating the '${referenceSubstitutionString}' reference substitution...`);
83
80
 
@@ -139,7 +136,7 @@ export default define(class ReferenceSubstitution extends Substitution {
139
136
  validateReplacementReference(generalContext, specificContext) {
140
137
  let replacementReferenceValidates = false;
141
138
 
142
- const context = specificContext, ///
139
+ const context = this.getContext(),
143
140
  replacementReferenceString = this.replacementReference.getString(),
144
141
  referenceSubstitutionString = this.getString(); ///
145
142
 
@@ -185,6 +182,10 @@ export default define(class ReferenceSubstitution extends Substitution {
185
182
  }
186
183
 
187
184
  static fromReferenceAndMetavariable(reference, metavariable, context) {
185
+ const santisedContext = sanitisedContextFromContext(context);
186
+
187
+ context = santisedContext; ///
188
+
188
189
  return instantiate((context) => {
189
190
  const referenceSubstitutionString = referenceSubstitutionStringFromReferenceAndMetavariable(reference, metavariable),
190
191
  string = referenceSubstitutionString, ///