-
Notifications
You must be signed in to change notification settings - Fork 0
/
LogicOperator.hx
109 lines (108 loc) · 2.46 KB
/
LogicOperator.hx
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
package compiler;
import ace.AceMacro;
import js.lib.RegExp;
/**
* ...
* @author YellowAfterlife
*/
@:build(compiler.LogicMacroTools.buildValueNameMap(valNameMap))
enum abstract LogicOperator(String) {
public static var valNameMap:Map<String, String>;
public static var isUnary:Map<LogicOperator, Bool> = {
var m:Map<LogicOperator, Bool> = new Map();
m[Not] = true;
m[Abs] = true;
m[Log] = true;
m[Log10] = true;
m[Floor] = true;
m[Ceil] = true;
m[Sqrt] = true;
m[Rand] = true;
m[Sin] = true;
m[Cos] = true;
m[Tan] = true;
m[Asin] = true;
m[Acos] = true;
m[Atan] = true;
m;
};
public static var logOpToBinOp:Map<LogicOperator, String>;
/**
*
*/
public static var binOpToLogOp:Map<String, LogicOperator> = {
var b2l = new Map();
var l2b = new Map();
inline function set(op:String, logOp:LogicOperator):Void {
b2l[op] = logOp;
l2b[logOp] = op;
}
set("+", Add);
set("-", Sub);
set("*", Mul);
set("/", Div);
set("//", Idiv);
set("%", Mod);
set("**", Pow);
set("==", Equal);
set("!=", NotEqual);
set("<>", NotEqual);
set("<", LessThan);
set("<=", LessThanEq);
set(">", GreaterThan);
set(">=", GreaterThanEq);
set("===", StrictEqual);
set("<<", Shl);
set(">>", Shr);
set("&", And);
set("|", Or);
set("^", Xor);
set("&&", LAnd);
logOpToBinOp = l2b;
b2l;
};
public static inline var rsOps = '\\+|\\-|==?=?|&&?|>[=>]?|<[<=>]?|!=|\\/\\/?|\\*\\*?|%|\\|';
public static inline var rsSetOps = '\\+|\\-|\\*\\*?|//?|%|<<|>>|&|^|\\|';
public static var rxOpHere:RegExp = new RegExp("^(?:" + rsOps +")");
public static var rxIsSetOp:RegExp = new RegExp("^(?:" + rsSetOps +")$");
var Add = "add";
var Sub = "sub";
var Mul = "mul";
var Div = "div";
var Idiv = "idiv";
var Mod = "mod";
var Pow = "pow";
var Equal = "equal";
var NotEqual = "notEqual";
var LAnd = "land";
var LessThan = "lessThan";
var LessThanEq = "lessThanEq";
var GreaterThan = "greaterThan";
var GreaterThanEq = "greaterThanEq";
var StrictEqual = "strictEqual";
var Shl = "shl";
var Shr = "shr";
var Or = "or";
var And = "and";
var Xor = "xor";
/** BITWISE not */
var Not = "not";
var Max = "max";
var Min = "min";
var Angle = "angle";
var Len = "len";
var Noise = "noise";
var Abs = "abs";
var Log = "log";
var Log10 = "log10";
var Floor = "floor";
var Ceil = "ceil";
var Sqrt = "sqrt";
var Rand = "rand";
var Sin = "sin";
var Cos = "cos";
var Tan = "tan";
var Asin = "asin";
var Acos = "acos";
var Atan = "atan";
}