-
Notifications
You must be signed in to change notification settings - Fork 0
/
Nodes.js
123 lines (104 loc) · 2.19 KB
/
Nodes.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
* @module seljs/Nodes
*/
"use strict";
class Value {
constructor (value) {
this.value = value;
}
}
class Literal extends Value {
getValue () {
return this.value;
}
}
class Identifier extends Value {
getValue (ctx) {
if (ctx === null || ctx === undefined) {
return null;
}
const value = this.value;
return ctx.hasOwnProperty(value) ? ctx[value] : null;
}
}
class BinaryOperator {
constructor (left, right) {
this.left = left;
this.right = right;
}
getValue(ctx) {
return this.op(this.left.getValue(ctx), this.right.getValue(ctx));
}
}
class Addition extends BinaryOperator {
op (left, right) {
return left + right;
}
}
class Subtraction extends BinaryOperator {
op (left, right) {
return left - right;
}
}
class Multiplication extends BinaryOperator {
op (left, right) {
return left * right;
}
}
class Division extends BinaryOperator {
op (left, right) {
return left / right;
}
}
class And extends BinaryOperator {
op (left, right) {
return left && right;
}
}
class Or extends BinaryOperator {
op (left, right) {
return left || right;
}
}
class Equals extends BinaryOperator {
op (left, right) {
return left === right;
}
}
class NotEquals extends BinaryOperator {
op (left, right) {
return left !== right;
}
}
class Greater extends BinaryOperator {
op (left, right) {
return left > right;
}
}
class GreaterEquals extends BinaryOperator {
op (left, right) {
return left >= right;
}
}
class Less extends BinaryOperator {
op (left, right) {
return left < right;
}
}
class LessEquals extends BinaryOperator {
op (left, right) {
return left <= right;
}
}
class Dot extends BinaryOperator {
getValue (ctx) {
// TODO Pass the global context also
return this.right.getValue(this.left.getValue(ctx));
}
}
module.exports = {
Literal, Identifier,
Addition, Subtraction, Multiplication, Division,
And, Or, Equals, NotEquals, Greater, GreaterEquals, Less, LessEquals,
Dot
};