From 818cc8ddabcebe4f144b9d6746ec17f320bcfda3 Mon Sep 17 00:00:00 2001 From: Yonggang Luo Date: Tue, 9 Feb 2021 15:20:05 +0000 Subject: [PATCH] Split globalThis to be configurable. (#4575) JERRY_BUILTIN_GLOBAL_THIS can be enabled without JERRY_ESNEXT JerryScript-DCO-1.0-Signed-off-by: Yonggang Luo luoyonggang@gmail.com --- jerry-core/api/jerry.c | 3 +++ jerry-core/config.h | 8 ++++++++ jerry-core/ecma/base/ecma-globals.h | 4 +++- jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h | 4 +++- jerry-core/ecma/builtin-objects/ecma-builtins.c | 4 ++-- jerry-core/include/jerryscript-core.h | 1 + jerry-core/lit/lit-magic-strings.inc.h | 2 +- jerry-core/profiles/README.md | 3 +++ 8 files changed, 24 insertions(+), 5 deletions(-) diff --git a/jerry-core/api/jerry.c b/jerry-core/api/jerry.c index e07e7e84d..cefdd6b67 100644 --- a/jerry-core/api/jerry.c +++ b/jerry-core/api/jerry.c @@ -1446,6 +1446,9 @@ jerry_is_feature_enabled (const jerry_feature_t feature) /**< feature to check * #if JERRY_LOGGING || feature == JERRY_FEATURE_LOGGING #endif /* JERRY_LOGGING */ +#if JERRY_BUILTIN_GLOBAL_THIS + || feature == JERRY_FEATURE_GLOBAL_THIS +#endif /* JERRY_BUILTIN_GLOBAL_THIS */ #if JERRY_BUILTIN_MAP || feature == JERRY_FEATURE_MAP #endif /* JERRY_BUILTIN_MAP */ diff --git a/jerry-core/config.h b/jerry-core/config.h index 0a06ae322..6a682ba53 100644 --- a/jerry-core/config.h +++ b/jerry-core/config.h @@ -87,6 +87,10 @@ # define JERRY_BUILTIN_DATAVIEW JERRY_ESNEXT #endif /* !defined (JERRY_BUILTIN_DATAVIEW) */ +#ifndef JERRY_BUILTIN_GLOBAL_THIS +# define JERRY_BUILTIN_GLOBAL_THIS JERRY_ESNEXT +#endif /* !defined (JERRY_BUILTIN_GLOBAL_THIS) */ + #ifndef JERRY_BUILTIN_MAP # define JERRY_BUILTIN_MAP JERRY_ESNEXT #endif /* !defined (JERRY_BUILTIN_MAP) */ @@ -535,6 +539,10 @@ || ((JERRY_BUILTIN_DATAVIEW != 0) && (JERRY_BUILTIN_DATAVIEW != 1)) # error "Invalid value for JERRY_BUILTIN_DATAVIEW macro." #endif +#if !defined (JERRY_BUILTIN_GLOBAL_THIS) \ +|| ((JERRY_BUILTIN_GLOBAL_THIS != 0) && (JERRY_BUILTIN_GLOBAL_THIS != 1)) +# error "Invalid value for JERRY_BUILTIN_GLOBAL_THIS macro." +#endif /* !defined (JERRY_BUILTIN_GLOBAL_THIS) */ #if !defined (JERRY_BUILTIN_MAP) \ || ((JERRY_BUILTIN_MAP != 0) && (JERRY_BUILTIN_MAP != 1)) # error "Invalid value for JERRY_BUILTIN_MAP macro." diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h index 66e5d6687..68598662b 100644 --- a/jerry-core/ecma/base/ecma-globals.h +++ b/jerry-core/ecma/base/ecma-globals.h @@ -220,8 +220,10 @@ enum #if JERRY_ESNEXT ECMA_VALUE_SYNC_ITERATOR = ECMA_MAKE_VALUE (13), /**< option for ecma_op_get_iterator: sync iterator is requested */ ECMA_VALUE_ASYNC_ITERATOR = ECMA_MAKE_VALUE (14), /**< option for ecma_op_get_iterator: async iterator is requested */ - ECMA_VALUE_GLOBAL_THIS = ECMA_MAKE_VALUE (15), /**< globalThis built-in */ #endif /* JERRY_ESNEXT */ +#if JERRY_BUILTIN_GLOBAL_THIS + ECMA_VALUE_GLOBAL_THIS = ECMA_MAKE_VALUE (15), /**< globalThis built-in */ +#endif /* JERRY_BUILTIN_GLOBAL_THIS */ }; #if !JERRY_NUMBER_TYPE_FLOAT64 diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h index 722528f84..57f7f96e9 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h @@ -247,12 +247,14 @@ OBJECT_VALUE (LIT_MAGIC_STRING_WEAKSET_UL, OBJECT_VALUE (LIT_MAGIC_STRING_SYMBOL_UL, ECMA_BUILTIN_ID_SYMBOL, ECMA_PROPERTY_CONFIGURABLE_WRITABLE) +#endif /* JERRY_ESNEXT */ +#if JERRY_BUILTIN_GLOBAL_THIS /* ECMA-262 v11, 18.1.1 */ SIMPLE_VALUE (LIT_MAGIC_STRING_GLOBAL_THIS_UL, ECMA_VALUE_GLOBAL_THIS, ECMA_PROPERTY_CONFIGURABLE_WRITABLE) -#endif /* JERRY_ESNEXT */ +#endif /* JERRY_BUILTIN_GLOBAL_THIS */ #if JERRY_BUILTIN_DATAVIEW /* ECMA-262 v6, 23.1.1.1 */ diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.c b/jerry-core/ecma/builtin-objects/ecma-builtins.c index b5e8a5321..f8c03c029 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtins.c @@ -1080,7 +1080,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * { value = curr_property_p->value; -#if JERRY_ESNEXT +#if JERRY_BUILTIN_GLOBAL_THIS if (value == ECMA_VALUE_GLOBAL_THIS) { /* Only the global object has globalThis property. */ @@ -1088,7 +1088,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * ecma_ref_object (object_p); value = ecma_make_object_value (object_p); } -#endif /* JERRY_ESNEXT */ +#endif /* JERRY_BUILTIN_GLOBAL_THIS */ break; } case ECMA_BUILTIN_PROPERTY_NUMBER: diff --git a/jerry-core/include/jerryscript-core.h b/jerry-core/include/jerryscript-core.h index 70db10113..451954027 100644 --- a/jerry-core/include/jerryscript-core.h +++ b/jerry-core/include/jerryscript-core.h @@ -106,6 +106,7 @@ typedef enum JERRY_FEATURE_WEAKSET, /**< WeakSet support */ JERRY_FEATURE_BIGINT, /**< BigInt support */ JERRY_FEATURE_REALM, /**< realm support */ + JERRY_FEATURE_GLOBAL_THIS, /**< GlobalThisValue support */ JERRY_FEATURE__COUNT /**< number of features. NOTE: must be at the end of the list */ } jerry_feature_t; diff --git a/jerry-core/lit/lit-magic-strings.inc.h b/jerry-core/lit/lit-magic-strings.inc.h index b3ca28ec6..33c8ec6b7 100644 --- a/jerry-core/lit/lit-magic-strings.inc.h +++ b/jerry-core/lit/lit-magic-strings.inc.h @@ -727,7 +727,7 @@ LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_MINUTES_UL, "getMinutes") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_SECONDS_UL, "getSeconds") LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GET_UTC_DATE_UL, "getUTCDate") #endif -#if JERRY_ESNEXT +#if JERRY_BUILTIN_GLOBAL_THIS LIT_MAGIC_STRING_DEF (LIT_MAGIC_STRING_GLOBAL_THIS_UL, "globalThis") #endif #if !JERRY_ESNEXT && JERRY_BUILTIN_REGEXP \ diff --git a/jerry-core/profiles/README.md b/jerry-core/profiles/README.md index fc1216cb7..7a1e62923 100644 --- a/jerry-core/profiles/README.md +++ b/jerry-core/profiles/README.md @@ -102,6 +102,8 @@ defined to `1`. Enables or disables the [BigInt](https://262.ecma-international.org/11.0/#sec-ecmascript-language-types-bigint-type) syntax and built-in. * `JERRY_BUILTIN_DATAVIEW`: Enables or disables the [DataView](https://www.ecma-international.org/ecma-262/6.0/#sec-dataview-objects) built-in. +* `JERRY_BUILTIN_GLOBAL_THIS`: + Enables or disables the [GlobalThisValue](https://262.ecma-international.org/11.0/#sec-globalthis) built-in. * `JERRY_BUILTIN_MAP`: Enables or disables the [Map](http://www.ecma-international.org/ecma-262/6.0/#sec-keyed-collection) built-ins. * `JERRY_BUILTIN_PROMISE`: @@ -147,6 +149,7 @@ defined to `1`. Equivalent with setting the following defines to the `JERRY_ESNEXT` value: * `JERRY_BUILTIN_BIGINT` * `JERRY_BUILTIN_DATAVIEW` + * `JERRY_BUILTIN_GLOBAL_THIS` * `JERRY_BUILTIN_MAP` * `JERRY_BUILTIN_PROMISE` * `JERRY_BUILTIN_PROXY`