|
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 | + #endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
58 | 61 | ECMA_MATH_OBJECT_ROUND, /* ECMA-262 v5, 15.8.2.15 */ |
59 | 62 | ECMA_MATH_OBJECT_SIN, /* ECMA-262 v5, 15.8.2.16 */ |
60 | 63 | ECMA_MATH_OBJECT_SQRT, /* ECMA-262 v5, 15.8.2.17 */ |
61 | 64 | ECMA_MATH_OBJECT_TAN, /* ECMA-262 v5, 15.8.2.18 */ |
62 | | - |
| 65 | + #if ENABLED (JERRY_ES2015_BUILTIN) |
| 66 | + ECMA_MATH_OBJECT_SIGN, /* ECMA-262 v6, 20.2.2.29 */ |
| 67 | + #endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
63 | 68 | ECMA_MATH_OBJECT_ATAN2, /* ECMA-262 v5, 15.8.2.5 */ |
64 | 69 | ECMA_MATH_OBJECT_POW, /* ECMA-262 v5, 15.8.2.13 */ |
65 | 70 |
|
@@ -153,6 +158,65 @@ ecma_builtin_math_object_max_min (bool is_max, /**< 'max' or 'min' operation */ |
153 | 158 | return ecma_make_number_value (result_num); |
154 | 159 | } /* ecma_builtin_math_object_max_min */ |
155 | 160 |
|
| 161 | +#if ENABLED (JERRY_ES2015_BUILTIN) |
| 162 | + |
| 163 | +/** |
| 164 | + * The Number.prototype object's 'Math.trunc' routine |
| 165 | + * |
| 166 | + * See also: |
| 167 | + * ECMA-262 v6, 20.2.2.35 |
| 168 | + * |
| 169 | + * @return ecma value |
| 170 | + * Returned value must be freed with ecma_free_value. |
| 171 | + */ |
| 172 | +static ecma_number_t |
| 173 | +ecma_builtin_math_object_trunc (ecma_number_t arg) |
| 174 | +{ |
| 175 | + if (ecma_number_is_nan (arg) || ecma_number_is_infinity (arg) || ecma_number_is_zero (arg)) |
| 176 | + { |
| 177 | + return arg; |
| 178 | + } |
| 179 | + |
| 180 | + if ((arg > 0) && (arg < 1)) |
| 181 | + { |
| 182 | + return (ecma_number_t) 0; |
| 183 | + } |
| 184 | + |
| 185 | + if ((arg < 0) && (arg > -1)) |
| 186 | + { |
| 187 | + return (ecma_number_t) -0; |
| 188 | + } |
| 189 | + |
| 190 | + return (ecma_number_t) arg - fmod (arg,1); |
| 191 | +} /* ecma_builtin_math_object_trunc */ |
| 192 | + |
| 193 | +/** |
| 194 | + * The Number.prototype object's 'Math.sign' routine |
| 195 | + * |
| 196 | + * See also: |
| 197 | + * ECMA-262 v6, 20.2.2.29 |
| 198 | + * |
| 199 | + * @return ecma value |
| 200 | + * Returned value must be freed with ecma_free_value. |
| 201 | + */ |
| 202 | +static ecma_number_t |
| 203 | +ecma_builtin_math_object_sign (ecma_number_t arg) |
| 204 | +{ |
| 205 | + if (ecma_number_is_nan (arg) || ecma_number_is_zero (arg)) |
| 206 | + { |
| 207 | + return arg; |
| 208 | + } |
| 209 | + |
| 210 | + if (ecma_number_is_negative (arg)) |
| 211 | + { |
| 212 | + return (ecma_number_t) -1.0; |
| 213 | + } |
| 214 | + |
| 215 | + return (ecma_number_t) 1.0; |
| 216 | +} /* ecma_builtin_math_object_sign */ |
| 217 | + |
| 218 | +#endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
| 219 | + |
156 | 220 | /** |
157 | 221 | * The Math object's 'random' routine. |
158 | 222 | * |
@@ -282,6 +346,17 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w |
282 | 346 | x = DOUBLE_TO_ECMA_NUMBER_T (log (x)); |
283 | 347 | break; |
284 | 348 | } |
| 349 | + |
| 350 | + #if ENABLED (JERRY_ES2015_BUILTIN) |
| 351 | + |
| 352 | + case ECMA_MATH_OBJECT_TRUNC: |
| 353 | + { |
| 354 | + x = ecma_builtin_math_object_trunc (x); |
| 355 | + break; |
| 356 | + } |
| 357 | + |
| 358 | + #endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
| 359 | + |
285 | 360 | case ECMA_MATH_OBJECT_ROUND: |
286 | 361 | { |
287 | 362 | if (ecma_number_is_nan (x) |
@@ -328,6 +403,13 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w |
328 | 403 | x = DOUBLE_TO_ECMA_NUMBER_T (tan (x)); |
329 | 404 | break; |
330 | 405 | } |
| 406 | + #if ENABLED (JERRY_ES2015_BUILTIN) |
| 407 | + case ECMA_MATH_OBJECT_SIGN: |
| 408 | + { |
| 409 | + x = ecma_builtin_math_object_sign (x); |
| 410 | + break; |
| 411 | + } |
| 412 | + #endif /* ENABLED (JERRY_ES2015_BUILTIN) */ |
331 | 413 | case ECMA_MATH_OBJECT_ATAN2: |
332 | 414 | { |
333 | 415 | x = DOUBLE_TO_ECMA_NUMBER_T (atan2 (x, y)); |
|
0 commit comments