-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathglobal.js
105 lines (83 loc) · 1.91 KB
/
global.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
var runTerm = require('./runTerm');
function equal(scope, args){
return args.next() == args.next();
}
function notEqual(scope, args){
return args.next() != args.next();
}
function and(scope, args){
return args.next() && args.next();
}
function or(scope, args){
return args.next() || args.next();
}
function not(scope, args){
return !args.next();
}
function reverse(scope, args){
return args.next().split('').reverse().join('');
}
function ifFn(scope, args){
return args.next() ? args.get(1) : args.get(2);
}
function addition(scope, args){
return args.next() + args.next()
}
function subtraction(scope, args){
return args.next() - args.next()
}
function multiplication(scope, args){
return args.next() * args.next()
}
function division(scope, args){
return args.next() / args.next()
}
function modulus(scope, args){
return args.next() / args.next()
}
function lessThan(scope, args){
return args.next() < args.next()
}
function greaterThan(scope, args){
return args.next() > args.next()
}
function lessThanOrEqual(scope, args){
return args.next() <= args.next()
}
function greaterThanOrEqual(scope, args){
return args.next() >= args.next()
}
function termExists(scope, args){
var term = scope.get(args.next());
return !!term;
}
function runTermFunction(scope, args){
var term = scope.get(args.next()),
args;
if(term.argsToken){
args = term.argsToken.arguments;
}else{
args = args.rest();
}
return runTerm(term, args, scope);
}
module.exports = {
'=': equal,
'!=': notEqual,
'reverse': reverse,
'?': ifFn,
'!': not,
'&&': and,
'||': or,
'+': addition,
'-': subtraction,
'*': multiplication,
'/': division,
'%': modulus,
'<': lessThan,
'>': greaterThan,
'<=': lessThanOrEqual,
'>=': greaterThanOrEqual,
'?>': termExists,
'->': runTermFunction
};