|
55 | 55 | ECMA_MATH_OBJECT_EXP, /* ECMA-262 v5, 15.8.2.8 */ |
56 | 56 | ECMA_MATH_OBJECT_FLOOR, /* ECMA-262 v5, 15.8.2.9 */ |
57 | 57 | ECMA_MATH_OBJECT_LOG, /* ECMA-262 v5, 15.8.2.10 */ |
| 58 | +#if ENABLED (JERRY_ES2015_BUILTIN) |
| 59 | + ECMA_MATH_OBJECT_TRUNC, /* ECMA-262 v6, 20.2.2.35 */ |
| 60 | + ECMA_MATH_OBJECT_SIGN, /* ECMA-262 v6, 20.2.2.29 */ |
| 61 | +#endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
58 | 62 | ECMA_MATH_OBJECT_ROUND, /* ECMA-262 v5, 15.8.2.15 */ |
59 | 63 | ECMA_MATH_OBJECT_SIN, /* ECMA-262 v5, 15.8.2.16 */ |
60 | 64 | ECMA_MATH_OBJECT_SQRT, /* ECMA-262 v5, 15.8.2.17 */ |
@@ -153,6 +157,61 @@ ecma_builtin_math_object_max_min (bool is_max, /**< 'max' or 'min' operation */ |
153 | 157 | return ecma_make_number_value (result_num); |
154 | 158 | } /* ecma_builtin_math_object_max_min */ |
155 | 159 |
|
| 160 | +#if ENABLED (JERRY_ES2015_BUILTIN) |
| 161 | +/** |
| 162 | + * The Math object's 'trunc' routine |
| 163 | + * |
| 164 | + * See also: |
| 165 | + * ECMA-262 v6, 20.2.2.35 |
| 166 | + * |
| 167 | + * @return ecma number |
| 168 | + */ |
| 169 | +static ecma_number_t |
| 170 | +ecma_builtin_math_object_trunc (ecma_number_t arg) |
| 171 | +{ |
| 172 | + if (ecma_number_is_nan (arg) || ecma_number_is_infinity (arg) || ecma_number_is_zero (arg)) |
| 173 | + { |
| 174 | + return arg; |
| 175 | + } |
| 176 | + |
| 177 | + if ((arg > 0) && (arg < 1)) |
| 178 | + { |
| 179 | + return (ecma_number_t) 0; |
| 180 | + } |
| 181 | + |
| 182 | + if ((arg < 0) && (arg > -1)) |
| 183 | + { |
| 184 | + return (ecma_number_t) -0; |
| 185 | + } |
| 186 | + |
| 187 | + return (ecma_number_t) arg - fmod (arg, 1); |
| 188 | +} /* ecma_builtin_math_object_trunc */ |
| 189 | + |
| 190 | +/** |
| 191 | + * The Math object's 'sign' routine |
| 192 | + * |
| 193 | + * See also: |
| 194 | + * ECMA-262 v6, 20.2.2.29 |
| 195 | + * |
| 196 | + * @return ecma number |
| 197 | + */ |
| 198 | +static ecma_number_t |
| 199 | +ecma_builtin_math_object_sign (ecma_number_t arg) |
| 200 | +{ |
| 201 | + if (ecma_number_is_nan (arg) || ecma_number_is_zero (arg)) |
| 202 | + { |
| 203 | + return arg; |
| 204 | + } |
| 205 | + |
| 206 | + if (ecma_number_is_negative (arg)) |
| 207 | + { |
| 208 | + return (ecma_number_t) -1.0; |
| 209 | + } |
| 210 | + |
| 211 | + return (ecma_number_t) 1.0; |
| 212 | +} /* ecma_builtin_math_object_sign */ |
| 213 | +#endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
| 214 | + |
156 | 215 | /** |
157 | 216 | * The Math object's 'random' routine. |
158 | 217 | * |
@@ -282,6 +341,18 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w |
282 | 341 | x = DOUBLE_TO_ECMA_NUMBER_T (log (x)); |
283 | 342 | break; |
284 | 343 | } |
| 344 | +#if ENABLED (JERRY_ES2015_BUILTIN) |
| 345 | + case ECMA_MATH_OBJECT_TRUNC: |
| 346 | + { |
| 347 | + x = ecma_builtin_math_object_trunc (x); |
| 348 | + break; |
| 349 | + } |
| 350 | + case ECMA_MATH_OBJECT_SIGN: |
| 351 | + { |
| 352 | + x = ecma_builtin_math_object_sign (x); |
| 353 | + break; |
| 354 | + } |
| 355 | +#endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
285 | 356 | case ECMA_MATH_OBJECT_ROUND: |
286 | 357 | { |
287 | 358 | if (ecma_number_is_nan (x) |
|
0 commit comments