Implement missing Math functions from ES6 standard (#3593)

First step to fix issue #3568.

Changes:
- Implemented Math.clz32(), Math.fround(), Math.imul(), Math.hypot().
- Implemented all remaining Math functions with calling the standard
libm functions, but they throw UNIMPLEMENTED exception with jerry-libm,
because the necessary fdlibm functions are missing and should be ported.

All Math related test262 tests pass (except function name and length tests)

JerryScript-DCO-1.0-Signed-off-by: Csaba Osztrogonác oszi@inf.u-szeged.hu
This commit is contained in:
Csaba Osztrogonác
2020-03-10 11:15:00 +01:00
committed by GitHub
parent 6c3a42ec48
commit 72f8ef344c
5 changed files with 333 additions and 11 deletions
+41
View File
@@ -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
+15
View File
@@ -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"