occam-furtle 2.0.65 → 2.0.67

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/index.js CHANGED
@@ -28,7 +28,6 @@ var _value = /*#__PURE__*/ _interop_require_default(require("./dom/value"));
28
28
  var _values = /*#__PURE__*/ _interop_require_default(require("./dom/values"));
29
29
  var _ternary = /*#__PURE__*/ _interop_require_default(require("./dom/ternary"));
30
30
  var _variable = /*#__PURE__*/ _interop_require_default(require("./dom/variable"));
31
- var _condition = /*#__PURE__*/ _interop_require_default(require("./dom/condition"));
32
31
  var _reference = /*#__PURE__*/ _interop_require_default(require("./dom/reference"));
33
32
  var _procedure = /*#__PURE__*/ _interop_require_default(require("./dom/procedure"));
34
33
  var _node = /*#__PURE__*/ _interop_require_default(require("./dom/query/node"));
@@ -38,14 +37,14 @@ var _nodes = /*#__PURE__*/ _interop_require_default(require("./dom/query/nodes")
38
37
  var _comparison = /*#__PURE__*/ _interop_require_default(require("./dom/comparison"));
39
38
  var _assignment = /*#__PURE__*/ _interop_require_default(require("./dom/assignment"));
40
39
  var _return = /*#__PURE__*/ _interop_require_default(require("./dom/block/return"));
40
+ var _negated = /*#__PURE__*/ _interop_require_default(require("./dom/value/negated"));
41
+ var _bitwise = /*#__PURE__*/ _interop_require_default(require("./dom/value/bitwise"));
41
42
  var _procedureCall = /*#__PURE__*/ _interop_require_default(require("./dom/procedureCall"));
43
+ var _bracketed = /*#__PURE__*/ _interop_require_default(require("./dom/value/bracketed"));
42
44
  var _array = /*#__PURE__*/ _interop_require_default(require("./dom/assignment/array"));
43
45
  var _returnStatement = /*#__PURE__*/ _interop_require_default(require("./dom/returnStatement"));
44
- var _negated = /*#__PURE__*/ _interop_require_default(require("./dom/condition/negated"));
45
46
  var _object = /*#__PURE__*/ _interop_require_default(require("./dom/assignment/object"));
46
- var _bitwise = /*#__PURE__*/ _interop_require_default(require("./dom/condition/bitwise"));
47
47
  var _conditionalBlocks = /*#__PURE__*/ _interop_require_default(require("./dom/conditionalBlocks"));
48
- var _bracketed = /*#__PURE__*/ _interop_require_default(require("./dom/condition/bracketed"));
49
48
  var _anonymous = /*#__PURE__*/ _interop_require_default(require("./dom/procedure/anonymous"));
50
49
  var _variable1 = /*#__PURE__*/ _interop_require_default(require("./dom/assignment/variable"));
51
50
  var _procedure1 = /*#__PURE__*/ _interop_require_default(require("./dom/declaration/procedure"));
@@ -58,4 +57,4 @@ function _interop_require_default(obj) {
58
57
  };
59
58
  }
