diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-math.c b/jerry-core/ecma/builtin-objects/ecma-builtin-math.c index 15f7a704c..bcddf8c9d 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-math.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-math.c @@ -29,6 +29,10 @@ #include "jrt.h" #include "jrt-libc-includes.h" +#if defined (WIN32) +#include +#endif + #if ENABLED (JERRY_BUILTIN_MATH) #define ECMA_BUILTINS_INTERNAL @@ -55,21 +59,37 @@ enum ECMA_MATH_OBJECT_EXP, /* ECMA-262 v5, 15.8.2.8 */ ECMA_MATH_OBJECT_FLOOR, /* ECMA-262 v5, 15.8.2.9 */ ECMA_MATH_OBJECT_LOG, /* ECMA-262 v5, 15.8.2.10 */ -#if ENABLED (JERRY_ES2015) - ECMA_MATH_OBJECT_TRUNC, /* ECMA-262 v6, 20.2.2.35 */ - ECMA_MATH_OBJECT_SIGN, /* ECMA-262 v6, 20.2.2.29 */ -#endif /* ENABLED (JERRY_ES2015) */ ECMA_MATH_OBJECT_ROUND, /* ECMA-262 v5, 15.8.2.15 */ ECMA_MATH_OBJECT_SIN, /* ECMA-262 v5, 15.8.2.16 */ ECMA_MATH_OBJECT_SQRT, /* ECMA-262 v5, 15.8.2.17 */ ECMA_MATH_OBJECT_TAN, /* ECMA-262 v5, 15.8.2.18 */ - - ECMA_MATH_OBJECT_ATAN2, /* ECMA-262 v5, 15.8.2.5 */ - ECMA_MATH_OBJECT_POW, /* ECMA-262 v5, 15.8.2.13 */ - +#if ENABLED (JERRY_ES2015) + ECMA_MATH_OBJECT_ACOSH, /* ECMA-262 v6, 20.2.2.3 */ + ECMA_MATH_OBJECT_ASINH, /* ECMA-262 v6, 20.2.2.5 */ + ECMA_MATH_OBJECT_ATANH, /* ECMA-262 v6, 20.2.2.7 */ + ECMA_MATH_OBJECT_CBRT, /* ECMA-262 v6, 20.2.2.9 */ + ECMA_MATH_OBJECT_CLZ32, /* ECMA-262 v6, 20.2.2.11 */ + ECMA_MATH_OBJECT_COSH, /* ECMA-262 v6, 20.2.2.13 */ + ECMA_MATH_OBJECT_EXPM1, /* ECMA-262 v6, 20.2.2.15 */ + ECMA_MATH_OBJECT_FROUND, /* ECMA-262 v6, 20.2.2.17 */ + ECMA_MATH_OBJECT_LOG1P, /* ECMA-262 v6, 20.2.2.21 */ + ECMA_MATH_OBJECT_LOG10, /* ECMA-262 v6, 20.2.2.22 */ + ECMA_MATH_OBJECT_LOG2, /* ECMA-262 v6, 20.2.2.23 */ + ECMA_MATH_OBJECT_SIGN, /* ECMA-262 v6, 20.2.2.29 */ + ECMA_MATH_OBJECT_SINH, /* ECMA-262 v6, 20.2.2.31 */ + ECMA_MATH_OBJECT_TANH, /* ECMA-262 v6, 20.2.2.34 */ + ECMA_MATH_OBJECT_TRUNC, /* ECMA-262 v6, 20.2.2.35 */ +#endif /* ENABLED (JERRY_ES2015) */ + ECMA_MATH_OBJECT_ATAN2, /* ECMA-262 v5, 15.8.2.5 */ /* first routine with 2 arguments */ +#if ENABLED (JERRY_ES2015) + ECMA_MATH_OBJECT_IMUL, /* ECMA-262 v6, 20.2.2.19 */ +#endif /* ENABLED (JERRY_ES2015) */ + ECMA_MATH_OBJECT_POW, /* ECMA-262 v5, 15.8.2.13 */ /* last routine with 1 or 2 arguments*/ ECMA_MATH_OBJECT_MAX, /* ECMA-262 v5, 15.8.2.11 */ ECMA_MATH_OBJECT_MIN, /* ECMA-262 v5, 15.8.2.12 */ - +#if ENABLED (JERRY_ES2015) + ECMA_MATH_OBJECT_HYPOT, /* ECMA-262 v6, 20.2.2.18 */ +#endif /* ENABLED (JERRY_ES2015) */ ECMA_MATH_OBJECT_RANDOM, /* ECMA-262 v5, 15.8.2.14 */ }; @@ -164,6 +184,76 @@ ecma_builtin_math_object_max_min (bool is_max, /**< 'max' or 'min' operation */ } /* ecma_builtin_math_object_max_min */ #if ENABLED (JERRY_ES2015) +/** + * The Math object's 'hypot' routine + * + * See also: + * ECMA-262 v6, 20.2.2.18 + * + * @return ecma value + * Returned value must be freed with ecma_free_value. + */ +static ecma_value_t +ecma_builtin_math_object_hypot (const ecma_value_t *arg, /**< arguments list */ + ecma_length_t args_number) /**< number of arguments */ +{ + if (args_number == 0) + { + return ecma_make_number_value (0.0); + } + + bool nan_found = false; + bool inf_found = false; + ecma_number_t result_num = 0; + + while (args_number > 0) + { + ecma_number_t arg_num; + if (ecma_is_value_number (*arg)) + { + arg_num = ecma_get_number_from_value (*arg); + } + else + { + ecma_value_t value = ecma_op_to_number (*arg); + if (ECMA_IS_VALUE_ERROR (value)) + { + return value; + } + arg_num = ecma_get_number_from_value (value); + ecma_fast_free_value (value); + } + + arg++; + args_number--; + + if (JERRY_UNLIKELY (inf_found || ecma_number_is_infinity (arg_num))) + { + inf_found = true; + continue; + } + + if (JERRY_UNLIKELY (nan_found || ecma_number_is_nan (arg_num))) + { + nan_found = true; + continue; + } + + result_num += arg_num * arg_num; + } + + if (JERRY_UNLIKELY (inf_found)) + { + return ecma_make_number_value (ecma_number_make_infinity (false)); + } + + if (JERRY_UNLIKELY (nan_found)) + { + return ecma_make_nan_value (); + } + + return ecma_make_number_value (sqrt (result_num)); +} /* ecma_builtin_math_object_hypot */ /** * The Math object's 'trunc' routine @@ -432,10 +522,141 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w } break; } +#if ENABLED (JERRY_ES2015) + case ECMA_MATH_OBJECT_ACOSH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.acosh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (acosh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_ASINH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.asinh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (asinh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_ATANH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.atanh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (atanh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_CBRT: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.cbrt")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (cbrt (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_COSH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.cosh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (cosh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_EXPM1: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.expm1")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (expm1 (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_LOG1P: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.log1p")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (log1p (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_LOG10: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.log10")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (log10 (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_LOG2: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.log2")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (log2 (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_SINH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.sinh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (sinh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_TANH: + { +#ifdef JERRY_LIBM_MATH_H + return ecma_raise_type_error (ECMA_ERR_MSG ("UNIMPLEMENTED: Math.tanh")); +#else /* !JERRY_LIBM_MATH_H */ + x = DOUBLE_TO_ECMA_NUMBER_T (tanh (x)); +#endif /* JERRY_LIBM_MATH_H */ + break; + } + case ECMA_MATH_OBJECT_CLZ32: + { + uint32_t n = ecma_number_to_uint32 (x); +#if defined (__GNUC__) || defined (__clang__) + x = n ? __builtin_clz (n) : 32; +#elif defined (WIN32) + unsigned long ret; + x = _BitScanReverse (&ret, n) ? 31 - ret : 32; +#else + x = 32; + for (int i = 31; i >= 0; i--) + { + if (n >> i) + { + x = 31 - i; + break; + } + } +#endif + break; + } + case ECMA_MATH_OBJECT_FROUND: + { + x = (float) x; + break; + } + case ECMA_MATH_OBJECT_IMUL: + { + x = (int32_t) (ecma_number_to_uint32 (x) * ecma_number_to_uint32 (y)); + break; + } +#endif /* ENABLED (JERRY_ES2015) */ } - return ecma_make_number_value (x); - } + } /* if (builtin_routine_id <= ECMA_MATH_OBJECT_POW) */ if (builtin_routine_id <= ECMA_MATH_OBJECT_MIN) { @@ -444,6 +665,13 @@ ecma_builtin_math_dispatch_routine (uint16_t builtin_routine_id, /**< built-in w arguments_number); } +#if ENABLED (JERRY_ES2015) + if (builtin_routine_id == ECMA_MATH_OBJECT_HYPOT) + { + return ecma_builtin_math_object_hypot (arguments_list, arguments_number); + } +#endif /* ENABLED (JERRY_ES2015) */ + JERRY_ASSERT (builtin_routine_id == ECMA_MATH_OBJECT_RANDOM); return ecma_builtin_math_object_random (); diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h index 77d3e8a72..e49bf1d90 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h @@ -92,7 +92,22 @@ ROUTINE (LIT_MAGIC_STRING_SIN, ECMA_MATH_OBJECT_SIN, 1, 1) ROUTINE (LIT_MAGIC_STRING_SQRT, ECMA_MATH_OBJECT_SQRT, 1, 1) ROUTINE (LIT_MAGIC_STRING_TAN, ECMA_MATH_OBJECT_TAN, 1, 1) #if ENABLED (JERRY_ES2015) +ROUTINE (LIT_MAGIC_STRING_ACOSH, ECMA_MATH_OBJECT_ACOSH, 1, 1) +ROUTINE (LIT_MAGIC_STRING_ASINH, ECMA_MATH_OBJECT_ASINH, 1, 1) +ROUTINE (LIT_MAGIC_STRING_ATANH, ECMA_MATH_OBJECT_ATANH, 1, 1) +ROUTINE (LIT_MAGIC_STRING_CBRT, ECMA_MATH_OBJECT_CBRT, 1, 1) +ROUTINE (LIT_MAGIC_STRING_CLZ32, ECMA_MATH_OBJECT_CLZ32, 1, 1) +ROUTINE (LIT_MAGIC_STRING_COSH, ECMA_MATH_OBJECT_COSH, 1, 1) +ROUTINE (LIT_MAGIC_STRING_EXPM1, ECMA_MATH_OBJECT_EXPM1, 1, 1) +ROUTINE (LIT_MAGIC_STRING_FROUND, ECMA_MATH_OBJECT_FROUND, 1, 1) +ROUTINE (LIT_MAGIC_STRING_HYPOT, ECMA_MATH_OBJECT_HYPOT, NON_FIXED, 2) +ROUTINE (LIT_MAGIC_STRING_IMUL, ECMA_MATH_OBJECT_IMUL, 2, 2) +ROUTINE (LIT_MAGIC_STRING_LOG1P, ECMA_MATH_OBJECT_LOG1P, 1, 1) +ROUTINE (LIT_MAGIC_STRING_LOG10, ECMA_MATH_OBJECT_LOG10, 1, 1) +ROUTINE (LIT_MAGIC_STRING_LOG2, ECMA_MATH_OBJECT_LOG2, 1, 1) ROUTINE (LIT_MAGIC_STRING_SIGN, ECMA_MATH_OBJECT_SIGN, 1, 1) +ROUTINE (LIT_MAGIC_STRING_SINH, ECMA_MATH_OBJECT_SINH, 1, 1) +ROUTINE (LIT_MAGIC_STRING_TANH, ECMA_MATH_OBJECT_TANH, 1, 1) ROUTINE (LIT_MAGIC_STRING_TRUNC, ECMA_MATH_OBJECT_TRUNC, 1, 1) #endif /* ENABLED (JERRY_ES2015) */ diff --git a/jerry-core/lit/lit-magic-strings.inc.h b/jerry-core/lit/lit-magic-strings.inc.h index cfc52f06c..0fc70a444 100644 --- a/jerry-core/lit/lit-magic-strings.inc.h +++ b/jerry-core/lit/lit-magic-strings.inc.h @@ -128,9 +128,15 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ATAN, "atan") #endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_BIND, "bind") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CALL, "call") +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CBRT, "cbrt") +#endif #if ENABLED (JERRY_BUILTIN_MATH) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CEIL, "ceil") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_COSH, "cosh") +#endif #if ENABLED (JERRY_ES2015) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_DONE, "done") #endif @@ -147,11 +153,17 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FIND, "find") || ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FROM, "from") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IMUL, "imul") +#endif #if ENABLED (JERRY_BUILTIN_ARRAY) \ || ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_JOIN, "join") #endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_KEYS, "keys") +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LOG2, "log2") +#endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_NAME, "name") #if ENABLED (JERRY_ES2015) \ || ENABLED (JERRY_ES2015_BUILTIN_MAP) \ @@ -168,6 +180,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_RACE, "race") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SEAL, "seal") #if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SIGN, "sign") +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SINH, "sinh") #endif #if ENABLED (JERRY_ES2015_BUILTIN_MAP) \ || ENABLED (JERRY_ES2015_BUILTIN_SET) @@ -181,6 +194,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SORT, "sort") #if ENABLED (JERRY_BUILTIN_MATH) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SQRT, "sqrt") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TANH, "tanh") +#endif #if ENABLED (JERRY_BUILTIN_REGEXP) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_TEST, "test") #endif @@ -202,10 +218,19 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_PROXY_UL, "Proxy") #if ENABLED (JERRY_BUILTIN_MATH) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_SQRT2_U, "SQRT2") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ACOSH, "acosh") +#endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_APPLY, "apply") +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ASINH, "asinh") +#endif #if ENABLED (JERRY_BUILTIN_MATH) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ATAN2, "atan2") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ATANH, "atanh") +#endif #if ENABLED (JERRY_ES2015_BUILTIN_PROMISE) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CATCH, "catch") #endif @@ -213,10 +238,16 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CATCH, "catch") || ENABLED (JERRY_ES2015_BUILTIN_SET) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CLEAR, "clear") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_CLZ32, "clz32") +#endif #if ENABLED (JERRY_BUILTIN_ARRAY) \ || ENABLED (JERRY_ES2015_BUILTIN_TYPEDARRAY) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_EVERY, "every") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_EXPM1, "expm1") +#endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FALSE, "false") #if ENABLED (JERRY_BUILTIN_REGEXP) && ENABLED (JERRY_ES2015) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FLAGS, "flags") @@ -224,11 +255,18 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FLAGS, "flags") #if ENABLED (JERRY_BUILTIN_MATH) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FLOOR, "floor") #endif +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_HYPOT, "hypot") +#endif #if ENABLED (JERRY_BUILTIN_REGEXP) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INDEX, "index") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_INPUT, "input") #endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_IS_NAN, "isNaN") +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LOG10, "log10") +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_LOG1P, "log1p") +#endif #if ENABLED (JERRY_BUILTIN_REGEXP) && ENABLED (JERRY_BUILTIN_STRING) \ || ENABLED (JERRY_ES2015) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_MATCH, "match") @@ -304,6 +342,9 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_ESCAPE, "escape") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FILTER, "filter") #endif LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FREEZE, "freeze") +#if ENABLED (JERRY_BUILTIN_MATH) && ENABLED (JERRY_ES2015) +LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_FROUND, "fround") +#endif #if ENABLED (JERRY_BUILTIN_DATE) LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_DAY_UL, "getDay") #endif diff --git a/jerry-core/lit/lit-magic-strings.ini b/jerry-core/lit/lit-magic-strings.ini index 762a2adac..f4ec0af6b 100644 --- a/jerry-core/lit/lit-magic-strings.ini +++ b/jerry-core/lit/lit-magic-strings.ini @@ -67,15 +67,19 @@ LIT_MAGIC_STRING_ASIN = "asin" LIT_MAGIC_STRING_ATAN = "atan" LIT_MAGIC_STRING_BIND = "bind" LIT_MAGIC_STRING_CALL = "call" +LIT_MAGIC_STRING_CBRT = "cbrt" LIT_MAGIC_STRING_CEIL = "ceil" +LIT_MAGIC_STRING_COSH = "cosh" LIT_MAGIC_STRING_DONE = "done" LIT_MAGIC_STRING_EVAL = "eval" LIT_MAGIC_STRING_EXEC = "exec" LIT_MAGIC_STRING_FILL = "fill" LIT_MAGIC_STRING_FIND = "find" LIT_MAGIC_STRING_FROM = "from" +LIT_MAGIC_STRING_IMUL = "imul" LIT_MAGIC_STRING_JOIN = "join" LIT_MAGIC_STRING_KEYS = "keys" +LIT_MAGIC_STRING_LOG2 = "log2" LIT_MAGIC_STRING_NAME = "name" LIT_MAGIC_STRING_NULL = "null" LIT_MAGIC_STRING_NEXT = "next" @@ -84,9 +88,11 @@ LIT_MAGIC_STRING_RACE = "race" LIT_MAGIC_STRING_SEAL = "seal" LIT_MAGIC_STRING_SIGN = "sign" LIT_MAGIC_STRING_SIZE = "size" +LIT_MAGIC_STRING_SINH = "sinh" LIT_MAGIC_STRING_SOME = "some" LIT_MAGIC_STRING_SORT = "sort" LIT_MAGIC_STRING_SQRT = "sqrt" +LIT_MAGIC_STRING_TANH = "tanh" LIT_MAGIC_STRING_TEST = "test" LIT_MAGIC_STRING_THEN = "then" LIT_MAGIC_STRING_TRIM = "trim" @@ -96,17 +102,25 @@ LIT_MAGIC_STRING_ERROR_UL = "Error" LIT_MAGIC_STRING_PROXY_UL = "Proxy" LIT_MAGIC_STRING_LOG2E_U = "LOG2E" LIT_MAGIC_STRING_SQRT2_U = "SQRT2" +LIT_MAGIC_STRING_ACOSH = "acosh" LIT_MAGIC_STRING_APPLY = "apply" +LIT_MAGIC_STRING_ASINH = "asinh" LIT_MAGIC_STRING_ATAN2 = "atan2" +LIT_MAGIC_STRING_ATANH = "atanh" LIT_MAGIC_STRING_CATCH = "catch" LIT_MAGIC_STRING_CLEAR = "clear" +LIT_MAGIC_STRING_CLZ32 = "clz32" LIT_MAGIC_STRING_EVERY = "every" +LIT_MAGIC_STRING_EXPM1 = "expm1" LIT_MAGIC_STRING_FALSE = "false" LIT_MAGIC_STRING_FLAGS = "flags" LIT_MAGIC_STRING_FLOOR = "floor" +LIT_MAGIC_STRING_HYPOT = "hypot" LIT_MAGIC_STRING_INDEX = "index" LIT_MAGIC_STRING_INPUT = "input" LIT_MAGIC_STRING_IS_NAN = "isNaN" +LIT_MAGIC_STRING_LOG1P = "log1p" +LIT_MAGIC_STRING_LOG10 = "log10" LIT_MAGIC_STRING_MATCH = "match" LIT_MAGIC_STRING_PARSE = "parse" LIT_MAGIC_STRING_PROXY = "proxy" @@ -135,6 +149,7 @@ LIT_MAGIC_STRING_DELETE = "delete" LIT_MAGIC_STRING_ESCAPE = "escape" LIT_MAGIC_STRING_FILTER = "filter" LIT_MAGIC_STRING_FREEZE = "freeze" +LIT_MAGIC_STRING_FROUND = "fround" LIT_MAGIC_STRING_GET_DAY_UL = "getDay" LIT_MAGIC_STRING_GLOBAL = "global" LIT_MAGIC_STRING_IS_VIEW_UL = "isView" diff --git a/tests/jerry/es2015/math-functions-tonumber-rule2.js b/tests/jerry/es2015/math-functions-tonumber-rule2.js new file mode 100644 index 000000000..f1b39fa16 --- /dev/null +++ b/tests/jerry/es2015/math-functions-tonumber-rule2.js @@ -0,0 +1,23 @@ +// Copyright JS Foundation and other contributors, http://js.foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +var str = ""; +var a = {valueOf: function() { str += "a"; return 1;}}; +var b = {valueOf: function() { str += "b"; return NaN;}}; +var c = {valueOf: function() { str += "c"; return 2;}}; +var d = {valueOf: function() { str += "d"; return Infinity;}}; +var e = {valueOf: function() { str += "e"; return 3;}}; + +Math.hypot (a, b, c, d, e); +assert (str === "abcde");