@@ -12,88 +12,93 @@ export function configurePrecision (engine, constructor, compatible = true) {
12
12
13
13
engine . addMethod ( '+' , {
14
14
method : ( data ) => {
15
- if ( typeof data === 'string' ) return constructor ( data )
16
- if ( typeof data === 'number' ) return constructor ( data )
17
- let res = constructor ( data [ 0 ] )
15
+ if ( typeof data === 'string' ) return new constructor ( data )
16
+ if ( typeof data === 'number' ) return new constructor ( data )
17
+ let res = new constructor ( data [ 0 ] )
18
18
for ( let i = 1 ; i < data . length ; i ++ ) res = res . plus ( data [ i ] )
19
19
return res
20
20
} ,
21
21
compile : ( args , buildState ) => {
22
22
if ( Array . isArray ( args ) ) {
23
- let res = buildState . compile `(engine.precision(${ args [ 0 ] } ))`
23
+ let res = buildState . compile `(new engine.precision(${ args [ 0 ] } ))`
24
24
for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `(${ res } .plus(${ args [ i ] } ))`
25
25
return res
26
26
}
27
27
return false
28
- }
28
+ } ,
29
+ traverse : true
29
30
} , { optimizeUnary : true , sync : true , deterministic : true } )
30
31
31
32
engine . addMethod ( '-' , {
32
33
method : ( data ) => {
33
- if ( typeof data === 'string' ) return constructor ( data ) . mul ( - 1 )
34
- if ( typeof data === 'number' ) return constructor ( data ) . mul ( - 1 )
35
- let res = constructor ( data [ 0 ] )
34
+ if ( typeof data === 'string' ) return new constructor ( data ) . mul ( - 1 )
35
+ if ( typeof data === 'number' ) return new constructor ( data ) . mul ( - 1 )
36
+ let res = new constructor ( data [ 0 ] )
36
37
if ( data . length === 1 ) return res . mul ( - 1 )
37
38
for ( let i = 1 ; i < data . length ; i ++ ) res = res . minus ( data [ i ] )
38
39
return res
39
40
} ,
40
41
compile : ( args , buildState ) => {
41
42
if ( Array . isArray ( args ) ) {
42
- let res = buildState . compile `(engine.precision(${ args [ 0 ] } ))`
43
+ let res = buildState . compile `(new engine.precision(${ args [ 0 ] } ))`
43
44
if ( args . length === 1 ) return buildState . compile `(${ res } .mul(-1))`
44
45
for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `(${ res } .minus(${ args [ i ] } ))`
45
46
return res
46
47
}
47
48
return false
48
- }
49
+ } ,
50
+ traverse : true
49
51
} , { optimizeUnary : true , sync : true , deterministic : true } )
50
52
51
53
engine . addMethod ( '*' , {
52
54
method : ( data ) => {
53
- let res = constructor ( data [ 0 ] )
55
+ let res = new constructor ( data [ 0 ] )
54
56
for ( let i = 1 ; i < data . length ; i ++ ) res = res . mul ( data [ i ] )
55
57
return res
56
58
} ,
57
59
compile : ( args , buildState ) => {
58
60
if ( Array . isArray ( args ) ) {
59
- let res = buildState . compile `(engine.precision(${ args [ 0 ] } ))`
61
+ let res = buildState . compile `(new engine.precision(${ args [ 0 ] } ))`
60
62
for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `(${ res } .mul(${ args [ i ] } ))`
61
63
return res
62
64
}
63
65
return false
64
- }
66
+ } ,
67
+ traverse : true
65
68
} , { sync : true , deterministic : true } )
66
69
67
70
engine . addMethod ( '/' , {
68
71
method : ( data ) => {
69
- let res = constructor ( data [ 0 ] )
72
+ let res = new constructor ( data [ 0 ] )
70
73
for ( let i = 1 ; i < data . length ; i ++ ) res = res . div ( data [ i ] )
71
74
return res
72
75
} ,
73
76
compile : ( args , buildState ) => {
74
77
if ( Array . isArray ( args ) ) {
75
- let res = buildState . compile `(engine.precision(${ args [ 0 ] } ))`
78
+ let res = buildState . compile `(new engine.precision(${ args [ 0 ] } ))`
76
79
for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `(${ res } .div(${ args [ i ] } ))`
77
80
return res
78
81
}
79
82
return false
80
- }
83
+ } ,
84
+ traverse : true
81
85
} , { sync : true , deterministic : true } )
82
86
83
87
engine . addMethod ( '%' , {
84
88
method : ( data ) => {
85
- let res = constructor ( data [ 0 ] )
89
+ let res = new constructor ( data [ 0 ] )
86
90
for ( let i = 1 ; i < data . length ; i ++ ) res = res . mod ( data [ i ] )
87
91
return res
88
92
} ,
89
93
compile : ( args , buildState ) => {
90
94
if ( Array . isArray ( args ) ) {
91
- let res = buildState . compile `(engine.precision(${ args [ 0 ] } ))`
95
+ let res = buildState . compile `(new engine.precision(${ args [ 0 ] } ))`
92
96
for ( let i = 1 ; i < args . length ; i ++ ) res = buildState . compile `(${ res } .mod(${ args [ i ] } ))`
93
97
return res
94
98
}
95
99
return false
96
- }
100
+ } ,
101
+ traverse : true
97
102
} , { sync : true , deterministic : true } )
98
103
99
104
engine . addMethod ( '===' , {
@@ -109,7 +114,8 @@ export function configurePrecision (engine, constructor, compatible = true) {
109
114
if ( args [ i - 1 ] !== args [ i ] ) return false
110
115
}
111
116
return true
112
- }
117
+ } ,
118
+ traverse : true
113
119
} , { sync : true , deterministic : true } )
114
120
115
121
engine . addMethod ( '!==' , {
@@ -126,6 +132,74 @@ export function configurePrecision (engine, constructor, compatible = true) {
126
132
}
127
133
return false
128
134
} ,
129
- deterministic : true
135
+ traverse : true
136
+ } , { sync : true , deterministic : true } )
137
+
138
+ engine . addMethod ( '>' , {
139
+ method : ( args ) => {
140
+ if ( args . length === 2 ) {
141
+ if ( args [ 0 ] . gt ) return args [ 0 ] . gt ( args [ 1 ] )
142
+ if ( args [ 1 ] . lt ) return args [ 1 ] . lt ( args [ 0 ] )
143
+ return args [ 0 ] > args [ 1 ]
144
+ }
145
+ for ( let i = 1 ; i < args . length ; i ++ ) {
146
+ if ( args [ i - 1 ] . gt && ! args [ i - 1 ] . gt ( args [ i ] ) ) return false
147
+ if ( args [ i ] . lt && ! args [ i ] . lt ( args [ i - 1 ] ) ) return false
148
+ if ( args [ i - 1 ] <= args [ i ] ) return false
149
+ }
150
+ return true
151
+ } ,
152
+ traverse : true
153
+ } , { sync : true , deterministic : true } )
154
+
155
+ engine . addMethod ( '>=' , {
156
+ method : ( args ) => {
157
+ if ( args . length === 2 ) {
158
+ if ( args [ 0 ] . gte ) return args [ 0 ] . gte ( args [ 1 ] )
159
+ if ( args [ 1 ] . lte ) return args [ 1 ] . lte ( args [ 0 ] )
160
+ return args [ 0 ] >= args [ 1 ]
161
+ }
162
+ for ( let i = 1 ; i < args . length ; i ++ ) {
163
+ if ( args [ i - 1 ] . gte && ! args [ i - 1 ] . gte ( args [ i ] ) ) return false
164
+ if ( args [ i ] . lte && ! args [ i ] . lte ( args [ i - 1 ] ) ) return false
165
+ if ( args [ i - 1 ] < args [ i ] ) return false
166
+ }
167
+ return true
168
+ } ,
169
+ traverse : true
170
+ } , { sync : true , deterministic : true } )
171
+
172
+ engine . addMethod ( '<' , {
173
+ method : ( args ) => {
174
+ if ( args . length === 2 ) {
175
+ if ( args [ 0 ] . lt ) return args [ 0 ] . lt ( args [ 1 ] )
176
+ if ( args [ 1 ] . gt ) return args [ 1 ] . gt ( args [ 0 ] )
177
+ return args [ 0 ] < args [ 1 ]
178
+ }
179
+ for ( let i = 1 ; i < args . length ; i ++ ) {
180
+ if ( args [ i - 1 ] . lt && ! args [ i - 1 ] . lt ( args [ i ] ) ) return false
181
+ if ( args [ i ] . gt && ! args [ i ] . gt ( args [ i - 1 ] ) ) return false
182
+ if ( args [ i - 1 ] >= args [ i ] ) return false
183
+ }
184
+ return true
185
+ } ,
186
+ traverse : true
187
+ } , { sync : true , deterministic : true } )
188
+
189
+ engine . addMethod ( '<=' , {
190
+ method : ( args ) => {
191
+ if ( args . length === 2 ) {
192
+ if ( args [ 0 ] . lte ) return args [ 0 ] . lte ( args [ 1 ] )
193
+ if ( args [ 1 ] . gte ) return args [ 1 ] . gte ( args [ 0 ] )
194
+ return args [ 0 ] <= args [ 1 ]
195
+ }
196
+ for ( let i = 1 ; i < args . length ; i ++ ) {
197
+ if ( args [ i - 1 ] . lte && ! args [ i - 1 ] . lte ( args [ i ] ) ) return false
198
+ if ( args [ i ] . gte && ! args [ i ] . gte ( args [ i - 1 ] ) ) return false
199
+ if ( args [ i - 1 ] > args [ i ] ) return false
200
+ }
201
+ return true
202
+ } ,
203
+ traverse : true
130
204
} , { sync : true , deterministic : true } )
131
205
}
0 commit comments