60
59
 
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0ZXAgZnJvbSBcIi4vZG9tL3N0ZXBcIjtcbmltcG9ydCBTb21lIGZyb20gXCIuL2RvbS9zb21lXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vZG9tL2xhYmVsXCI7XG5pbXBvcnQgQmxvY2sgZnJvbSBcIi4vZG9tL2Jsb2NrXCI7XG5pbXBvcnQgRXJyb3IgZnJvbSBcIi4vZG9tL2Vycm9yXCI7XG5pbXBvcnQgVmFsdWUgZnJvbSBcIi4vZG9tL3ZhbHVlXCI7XG5pbXBvcnQgVmFsdWVzIGZyb20gXCIuL2RvbS92YWx1ZXNcIjtcbmltcG9ydCBUZXJuYXJ5IGZyb20gXCIuL2RvbS90ZXJuYXJ5XCI7XG5pbXBvcnQgVmFyaWFibGUgZnJvbSBcIi4vZG9tL3ZhcmlhYmxlXCI7XG5pbXBvcnQgQ29uZGl0aW9uIGZyb20gXCIuL2RvbS9jb25kaXRpb25cIjtcbmltcG9ydCBSZWZlcmVuY2UgZnJvbSBcIi4vZG9tL3JlZmVyZW5jZVwiO1xuaW1wb3J0IFByb2NlZHVyZSBmcm9tIFwiLi9kb20vcHJvY2VkdXJlXCI7XG5pbXBvcnQgTm9kZVF1ZXJ5IGZyb20gXCIuL2RvbS9xdWVyeS9ub2RlXCI7XG5pbXBvcnQgUGFyYW1ldGVyIGZyb20gXCIuL2RvbS9wYXJhbWV0ZXJcIjtcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gXCIuL2RvbS9wYXJhbWV0ZXJzXCI7XG5pbXBvcnQgTm9kZXNRdWVyeSBmcm9tIFwiLi9kb20vcXVlcnkvbm9kZXNcIjtcbmltcG9ydCBDb21wYXJpc29uIGZyb20gXCIuL2RvbS9jb21wYXJpc29uXCI7XG5pbXBvcnQgQXNzaWdubWVudCBmcm9tIFwiLi9kb20vYXNzaWdubWVudFwiO1xuaW1wb3J0IFJldHVybkJsb2NrIGZyb20gXCIuL2RvbS9ibG9jay9yZXR1cm5cIjtcbmltcG9ydCBQcm9jZWR1cmVDYWxsIGZyb20gXCIuL2RvbS9wcm9jZWR1cmVDYWxsXCI7XG5pbXBvcnQgQXJyYXlBc3NpZ21lbnQgZnJvbSBcIi4vZG9tL2Fzc2lnbm1lbnQvYXJyYXlcIjtcbmltcG9ydCBSZXR1cm5TdGF0ZW1lbnQgZnJvbSBcIi4vZG9tL3JldHVyblN0YXRlbWVudFwiO1xuaW1wb3J0IE5lZ2F0ZWRDb25kaXRpb24gZnJvbSBcIi4vZG9tL2NvbmRpdGlvbi9uZWdhdGVkXCI7XG5pbXBvcnQgT2JqZWN0QXNzaWdubWVudCBmcm9tIFwiLi9kb20vYXNzaWdubWVudC9vYmplY3RcIjtcbmltcG9ydCBCaXR3aXNlQ29uZGl0aW9uIGZyb20gXCIuL2RvbS9jb25kaXRpb24vYml0d2lzZVwiO1xuaW1wb3J0IENvbmRpdGlvbmFsQmxvY2tzIGZyb20gXCIuL2RvbS9jb25kaXRpb25hbEJsb2Nrc1wiO1xuaW1wb3J0IEJyYWNrZXRlZENvbmRpdGlvbiBmcm9tIFwiLi9kb20vY29uZGl0aW9uL2JyYWNrZXRlZFwiO1xuaW1wb3J0IEFub255bW91c1Byb2NlZHVyZSBmcm9tIFwiLi9kb20vcHJvY2VkdXJlL2Fub255bW91c1wiO1xuaW1wb3J0IFZhcmlhYmxlQXNzaWdubWVudCBmcm9tIFwiLi9kb20vYXNzaWdubWVudC92YXJpYWJsZVwiO1xuaW1wb3J0IFByb2NlZHVyZURlY2xhcmF0aW9uIGZyb20gXCIuL2RvbS9kZWNsYXJhdGlvbi9wcm9jZWR1cmVcIjtcbmltcG9ydCBWYXJpYWJsZXNEZWNsYXJhdGlvbiBmcm9tIFwiLi9kb20vZGVjbGFyYXRpb24vdmFyaWFibGVzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgVmFsdWVzIH0gZnJvbSBcIi4vZG9tL3ZhbHVlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBGaWxlQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHQvZmlsZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHJpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5cbiJdLCJuYW1lcyI6WyJGaWxlQ29udGV4dCIsIlZhbHVlcyIsInN0cmluZ1V0aWxpdGllcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBbUNvQkEsV0FBVztlQUFYQSxhQUFXOztJQURYQyxNQUFNO2VBQU5BLGVBQU07O0lBRU5DLGVBQWU7ZUFBZkEsZUFBZTs7OzJEQWxDbEI7MkRBQ0E7NERBQ0M7NERBQ0E7NERBQ0E7NERBQ0E7NkRBQ0M7OERBQ0M7K0RBQ0M7Z0VBQ0M7Z0VBQ0E7Z0VBQ0E7MkRBQ0E7Z0VBQ0E7aUVBQ0M7NERBQ0E7aUVBQ0E7aUVBQ0E7NkRBQ0M7b0VBQ0U7NERBQ0M7c0VBQ0M7OERBQ0M7NkRBQ0E7OERBQ0E7d0VBQ0M7Z0VBQ0M7Z0VBQ0E7Z0VBQ0E7aUVBQ0U7Z0VBQ0E7MkRBR007NkRBQ0kifQ==
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFN0ZXAgZnJvbSBcIi4vZG9tL3N0ZXBcIjtcbmltcG9ydCBTb21lIGZyb20gXCIuL2RvbS9zb21lXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcIi4vZG9tL2xhYmVsXCI7XG5pbXBvcnQgQmxvY2sgZnJvbSBcIi4vZG9tL2Jsb2NrXCI7XG5pbXBvcnQgRXJyb3IgZnJvbSBcIi4vZG9tL2Vycm9yXCI7XG5pbXBvcnQgVmFsdWUgZnJvbSBcIi4vZG9tL3ZhbHVlXCI7XG5pbXBvcnQgVmFsdWVzIGZyb20gXCIuL2RvbS92YWx1ZXNcIjtcbmltcG9ydCBUZXJuYXJ5IGZyb20gXCIuL2RvbS90ZXJuYXJ5XCI7XG5pbXBvcnQgVmFyaWFibGUgZnJvbSBcIi4vZG9tL3ZhcmlhYmxlXCI7XG5pbXBvcnQgUmVmZXJlbmNlIGZyb20gXCIuL2RvbS9yZWZlcmVuY2VcIjtcbmltcG9ydCBQcm9jZWR1cmUgZnJvbSBcIi4vZG9tL3Byb2NlZHVyZVwiO1xuaW1wb3J0IE5vZGVRdWVyeSBmcm9tIFwiLi9kb20vcXVlcnkvbm9kZVwiO1xuaW1wb3J0IFBhcmFtZXRlciBmcm9tIFwiLi9kb20vcGFyYW1ldGVyXCI7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tIFwiLi9kb20vcGFyYW1ldGVyc1wiO1xuaW1wb3J0IE5vZGVzUXVlcnkgZnJvbSBcIi4vZG9tL3F1ZXJ5L25vZGVzXCI7XG5pbXBvcnQgQ29tcGFyaXNvbiBmcm9tIFwiLi9kb20vY29tcGFyaXNvblwiO1xuaW1wb3J0IEFzc2lnbm1lbnQgZnJvbSBcIi4vZG9tL2Fzc2lnbm1lbnRcIjtcbmltcG9ydCBSZXR1cm5CbG9jayBmcm9tIFwiLi9kb20vYmxvY2svcmV0dXJuXCI7XG5pbXBvcnQgTmVnYXRlZFZhbHVlIGZyb20gXCIuL2RvbS92YWx1ZS9uZWdhdGVkXCI7XG5pbXBvcnQgQml0d2lzZVZhbHVlIGZyb20gXCIuL2RvbS92YWx1ZS9iaXR3aXNlXCI7XG5pbXBvcnQgUHJvY2VkdXJlQ2FsbCBmcm9tIFwiLi9kb20vcHJvY2VkdXJlQ2FsbFwiO1xuaW1wb3J0IEJyYWNrZXRlZFZhbHVlIGZyb20gXCIuL2RvbS92YWx1ZS9icmFja2V0ZWRcIjtcbmltcG9ydCBBcnJheUFzc2lnbWVudCBmcm9tIFwiLi9kb20vYXNzaWdubWVudC9hcnJheVwiO1xuaW1wb3J0IFJldHVyblN0YXRlbWVudCBmcm9tIFwiLi9kb20vcmV0dXJuU3RhdGVtZW50XCI7XG5pbXBvcnQgT2JqZWN0QXNzaWdubWVudCBmcm9tIFwiLi9kb20vYXNzaWdubWVudC9vYmplY3RcIjtcbmltcG9ydCBDb25kaXRpb25hbEJsb2NrcyBmcm9tIFwiLi9kb20vY29uZGl0aW9uYWxCbG9ja3NcIjtcbmltcG9ydCBBbm9ueW1vdXNQcm9jZWR1cmUgZnJvbSBcIi4vZG9tL3Byb2NlZHVyZS9hbm9ueW1vdXNcIjtcbmltcG9ydCBWYXJpYWJsZUFzc2lnbm1lbnQgZnJvbSBcIi4vZG9tL2Fzc2lnbm1lbnQvdmFyaWFibGVcIjtcbmltcG9ydCBQcm9jZWR1cmVEZWNsYXJhdGlvbiBmcm9tIFwiLi9kb20vZGVjbGFyYXRpb24vcHJvY2VkdXJlXCI7XG5pbXBvcnQgVmFyaWFibGVzRGVjbGFyYXRpb24gZnJvbSBcIi4vZG9tL2RlY2xhcmF0aW9uL3ZhcmlhYmxlc1wiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIFZhbHVlcyB9IGZyb20gXCIuL2RvbS92YWx1ZXNcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUNvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0L2ZpbGVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG4iXSwibmFtZXMiOlsiRmlsZUNvbnRleHQiLCJWYWx1ZXMiLCJzdHJpbmdVdGlsaXRpZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQWtDb0JBLFdBQVc7ZUFBWEEsYUFBVzs7SUFEWEMsTUFBTTtlQUFOQSxlQUFNOztJQUVOQyxlQUFlO2VBQWZBLGVBQWU7OzsyREFqQ2xCOzJEQUNBOzREQUNDOzREQUNBOzREQUNBOzREQUNBOzZEQUNDOzhEQUNDOytEQUNDO2dFQUNDO2dFQUNBOzJEQUNBO2dFQUNBO2lFQUNDOzREQUNBO2lFQUNBO2lFQUNBOzZEQUNDOzhEQUNDOzhEQUNBO29FQUNDO2dFQUNDOzREQUNBO3NFQUNDOzZEQUNDO3dFQUNDO2dFQUNDO2dFQUNBO2lFQUNFO2dFQUNBOzJEQUdNOzZEQUNJIn0=
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-furtle",
3
3
  "author": "James Smith",
