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/_occam-grammars/furtle/bnf.js +2 -2
- package/lib/dom/conditionalBlocks.js +23 -11
- package/lib/dom/procedureCall.js +2 -2
- package/lib/dom/ternary.js +26 -14
- package/lib/dom/value/bitwise.js +178 -0
- package/lib/dom/value/bracketed.js +141 -0
- package/lib/dom/value/negated.js +158 -0
- package/lib/dom/value.js +43 -8
- package/lib/index.js +4 -5
- package/package.json +4 -4
- package/src/_occam-grammars/furtle/bnf.js +26 -35
- package/src/dom/conditionalBlocks.js +25 -13
- package/src/dom/procedureCall.js +2 -2
- package/src/dom/ternary.js +28 -16
- package/src/dom/value/bitwise.js +118 -0
- package/src/dom/value/bracketed.js +61 -0
- package/src/dom/value/negated.js +84 -0
- package/src/dom/value.js +58 -9
- package/src/index.js +3 -4
- package/lib/dom/condition/bitwise.js +0 -155
- package/lib/dom/condition/bracketed.js +0 -135
- package/lib/dom/condition/negated.js +0 -139
- package/lib/dom/condition.js +0 -198
- package/src/dom/condition/bitwise.js +0 -91
- package/src/dom/condition/bracketed.js +0 -58
- package/src/dom/condition/negated.js +0 -66
- package/src/dom/condition.js +0 -118
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,
|
|
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.
|
|
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.
|
|
14
|
+
"occam-grammars": "^1.3.157"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@swc/core": "^1.5.6",
|
|
18
|
-
"occam-custom-grammars": "^5.0.
|
|
19
|
-
"occam-entities": "^1.0.
|
|
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" "("
|
|
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
|
-
|
|
|
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" "("
|
|
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
|
|
9
|
-
|
|
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,
|
|
16
|
+
constructor(string, value, ifBlock, elseBlock) {
|
|
15
17
|
this.string = string;
|
|
16
|
-
this.
|
|
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
|
-
|
|
26
|
-
return this.
|
|
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.
|
|
43
|
-
|
|
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,
|
|
76
|
+
const { Block, Value } = dom,
|
|
65
77
|
string = stringFromConditionalBlocksNode(conditionalBlocksNode, context),
|
|
66
78
|
ifBlockNode = ifBlockNodeQuery(conditionalBlocksNode),
|
|
67
79
|
elseBlockNode = elseBlockNodeQuery(conditionalBlocksNode),
|
|
68
|
-
|
|
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,
|
|
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
|
|
83
|
-
conditionString = context.nodeAsString(
|
|
94
|
+
const valueNode = valueNodeQuery(conditionalBlocksNode),
|
|
95
|
+
conditionString = context.nodeAsString(valueNode);
|
|
84
96
|
|
|
85
97
|
string = `If (${conditionString}) { ... }`;
|
|
86
98
|
|
package/src/dom/procedureCall.js
CHANGED
|
@@ -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
|
|
7
|
-
import Exception from "../exception";
|
|
7
|
+
import { nodeQuery } from "../utilities/query";
|
|
8
8
|
|
|
9
9
|
const procedureCallNodeQuery = nodeQuery("/value/procedureCall");
|
|
10
10
|
|
package/src/dom/ternary.js
CHANGED
|
@@ -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
|
|
10
|
+
const valueNodeQuery = nodeQuery("/ternary/value[0]"),
|
|
11
|
+
ifValueNodeQuery = nodeQuery("/ternary/value[1]"),
|
|
9
12
|
ternaryNodeQuery = nodeQuery("/value/ternary"),
|
|
10
|
-
|
|
11
|
-
elseValueNodeQuery = nodeQuery("/ternary/value[1]");
|
|
13
|
+
elseValueNodeQuery = nodeQuery("/ternary/value[2]");
|
|
12
14
|
|
|
13
15
|
export default domAssigned(class Ternary {
|
|
14
|
-
constructor(string,
|
|
16
|
+
constructor(string, value, ifValue, elseValue) {
|
|
15
17
|
this.string = string;
|
|
16
|
-
this.
|
|
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
|
-
|
|
26
|
-
return this.
|
|
27
|
+
getValue() {
|
|
28
|
+
return this.value;
|
|
27
29
|
}
|
|
28
30
|
|
|
29
|
-
|
|
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.
|
|
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
|
|
77
|
+
const { Value } = dom,
|
|
66
78
|
string = stringFromTernaryNode(ternaryNode, context),
|
|
67
79
|
ifValueNode = ifValueNodeQuery(ternaryNode),
|
|
68
80
|
elseValueNode = elseValueNodeQuery(ternaryNode),
|
|
69
|
-
|
|
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,
|
|
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
|
|
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
|
-
|
|
100
|
+
valueString = context.nodeAsString(valueNode);
|
|
89
101
|
|
|
90
|
-
string = `If (${
|
|
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
|
+
});
|