occam-furtle 2.0.78 → 2.0.80

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.
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ import dom from "../dom";
4
+ import Exception from "../exception";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { domAssigned } from "../dom";
8
+ import { NODES_TYPE, BOOLEAN_TYPE } from "../types";
9
+
10
+ const variableNodeQuery = nodeQuery("/every/variable"),
11
+ valueEveryNodeQuery = nodeQuery("/value/every"),
12
+ parametersNodeQuery = nodeQuery("/every/anonymousProcedure/parameters");
13
+
14
+ export default domAssigned(class Every {
15
+ constructor(string, variable, anonymousProcedure) {
16
+ this.string = string;
17
+ this.variable = variable;
18
+ this.anonymousProcedure = anonymousProcedure;
19
+ }
20
+
21
+ getString() {
22
+ return this.string;
23
+ }
24
+
25
+ getVariable() {
26
+ return this.variable;
27
+ }
28
+
29
+ getAnonymousProcedure() {
30
+ return this.anonymousProcedure;
31
+ }
32
+
33
+ evaluate(context) {
34
+ let value;
35
+
36
+ const everyString = this.getString();
37
+
38
+ context.trace(`Evaluating the '${everyString}' every...`);
39
+
40
+ value = this.variable.evaluate(context);
41
+
42
+ const valueType = value.getType();
43
+
44
+ if (valueType !== NODES_TYPE) {
45
+ const valueString = value.asString(context),
46
+ message = `The ${valueString} value's '${valueType}' type should be '${NODES_TYPE}'.`,
47
+ exception = Exception.fromMessage(message);
48
+
49
+ throw exception;
50
+ }
51
+
52
+ const nodes = value.getNodes(),
53
+ boolean = nodes.every((node) => {
54
+ let value;
55
+
56
+ const { Value, Values } = dom;
57
+
58
+ value = Value.fromNode(node, context);
59
+
60
+ const values = Values.fromValue(value, context);
61
+
62
+ value = this.anonymousProcedure.call(values, context);
63
+
64
+ const valueType = value.getType();
65
+
66
+ if (valueType !== BOOLEAN_TYPE) {
67
+ const valueString = value.asString(context),
68
+ message = `The ${valueString} value's type is '${valueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
69
+ exception = Exception.fromMessage(message);
70
+
71
+ throw exception;
72
+ }
73
+
74
+ const boolean = value.getBoolean();
75
+
76
+ return boolean;
77
+ });
78
+
79
+ const { Value } = dom;
80
+
81
+ value = Value.fromBoolean(boolean, context);
82
+
83
+ context.trace(`...evaluated the '${everyString}' every.`);
84
+
85
+ return value;
86
+ }
87
+
88
+ static name = "Every";
89
+
90
+ static fromValueNode(valueNode, context) {
91
+ let every = null;
92
+
93
+ const valueEveryNode = valueEveryNodeQuery(valueNode);
94
+
95
+ if (valueEveryNode !== null) {
96
+ const { Variable, AnonymousProcedure } = dom,
97
+ everyNode = valueEveryNode, ///
98
+ string = stringFromEveryNode(everyNode, context),
99
+ variable = Variable.fromEveryNode(everyNode, context),
100
+ anonymousProcedure = AnonymousProcedure.fromEveryNode(everyNode, context);
101
+
102
+ every = new Every(string, variable, anonymousProcedure);
103
+ }
104
+
105
+ return every;
106
+ }
107
+ });
108
+
109
+ function stringFromEveryNode(everyNode, context) {
110
+ const variableNode = variableNodeQuery(everyNode),
111
+ parametersNode = parametersNodeQuery(everyNode),
112
+ variableString = context.nodeAsString(variableNode),
113
+ parametersString = context.nodeAsString(parametersNode),
114
+ string = `Every(${variableString}, (${parametersString}) { ... })`;
115
+
116
+ return string;
117
+ }
@@ -10,6 +10,7 @@ import { variablesFromValuesAndParameters } from "../procedure";
10
10
  const parametersNodeQuery = nodeQuery("/anonymousProcedure/parameters"),
11
11
  typeTerminalNodeQuery = nodeQuery("/anonymousProcedure/@type"),
12
12
  someAnonymousProcedureNodeQuery = nodeQuery("/some/anonymousProcedure"),
13
+ everyAnonymousProcedureNodeQuery = nodeQuery("/every/anonymousProcedure"),
13
14
  anonymousProcedureCallAnonymousProcedureNodeQuery = nodeQuery("/anonymousProcedureCall/anonymousProcedure");
14
15
 
15
16
  export default domAssigned(class AnonymousProcedure {
@@ -71,6 +72,14 @@ export default domAssigned(class AnonymousProcedure {
71
72
  return anonymousProcedure;
72
73
  }
73
74
 
75
+ static fromEveryNode(everyNode, context) {
76
+ const everyAnonymousProcedureNode = everyAnonymousProcedureNodeQuery(everyNode),
77
+ anonymousProcedureNode = everyAnonymousProcedureNode, ///
78
+ anonymousProcedure = anonymousProcedureFromAnonymousProcedureNode(anonymousProcedureNode, context);
79
+
80
+ return anonymousProcedure;
81
+ }
82
+
74
83
  static fromAnonymousProcedureCallNode(anonymousProcedureCallNode, context) {
75
84
  const anonymousProcedureCallAnonymousProcedureNode = anonymousProcedureCallAnonymousProcedureNodeQuery(anonymousProcedureCallNode),
76
85
  anonymousProcedureNode = anonymousProcedureCallAnonymousProcedureNode, ///
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ import dom from "../dom";
4
+ import Exception from "../exception";
5
+
6
+ import { nodeQuery } from "../utilities/query";
7
+ import { domAssigned } from "../dom";
8
+ import { NODES_TYPE, BOOLEAN_TYPE } from "../types";
9
+
10
+ const variableNodeQuery = nodeQuery("/some/variable"),
11
+ valueSomeNodeQuery = nodeQuery("/value/some"),
12
+ parametersNodeQuery = nodeQuery("/some/anonymousProcedure/parameters");
13
+
14
+ export default domAssigned(class Some {
15
+ constructor(string, variable, anonymousProcedure) {
16
+ this.string = string;
17
+ this.variable = variable;
18
+ this.anonymousProcedure = anonymousProcedure;
19
+ }
20
+
21
+ getString() {
22
+ return this.string;
23
+ }
24
+
25
+ getVariable() {
26
+ return this.variable;
27
+ }
28
+
29
+ getAnonymousProcedure() {
30
+ return this.anonymousProcedure;
31
+ }
32
+
33
+ evaluate(context) {
34
+ let value;
35
+
36
+ const someString = this.getString();
37
+
38
+ context.trace(`Evaluating the '${someString}' some...`);
39
+
40
+ value = this.variable.evaluate(context);
41
+
42
+ const valueType = value.getType();
43
+
44
+ if (valueType !== NODES_TYPE) {
45
+ const valueString = value.asString(context),
46
+ message = `The ${valueString} value's '${valueType}' type should be '${NODES_TYPE}'.`,
47
+ exception = Exception.fromMessage(message);
48
+
49
+ throw exception;
50
+ }
51
+
52
+ const nodes = value.getNodes(),
53
+ boolean = nodes.some((node) => {
54
+ let value;
55
+
56
+ const { Value, Values } = dom;
57
+
58
+ value = Value.fromNode(node, context);
59
+
60
+ const values = Values.fromValue(value, context);
61
+
62
+ value = this.anonymousProcedure.call(values, context);
63
+
64
+ const valueType = value.getType();
65
+
66
+ if (valueType !== BOOLEAN_TYPE) {
67
+ const valueString = value.asString(context),
68
+ message = `The ${valueString} value's type is '${valueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
69
+ exception = Exception.fromMessage(message);
70
+
71
+ throw exception;
72
+ }
73
+
74
+ const boolean = value.getBoolean();
75
+
76
+ return boolean;
77
+ });
78
+
79
+ const { Value } = dom;
80
+
81
+ value = Value.fromBoolean(boolean, context);
82
+
83
+ context.trace(`...evaluated the '${someString}' some.`);
84
+
85
+ return value;
86
+ }
87
+
88
+ static name = "Some";
89
+
90
+ static fromValueNode(valueNode, context) {
91
+ let some = null;
92
+
93
+ const valueSomeNode = valueSomeNodeQuery(valueNode);
94
+
95
+ if (valueSomeNode !== null) {
96
+ const { Variable, AnonymousProcedure } = dom,
97
+ someNode = valueSomeNode, ///
98
+ string = stringFromSomeNode(someNode, context),
99
+ variable = Variable.fromSomeNode(someNode, context),
100
+ anonymousProcedure = AnonymousProcedure.fromSomeNode(someNode, context);
101
+
102
+ some = new Some(string, variable, anonymousProcedure);
103
+ }
104
+
105
+ return some;
106
+ }
107
+ });
108
+
109
+ function stringFromSomeNode(someNode, context) {
110
+ const variableNode = variableNodeQuery(someNode),
111
+ parametersNode = parametersNodeQuery(someNode),
112
+ variableString = context.nodeAsString(variableNode),
113
+ parametersString = context.nodeAsString(parametersNode),
114
+ string = `Some(${variableString}, (${parametersString}) { ... })`;
115
+
116
+ return string;
117
+ }
package/src/dom/value.js CHANGED
@@ -22,13 +22,15 @@ const ternaryValueNodeQuery = nodeQuery("/ternary/value"),
22
22
  variableAssignmentValueNodeQuery = nodeQuery("/variableAssignment/value");
23
23
 
24
24
  export default domAssigned(class Value {
25
- constructor(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall) {
25
+ constructor(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall) {
26
26
  this.node = node;
27
27
  this.nodes = nodes;
28
28
  this.number = number;
29
29
  this.string = string;
30
30
  this.boolean = boolean;
31
31
  this.some = some;
32
+ this.every - every;
33
+ this.reduce = reduce;
32
34
  this.ternary = ternary;
33
35
  this.variable = variable;
34
36
  this.nodeQuery = nodeQuery;
@@ -65,6 +67,14 @@ export default domAssigned(class Value {
65
67
  return this.some;
66
68
  }
67
69
 
70
+ getEvery() {
71
+ return this.every;
72
+ }
73
+
74
+ getReduce() {
75
+ return this.reduce;
76
+ }
77
+
68
78
  getTernary() {
69
79
  return this.ternay;
70
80
  }
@@ -122,6 +132,10 @@ export default domAssigned(class Value {
122
132
  type = BOOLEAN_TYPE;
123
133
  } else if (this.some !== null) {
124
134
  type = this.some.getType();
135
+ } else if (this.every !== null) {
136
+ type = this.every.getType();
137
+ } else if (this.reduce !== null) {
138
+ type = this.reduce.getType();
125
139
  } else if (this.ternary !== null) {
126
140
  type = this.ternary.getType();
127
141
  } else if (this.variable !== null) {
@@ -164,6 +178,10 @@ export default domAssigned(class Value {
164
178
  string = booleanAsString(this.boolean, context)
165
179
  } else if (this.some !== null) {
166
180
  string = this.some.asString(context);
181
+ } else if (this.every !== null) {
182
+ string = this.every.asString(context);
183
+ } else if (this.reduce !== null) {
184
+ string = this.reduce.asString(context);
167
185
  } else if (this.ternary !== null) {
168
186
  string = this.ternary.asString(context);
169
187
  } else if (this.variable !== null) {
@@ -202,6 +220,10 @@ export default domAssigned(class Value {
202
220
  value = this;
203
221
  } else if (this.some !== null) {
204
222
  value = this.some.evaluate(context);
223
+ } else if (this.every !== null) {
224
+ value = this.every.evaluate(context);
225
+ } else if (this.reduce !== null) {
226
+ value = this.reduce.evaluate(context);
205
227
  } else if (this.ternary !== null) {
206
228
  value = this.ternary.evaluate(context);
207
229
  } else if (this.variable !== null) {
@@ -287,6 +309,8 @@ export default domAssigned(class Value {
287
309
  string = null,
288
310
  boolean = null,
289
311
  some = null,
312
+ every = null,
313
+ reduce = null,
290
314
  ternary = null,
291
315
  variable = null,
292
316
  nodeQuery = null,
@@ -297,7 +321,7 @@ export default domAssigned(class Value {
297
321
  bracketedValue = null,
298
322
  procedureCall = null,
299
323
  anonymousProcedureCall = null,
300
- value = new Value(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
324
+ value = new Value(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
301
325
 
302
326
  return value;
303
327
  }
@@ -309,6 +333,8 @@ export default domAssigned(class Value {
309
333
  boolean = null,
310
334
  ternary = null,
311
335
  some = null,
336
+ every = null,
337
+ reduce = null,
312
338
  variable = null,
313
339
  nodeQuery = null,
314
340
  nodesQuery = null,
@@ -318,7 +344,7 @@ export default domAssigned(class Value {
318
344
  bracketedValue = null,
319
345
  procedureCall = null,
320
346
  anonymousProcedureCall = null,
321
- value = new Value(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
347
+ value = new Value(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
322
348
 
323
349
  return value;
324
350
  }
@@ -329,6 +355,8 @@ export default domAssigned(class Value {
329
355
  number = null,
330
356
  boolean = null,
331
357
  some = null,
358
+ every = null,
359
+ reduce = null,
332
360
  ternary = null,
333
361
  variable = null,
334
362
  nodeQuery = null,
@@ -339,7 +367,7 @@ export default domAssigned(class Value {
339
367
  bracketedValue = null,
340
368
  procedureCall = null,
341
369
  anonymousProcedureCall = null,
342
- value = new Value(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
370
+ value = new Value(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
343
371
 
344
372
  return value;
345
373
  }
@@ -350,6 +378,8 @@ export default domAssigned(class Value {
350
378
  number = null,
351
379
  string = null,
352
380
  some = null,
381
+ every = null,
382
+ reduce = null,
353
383
  ternary = null,
354
384
  variable = null,
355
385
  nodeQuery = null,
@@ -360,7 +390,7 @@ export default domAssigned(class Value {
360
390
  bracketedValue = null,
361
391
  procedureCall = null,
362
392
  anonymousProcedureCall = null,
363
- value = new Value(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
393
+ value = new Value(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
364
394
 
365
395
  return value;
366
396
  }
@@ -497,13 +527,15 @@ function booleanAsString(boolean, context) {
497
527
  }
498
528
 
499
529
  function valueFromValueNode(valueNode, context) {
500
- const { Some, Value, Ternary, Variable, NodeQuery, NodesQuery, Comparison, NegatedValue, BitwiseValue, BracketedValue, ProcedureCall, AnonymousProcedureCall } = dom,
530
+ const { Some, Every, Reduce, Value, Ternary, Variable, NodeQuery, NodesQuery, Comparison, NegatedValue, BitwiseValue, BracketedValue, ProcedureCall, AnonymousProcedureCall } = dom,
501
531
  node = nodeFromValueNode(valueNode, context),
502
532
  nodes = nodesFromValueNode(valueNode, context),
503
533
  number = numberFromValueNode(valueNode, context),
504
534
  string = stringFromValueNode(valueNode, context),
505
535
  boolean = booleanFromValueNode(valueNode, context),
506
536
  some = Some.fromValueNode(valueNode, context),
537
+ every = Every.fromValueNode(valueNode, context),
538
+ reduce = Reduce.fromValueNode(valueNode, context),
507
539
  ternary = Ternary.fromValueNode(valueNode, context),
508
540
  variable = Variable.fromValueNode(valueNode, context),
509
541
  nodeQuery = NodeQuery.fromValueNode(valueNode, context),
@@ -514,7 +546,7 @@ function valueFromValueNode(valueNode, context) {
514
546
  bracketedValue = BracketedValue.fromValueNode(valueNode, context),
515
547
  procedureCall = ProcedureCall.fromValueNode(valueNode, context),
516
548
  anonymousProcedureCall = AnonymousProcedureCall.fromValueNode(valueNode, context),
517
- value = new Value(node, nodes, number, string, boolean, some, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
549
+ value = new Value(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, negatedValue, bitwiseValue, bracketedValue, procedureCall, anonymousProcedureCall);
518
550
 
519
551
  return value;
520
552
  }
@@ -8,6 +8,7 @@ import { domAssigned } from "../dom";
8
8
 
9
9
  const someVariableNodeQuery = nodeQuery("/some/variable"),
10
10
  valueVariableNodeQuery = nodeQuery("/value/variable"),
11
+ everyVariableNodeQuery = nodeQuery("/every/variable"),
11
12
  nodeQueryVariableNodeQuery = nodeQuery("/nodeQuery/variable"),
12
13
  nodesQueryVariableNodeQuery = nodeQuery("/nodesQuery/variable"),
13
14
  variableNameTerminalNodeQuery = nodeQuery("/variable/@name"),
@@ -105,8 +106,8 @@ export default domAssigned(class Variable {
105
106
 
106
107
  static name = "Variable";
107
108
 
108
- static fromSomeNode(someLoopNode, context) {
109
- const someVariableNode = someVariableNodeQuery(someLoopNode),
109
+ static fromSomeNode(someNode, context) {
110
+ const someVariableNode = someVariableNodeQuery(someNode),
110
111
  variableNode = someVariableNode, ///
111
112
  variable = variableFromVariableNode(variableNode, context);
112
113
 
@@ -127,6 +128,14 @@ export default domAssigned(class Variable {
127
128
  return variable;
128
129
  }
129
130
 
131
+ static fromEveryNode(everyNode, context) {
132
+ const everyVariableNode = everyVariableNodeQuery(everyNode),
133
+ variableNode = everyVariableNode, ///
134
+ variable = variableFromVariableNode(variableNode, context);
135
+
136
+ return variable;
137
+ }
138
+
130
139
  static fromParameter(parameter, context) {
131
140
  const type = parameter.getType(),
132
141
  name = parameter.getName(),
package/src/index.js CHANGED
@@ -6,7 +6,9 @@ import Label from "./dom/label";
6
6
  import Block from "./dom/block";
7
7
  import Error from "./dom/error";
8
8
  import Value from "./dom/value";
9
+ import Every from "./dom/every";
9
10
  import Values from "./dom/values";
11
+ import Reduce from "./dom/reduce";
10
12
  import Ternary from "./dom/ternary";
11
13
  import Variable from "./dom/variable";
12
14
  import Reference from "./dom/reference";