4
- "version": "2.0.65",
4
+ "version": "2.0.67",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-furtle",
7
7
  "description": "Occam's Furtle language.",
@@ -11,12 +11,12 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "necessary": "^14.3.2",
14
- "occam-grammars": "^1.3.153"
14
+ "occam-grammars": "^1.3.157"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@swc/core": "^1.5.6",
18
- "occam-custom-grammars": "^5.0.1081",
19
- "occam-entities": "^1.0.291",
18
+ "occam-custom-grammars": "^5.0.1083",
19
+ "occam-entities": "^1.0.293",
20
20
  "occam-grammar-utilities": "^8.0.258",
21
21
  "occam-lexers": "^23.0.45",
22
22
  "occam-parsers": "^23.0.50",
@@ -16,7 +16,7 @@ variablesDeclaration ::= [type] variable assignment ( "," variable assignment
16
16
 
17
17
  variableAssignment ::= variable assignment ";" ;
18
18
 
19
- conditionalBlocks ::= "If" "(" condition ")" block ( "Else" block )? ;
19
+ conditionalBlocks ::= "If" "(" value ")" block ( "Else" block )? ;
20
20
 
21
21
  objectAssignment ::= "{" parameters "}" "=" variable ";" ;
22
22
 
@@ -28,29 +28,6 @@ anonymousProcedure ::= "(" parameters? ")" returnBlock ;
28
28
 
29
29
 
30
30
 
31
- condition ::= bracketedCondition
32
-
33
- | bitwiseCondition
34
-
35
- | negatedCondition
36
-
37
- | comparison
38
-
39
- | value
40
-
41
- ;
42
-
43
- bracketedCondition ::= "(" condition ")" ;
44
-
45
- bitwiseCondition ::= condition ( "||" | "&&" ) condition ;
46
-
47
- negatedCondition ::= "!"<NO_WHITESPACE>condition ;
48
-
49
- comparison ::= value ( "!=" | "==" ) value ;
50
-
51
-
52
-
53
-
54
31
  block.. ::= "{" ( step | nonsense )* "}" ;
55
32
 
56
33
  returnBlock.. ::= "{" ( step | nonsense )* returnStatement "}" ;
@@ -77,9 +54,23 @@ assignment ::= "=" value ;
77
54
 
78
55
 
79
56
 
57
+ parameter ::= [type] [name]
58
+
59
+ | "_"
60
+
61
+ ;
62
+
63
+
64
+
80
65
  value ::= procedureCall
81
66
 
82
- | comparison
67
+ | bracketedValue
68
+
69
+ | bitwiseValue
70
+
71
+ | negatedValue
72
+
73
+ | comparison
83
74
 
84
75
  | nodesQuery
85
76
 
@@ -103,17 +94,25 @@ value ::= procedureCall
103
94
 
104
95
 
105
96
 
97
+ bracketedValue ::= "(" value ")" ;
98
+
106
99
  procedureCall ::= reference<NO_WHITESPACE>"(" values? ")" ;
107
100
 
101
+ bitwiseValue ::= value ( "||" | "&&" ) value ;
102
+
103
+ negatedValue ::= "!"<NO_WHITESPACE>value ;
104
+
105
+ comparison ::= value ( "!=" | "==" ) value ;
106
+
108
107
  nodesQuery ::= "nodesQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;
109
108
 
110
109
  nodeQuery ::= "nodeQuery"<NO_WHITESPACE>"(" variable "," expression ")" ;
111
110
 
112
111
  variable ::= [name] ;
113
112
 
114
- ternary ::= "If" "(" condition ")" value "Else" value ;
113
+ ternary ::= "If" "(" value ")" value "Else" value ;
115
114
 
116
- some ::= "Some"<NO_WHITESPACE>"(" variable "," anonymousProcedure ")" ";" ;
115
+ some ::= "Some"<NO_WHITESPACE>"(" variable "," anonymousProcedure ")" ;
117
116
 
118
117
 
119
118
 
@@ -123,14 +122,6 @@ values ::= value ( "," value )* ;
123
122
 
124
123
 
125
124
 
126
- parameter ::= [type] [name]
127
-
128
- | "_"
129
-
130
- ;
131
-
132
-
133
-
134
125
  label. ::= [name] ;
135
126
 
136
127
  reference. ::= [name] ;
@@ -1,19 +1,21 @@
1
1
  "use strict";
2
2
 
3
3
  import dom from "../dom";
4
+ import Exception from "../exception";
4
5
 
5
6
  import { nodeQuery } from "../utilities/query";
6
7
  import { domAssigned } from "../dom";
8
+ import { BOOLEAN_TYPE } from "../types";
7
9
 
8
- const ifBlockNodeQuery = nodeQuery("/conditionalBlocks/block[0]"),
9
- conditionNodeQuery = nodeQuery("/conditionalBlocks/condition"),
10
+ const valueNodeQuery = nodeQuery("/conditionalBlocks/value"),
11
+ ifBlockNodeQuery = nodeQuery("/conditionalBlocks/block[0]"),
10
12
  elseBlockNodeQuery = nodeQuery("/conditionalBlocks/block[1]"),
11
13
  conditionalBlocksNodeQuery = nodeQuery("/step/conditionalBlocks");
12
14
 
13
15
  export default domAssigned(class ConditionalBlocks {
14
- constructor(string, condition, ifBlock, elseBlock) {
16
+ constructor(string, value, ifBlock, elseBlock) {
15
17
  this.string = string;
16
- this.condition = condition;
18
+ this.value = value;
17
19
  this.ifBlock = ifBlock;
18
20
  this.elseBlock = elseBlock;
19
21
  }
@@ -22,8 +24,8 @@ export default domAssigned(class ConditionalBlocks {
22
24
  return this.string;
23
25
  }
24
26
 
25
- getCondition() {
26
- return this.condition;
27
+ getValue() {
28
+ return this.value;
27
29
  }
28
30
 
29
31
  getConditionBlock() {
@@ -39,8 +41,18 @@ export default domAssigned(class ConditionalBlocks {
39
41
 
40
42
  context.trace(`Evaluating the '${conditionalBlocksString}' conditional blocks...`);
41
43
 
42
- const value = this.condition.evaluate(context),
43
- boolean = value.getBoolean();
44
+ const value = this.value.evaluate(context),
45
+ valueType = value.getType();
46
+
47
+ if (valueType !== BOOLEAN_TYPE) {
48
+ const valueString = value.asString(context),
49
+ message = `The ${valueString} value's type is '${valueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
50
+ exception = Exception.fromMessage(message);
51
+
52
+ throw exception;
53
+ }
54
+
55
+ const boolean = value.getBoolean();
44
56
 
45
57
  if (boolean) {
46
58
  this.ifBlock.evaluate(context);
@@ -61,15 +73,15 @@ export default domAssigned(class ConditionalBlocks {
61
73
  const conditionalBlocksNode = conditionalBlocksNodeQuery(stepNode);
62
74
 
63
75
  if (conditionalBlocksNode !== null) {
64
- const { Block, Condition } = dom,
76
+ const { Block, Value } = dom,
65
77
  string = stringFromConditionalBlocksNode(conditionalBlocksNode, context),
66
78
  ifBlockNode = ifBlockNodeQuery(conditionalBlocksNode),
67
79
  elseBlockNode = elseBlockNodeQuery(conditionalBlocksNode),
68
- condition = Condition.fromConditionalBlocksNode(conditionalBlocksNode, context),
80
+ value = Value.fromConditionalBlocksNode(conditionalBlocksNode, context),
69
81
  ifBlock = Block.fromBlockNode(ifBlockNode, context),
70
82
  elseBlock = Block.fromBlockNode(elseBlockNode, context);
71
83
 
72
- conditionalBlocks = new ConditionalBlocks(string, condition, ifBlock, elseBlock);
84
+ conditionalBlocks = new ConditionalBlocks(string, value, ifBlock, elseBlock);
73
85
  }
74
86
 
75
87
  return conditionalBlocks;
@@ -79,8 +91,8 @@ export default domAssigned(class ConditionalBlocks {
79
91
  function stringFromConditionalBlocksNode(conditionalBlocksNode, context) {
80
92
  let string;
81
93
 
82
- const conditionNode = conditionNodeQuery(conditionalBlocksNode),
83
- conditionString = context.nodeAsString(conditionNode);
94
+ const valueNode = valueNodeQuery(conditionalBlocksNode),
95
+ conditionString = context.nodeAsString(valueNode);
84
96
 
85
97
  string = `If (${conditionString}) { ... }`;
86
98
 
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
 
3
3
  import dom from "../dom";
4
+ import Exception from "../exception";
4
5
 
5
6
  import { domAssigned } from "../dom";
6
- import { nodeQuery, nodesQuery } from "../utilities/query";
7
- import Exception from "../exception";
7
+ import { nodeQuery } from "../utilities/query";
8
8
 
9
9
  const procedureCallNodeQuery = nodeQuery("/value/procedureCall");
10
10
 
@@ -1,19 +1,21 @@
1
1
  "use strict";
2
2
 
3
3
  import dom from "../dom";
4
+ import Exception from "../exception";
4
5
 
5
6
  import { nodeQuery } from "../utilities/query";
6
7
  import { domAssigned } from "../dom";
8
+ import { BOOLEAN_TYPE } from "../types";
7
9
 
8
- const ifValueNodeQuery = nodeQuery("/ternary/value[0]"),
10
+ const valueNodeQuery = nodeQuery("/ternary/value[0]"),
11
+ ifValueNodeQuery = nodeQuery("/ternary/value[1]"),
9
12
  ternaryNodeQuery = nodeQuery("/value/ternary"),
10
- conditionNodeQuery = nodeQuery("/ternary/condition"),
11
- elseValueNodeQuery = nodeQuery("/ternary/value[1]");
13
+ elseValueNodeQuery = nodeQuery("/ternary/value[2]");
12
14
 
13
15
  export default domAssigned(class Ternary {
14
- constructor(string, condition, ifValue, elseValue) {
16
+ constructor(string, value, ifValue, elseValue) {
15
17
  this.string = string;
16
- this.condition = condition;
18
+ this.value = value;
17
19
  this.ifValue = ifValue;
18
20
  this.elseValue = elseValue;
19
21
  }
@@ -22,11 +24,11 @@ export default domAssigned(class Ternary {
22
24
  return this.string;
23
25
  }
24
26
 
25
- getCondition() {
26
- return this.condition;
27
+ getValue() {
28
+ return this.value;
27
29
  }
28
30
 
29
- getConditionBlock() {
31
+ getIfBlock() {
30
32
  return this.ifValue;
31
33
  }
32
34
 
@@ -41,7 +43,17 @@ export default domAssigned(class Ternary {
41
43
 
42
44
  context.trace(`Evaluating the '${ternaryString}' ternary...`);
43
45
 
44
- value = this.condition.evaluate(context);
46
+ value = this.value.evaluate(context);
47
+
48
+ const valueType = value.getType();
49
+
50
+ if (valueType !== BOOLEAN_TYPE) {
51
+ const valueString = value.asString(context),
52
+ message = `The ${valueString} value's type is '${valueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
53
+ exception = Exception.fromMessage(message);
54
+
55
+ throw exception;
56
+ }
45
57
 
46
58
  const boolean = value.getBoolean();
47
59
 
@@ -62,15 +74,15 @@ export default domAssigned(class Ternary {
62
74
  const ternaryNode = ternaryNodeQuery(valueNode);
63
75
 
64
76
  if (ternaryNode !== null) {
65
- const { Value, Condition } = dom,
77
+ const { Value } = dom,
66
78
  string = stringFromTernaryNode(ternaryNode, context),
67
79
  ifValueNode = ifValueNodeQuery(ternaryNode),
68
80
  elseValueNode = elseValueNodeQuery(ternaryNode),
69
- condition = Condition.fromTernaryNode(ternaryNode, context),
81
+ value = Value.fromTernaryNode(ternaryNode, context),
70
82
  ifValue = Value.fromValueNode(ifValueNode, context),
71
83
  elseValue = Value.fromValueNode(elseValueNode, context);
72
84
 
73
- ternary = new Ternary(string, condition, ifValue, elseValue);
85
+ ternary = new Ternary(string, value, ifValue, elseValue);
74
86
  }
75
87
 
76
88
  return ternary;
@@ -80,14 +92,14 @@ export default domAssigned(class Ternary {
80
92
  function stringFromTernaryNode(ternaryNode, context) {
81
93
  let string;
82
94
 
83
- const ifValueNode = ifValueNodeQuery(ternaryNode),
95
+ const valueNode = valueNodeQuery(ternaryNode),
96
+ ifValueNode = ifValueNodeQuery(ternaryNode),
84
97
  elseValueNode = elseValueNodeQuery(ternaryNode),
85
- conditionNode = conditionNodeQuery(ternaryNode),
86
98
  ifValueString = context.nodeAsString(ifValueNode),
87
99
  elseValueString = context.nodeAsString(elseValueNode),
88
- conditionString = context.nodeAsString(conditionNode);
100
+ valueString = context.nodeAsString(valueNode);
89
101
 
90
- string = `If (${conditionString}) ${ifValueString} ${elseValueString}`;
102
+ string = `If (${valueString}) ${ifValueString} ${elseValueString}`;
91
103
 
92
104
  return string;
93
105
  }
@@ -0,0 +1,118 @@
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 { DISJUNCTION } from "../../constants";
9
+ import { BOOLEAN_TYPE } from "../../types";
10
+
11
+ const terminalNodeQuery = nodeQuery("/bitwiseValue/@*"),
12
+ leftValueNodeQuery = nodeQuery("/bitwiseValue/value[0]"),
13
+ rightValueNodeQuery = nodeQuery("/bitwiseValue/value[1]"),
14
+ bitwiseValueNodeQuery = nodeQuery("/value/bitwiseValue");
15
+
16
+ export default domAssigned(class BitwiseValue {
17
+ constructor(string, type, disjoint, leftValue, rightValue) {
18
+ this.string = string;
19
+ this.type = type;
20
+ this.disjoint = disjoint;
21
+ this.leftValue = leftValue;
22
+ this.rightValue = rightValue;
23
+ }
24
+
25
+ getString() {
26
+ return this.string;
27
+ }
28
+
29
+ getType() {
30
+ return this.type;
31
+ }
32
+
33
+ isDisjoint() {
34
+ return this.disjoint;
35
+ }
36
+
37
+ getLeftValue() {
38
+ return this.leftValue;
39
+ }
40
+
41
+ getRightValue() {
42
+ return this.rightValue;
43
+ }
44
+
45
+ evaluate(context) {
46
+ let value;
47
+
48
+ const bitwiseValueString = this.string; ///
49
+
50
+ context.trace(`Evaluating the '${bitwiseValueString}' bitwise value...`);
51
+
52
+ const { Value } = dom,
53
+ leftValue = this.leftValue.evaluate(context),
54
+ rightValue = this.rightValue.evaluate(context),
55
+ leftValueType = leftValue.getType(),
56
+ rightValueType = rightValue.getType();
57
+
58
+ if (leftValueType !== BOOLEAN_TYPE) {
59
+ const leftValueString = leftValue.asString(context),
60
+ message = `The ${leftValueString} left value's type is '${leftValueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
61
+ exception = Exception.fromMessage(message);
62
+
63
+ throw exception;
64
+ }
65
+
66
+ if (rightValueType !== BOOLEAN_TYPE) {
67
+ const rightValueString = rightValue.asString(context),
68
+ message = `The ${rightValueString} right value's type is '${rightValueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
69
+ exception = Exception.fromMessage(message);
70
+
71
+ throw exception;
72
+ }
73
+
74
+ const leftValueBoolean = leftValue.getBoolean(),
75
+ rightValueBoolean = rightValue.getBoolean(),
76
+ boolean = this.disjoint ?
77
+ (leftValueBoolean || rightValueBoolean) :
78
+ (leftValueBoolean && rightValueBoolean);
79
+
80
+ value = Value.fromBoolean(boolean, context); ///
81
+
82
+ context.debug(`...evaluated the '${bitwiseValueString}' bitwise value.`);
83
+
84
+ return value;
85
+ }
86
+
87
+ static name = "BitwiseValue";
88
+
89
+ static fromValueNode(valueNode, context) {
90
+ let bitwiseValue = null;
91
+
92
+ const bitwiseValueNode = bitwiseValueNodeQuery(valueNode);
93
+
94
+ if (bitwiseValueNode !== null) {
95
+ const { Value } = dom,
96
+ node = bitwiseValueNode, //
97
+ string = context.nodeAsString(node),
98
+ type = BOOLEAN_TYPE,
99
+ leftValueNode = leftValueNodeQuery(bitwiseValueNode),
100
+ rightValueNode = rightValueNodeQuery(bitwiseValueNode),
101
+ disjoint = disjointFromBitwiseValueNode(bitwiseValueNode, context),
102
+ leftValue = Value.fromValueNode(leftValueNode, context),
103
+ rightValue = Value.fromValueNode(rightValueNode, context);
104
+
105
+ bitwiseValue = new BitwiseValue(string, type, disjoint, leftValue, rightValue);
106
+ }
107
+
108
+ return bitwiseValue;
109
+ }
110
+ });
111
+
112
+ function disjointFromBitwiseValueNode(bitwiseValueNode, context) {
113
+ const terminalNode = terminalNodeQuery(bitwiseValueNode),
114
+ terminalNodeContent = terminalNode.getContent(),
115
+ disjoint = (terminalNodeContent === DISJUNCTION);
116
+
117
+ return disjoint;
118
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+
3
+ import dom from "../../dom";
4
+
5
+ import { nodeQuery } from "../../utilities/query";
6
+ import { domAssigned } from "../../dom";
7
+
8
+ const valueNodeQuery = nodeQuery("/bracketedValue/value"),
9
+ valueBracketedValueNodeQuery = nodeQuery("/value/bracketedValue");
10
+
11
+ export default domAssigned(class BracketedValue {
12
+ constructor(string, value) {
13
+ this.string = string;
14
+ this.value = value;
15
+ }
16
+
17
+ getString() {
18
+ return this.string;
19
+ }
20
+
21
+ getValue() {
22
+ return this.value;
23
+ }
24
+
25
+ getType() { return this.value.getType(); }
26
+
27
+ evaluate(context) {
28
+ let value;
29
+
30
+ const bracketedValueString = this.string; ///
31
+
32
+ context.trace(`Evaluating the '${bracketedValueString}' bracketed value...`);
33
+
34
+ value = this.value.evaluate(context);
35
+
36
+ context.debug(`...evaluated the '${bracketedValueString}' bracketed value.`);
37
+
38
+ return value;
39
+ }
40
+
41
+ static name = "BracketedValue";
42
+
43
+ static fromValueNode(valueNode, context) {
44
+ let bracketedValue = null;
45
+
46
+ const valueBracketedValueNode = valueBracketedValueNodeQuery(valueNode);
47
+
48
+ if (valueBracketedValueNode !== null) {
49
+ const { Value } = dom,
50
+ bracketedValueNode = valueBracketedValueNode, ///
51
+ node = bracketedValueNode, ///
52
+ string = context.nodeAsString(node),
53
+ valueNode = valueNodeQuery(bracketedValueNode),
54
+ value = Value.fromValueNode(valueNode, context);
55
+
56
+ bracketedValue = new BracketedValue(string, value);
57
+ }
58
+
59
+ return bracketedValue;
60
+ }
61
+ });
@@ -0,0 +1,84 @@
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 { BOOLEAN_TYPE } from "../../types";
9
+
10
+ const valueNodeQuery = nodeQuery("/negatedValue/value"),
11
+ negatedValueNodeQuery = nodeQuery("/value/negatedValue");
12
+
13
+ export default domAssigned(class NegatedValue {
14
+ constructor(string, type, value) {
15
+ this.string = string;
16
+ this.type = type;
17
+ this.value = value;
18
+ }
19
+
20
+ getString() {
21
+ return this.string;
22
+ }
23
+
24
+ getType() {
25
+ return this.type;
26
+ }
27
+
28
+ getValue() {
29
+ return this.value;
30
+ }
31
+
32
+ evaluate(context) {
33
+ let value;
34
+
35
+ const negatedValueString = this.string; ///
36
+
37
+ context.trace(`Evaluating the '${negatedValueString}' negated value...`);
38
+
39
+ value = this.value.evaluate(context);
40
+
41
+ const valueType = value.getType;
42
+
43
+ if (valueType !== BOOLEAN_TYPE) {
44
+ const valueString = value.asString(context),
45
+ message = `The ${valueString} left value's type is '${valueType}' when it should be of type '${BOOLEAN_TYPE}'.`,
46
+ exception = Exception.fromMessage(message);
47
+
48
+ throw exception;
49
+ }
50
+
51
+ let boolean = value.getBoolean();
52
+
53
+ boolean = !boolean;
54
+
55
+ const { Value } = dom;
56
+
57
+ value = Value.fromBoolean(boolean, context); ///
58
+
59
+ context.debug(`...evaluated the '${negatedValueString}' negated value.`);
60
+
61
+ return value;
62
+ }
63
+
64
+ static name = "NegatedValue";
65
+
66
+ static fromValueNode(valueNode, context) {
67
+ let negatedValue = null;
68
+
69
+ const negatedValueNode = negatedValueNodeQuery(valueNode);
70
+
71
+ if (negatedValueNode !== null) {
72
+ const { Value } = dom,
73
+ node = negatedValueNode, //
74
+ string = context.nodeAsString(node),
75
+ type = BOOLEAN_TYPE,
76
+ valueNode = valueNodeQuery(negatedValueNode),
77
+ value = Value.fromValueNode(valueNode, context);
78
+
79
+ negatedValue = new NegatedValue(string, type, value);
80
+ }
81
+
82
+ return negatedValue;
83
+ }
84
+ });