From 378d7f78ca4b93b93a1bd5243dd3ec2b08276dba Mon Sep 17 00:00:00 2001 From: Zoltan Herczeg Date: Thu, 16 Jun 2016 01:31:18 -0700 Subject: [PATCH] Improve builtin-property construction. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com --- .../ecma-builtin-array-prototype.inc.h | 15 +- .../builtin-objects/ecma-builtin-array.inc.h | 15 +- .../ecma-builtin-boolean-prototype.inc.h | 9 +- .../ecma-builtin-boolean.inc.h | 15 +- .../ecma-builtin-compact-profile-error.inc.h | 7 +- .../ecma-builtin-date-prototype.inc.h | 9 +- .../builtin-objects/ecma-builtin-date.inc.h | 15 +- .../ecma-builtin-error-prototype.inc.h | 19 +- .../builtin-objects/ecma-builtin-error.inc.h | 17 +- .../ecma-builtin-evalerror-prototype.inc.h | 19 +- .../ecma-builtin-evalerror.inc.h | 17 +- .../ecma-builtin-function-prototype.inc.h | 15 +- .../ecma-builtin-function.inc.h | 15 +- .../builtin-objects/ecma-builtin-global.inc.h | 135 +++----- ...a-builtin-internal-routines-template.inc.h | 299 +++--------------- .../builtin-objects/ecma-builtin-json.inc.h | 7 +- .../builtin-objects/ecma-builtin-math.inc.h | 55 ++-- .../ecma-builtin-number-prototype.inc.h | 9 +- .../builtin-objects/ecma-builtin-number.inc.h | 45 +-- .../ecma-builtin-object-prototype.inc.h | 9 +- .../builtin-objects/ecma-builtin-object.inc.h | 15 +- .../ecma-builtin-rangeerror-prototype.inc.h | 19 +- .../ecma-builtin-rangeerror.inc.h | 17 +- ...cma-builtin-referenceerror-prototype.inc.h | 19 +- .../ecma-builtin-referenceerror.inc.h | 17 +- .../ecma-builtin-regexp-prototype.inc.h | 36 +-- .../builtin-objects/ecma-builtin-regexp.inc.h | 21 +- .../ecma-builtin-string-prototype.inc.h | 15 +- .../builtin-objects/ecma-builtin-string.inc.h | 15 +- .../ecma-builtin-syntaxerror-prototype.inc.h | 19 +- .../ecma-builtin-syntaxerror.inc.h | 17 +- .../ecma-builtin-type-error-thrower.inc.h | 7 +- .../ecma-builtin-typeerror-prototype.inc.h | 19 +- .../ecma-builtin-typeerror.inc.h | 17 +- .../ecma-builtin-urierror-prototype.inc.h | 19 +- .../ecma-builtin-urierror.inc.h | 17 +- .../builtin-objects/ecma-builtins-internal.h | 49 ++- .../ecma/builtin-objects/ecma-builtins.c | 199 ++++++++++-- 38 files changed, 520 insertions(+), 763 deletions(-) diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.inc.h index 82bbaffb36..d994b0ecb2 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array-prototype.inc.h @@ -23,11 +23,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -42,10 +42,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_ARRAY_PROTOTYPE) // 15.4.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_ARRAY, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Number properties: * (property name, object pointer getter) */ @@ -53,9 +51,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, // 15.4.4 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 0, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FLAG_WRITABLE) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -86,6 +82,5 @@ ROUTINE (LIT_MAGIC_STRING_REDUCE_RIGHT_UL, ecma_builtin_array_prototype_object_r #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-array.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-array.inc.h index 661bfa0491..38049fc981 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-array.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-array.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -41,10 +41,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_ARRAY) // 15.4.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_ARRAY_PROTOTYPE, + ECMA_PROPERTY_FIXED) /* Number properties: * (property name, object pointer getter) */ @@ -52,9 +50,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, // 15.4.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -65,6 +61,5 @@ ROUTINE (LIT_MAGIC_STRING_IS_ARRAY_UL, ecma_builtin_array_object_is_array, 1, 1) #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.inc.h index 1f5abb61bb..617e03811e 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean-prototype.inc.h @@ -22,7 +22,7 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -37,10 +37,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE) // 15.6.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_BOOLEAN), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_BOOLEAN, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -52,5 +50,4 @@ ROUTINE (LIT_MAGIC_STRING_VALUE_OF_UL, ecma_builtin_boolean_prototype_object_va #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.inc.h index 19dc456543..f9566f727a 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-boolean.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -41,10 +41,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_BOOLEAN) // 15.6.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE, + ECMA_PROPERTY_FIXED) /* Number properties: * (property name, object pointer getter) */ @@ -52,14 +50,11 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, // 15.6.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-compact-profile-error.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-compact-profile-error.inc.h index 71684522e6..60ac513aec 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-compact-profile-error.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-compact-profile-error.inc.h @@ -22,7 +22,7 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ /* Object identifier */ @@ -33,14 +33,11 @@ OBJECT_ID (ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR) NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 0, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.inc.h index 37b6f327d6..b8da9744f3 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date-prototype.inc.h @@ -23,7 +23,7 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -34,10 +34,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_DATE_PROTOTYPE) OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_DATE), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_DATE, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ecma_builtin_date_prototype_to_string, 0, 0) ROUTINE (LIT_MAGIC_STRING_TO_DATE_STRING_UL, ecma_builtin_date_prototype_to_date_string, 0, 0) @@ -96,5 +94,4 @@ ROUTINE (LIT_MAGIC_STRING_TO_GMT_STRING_UL, ecma_builtin_date_prototype_to_utc_s #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-date.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-date.inc.h index c4fe88fcc1..1d7d4cf5cc 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-date.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-date.inc.h @@ -23,11 +23,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -39,16 +39,12 @@ OBJECT_ID (ECMA_BUILTIN_ID_DATE) // ECMA-262 v5, 15.9.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_DATE_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_DATE_PROTOTYPE, + ECMA_PROPERTY_FIXED) NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 7, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) ROUTINE (LIT_MAGIC_STRING_PARSE, ecma_builtin_date_parse, 1, 1) ROUTINE (LIT_MAGIC_STRING_UTC_U, ecma_builtin_date_utc, NON_FIXED, 7) @@ -59,5 +55,4 @@ ROUTINE (LIT_MAGIC_STRING_NOW, ecma_builtin_date_now, 0, 0) #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.inc.h index 0dfeff164f..fbf7c1f48e 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -41,24 +41,18 @@ OBJECT_ID (ECMA_BUILTIN_ID_ERROR_PROTOTYPE) // 15.11.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.4.2 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.4.3 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -69,5 +63,4 @@ ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ecma_builtin_error_prototype_object_to_s #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-error.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-error.inc.h index f7fe7af3a9..90d7d4cadc 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-error.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-error.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.7.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.inc.h index 28cd82432a..de217e4be8 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_EVAL_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_EVAL_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_EVAL_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.inc.h index 43596afa24..9121c48579 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-evalerror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_EVAL_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_EVAL_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.inc.h index 340003cc46..c2d0bf6136 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -41,10 +41,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE) // 15.3.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_FUNCTION), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_FUNCTION, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Number properties: * (property name, object pointer getter) */ @@ -52,9 +50,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, // 15.3.4 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 0, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -68,5 +64,4 @@ ROUTINE (LIT_MAGIC_STRING_BIND, ecma_builtin_function_prototype_object_bind, NON #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-function.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-function.inc.h index 17764468e8..382da30f21 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-function.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-function.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -41,10 +41,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_FUNCTION) // 15.3.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE, + ECMA_PROPERTY_FIXED) /* Number properties: * (property name, object pointer getter) */ @@ -52,14 +50,11 @@ OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, // 15.3.3.2 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE 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 7d83e2e9f2..1a70b3a2a0 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-global.inc.h @@ -22,21 +22,17 @@ #endif /* !OBJECT_ID */ #ifndef SIMPLE_VALUE -# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable) +# define SIMPLE_VALUE(name, simple_value, prop_attributes) #endif /* !SIMPLE_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ -#ifndef CP_UNIMPLEMENTED_VALUE -# define CP_UNIMPLEMENTED_VALUE(name, value, prop_writable, prop_enumerable, prop_configurable) -#endif /* !CP_UNIMPLEMENTED_VALUE */ - #ifndef ROUTINE # define ROUTINE(name, c_function_name, args_number, length_prop_value) #endif /* !ROUTINE */ @@ -50,173 +46,131 @@ OBJECT_ID (ECMA_BUILTIN_ID_GLOBAL) // ECMA-262 v5, 15.1.1.3 SIMPLE_VALUE (LIT_MAGIC_STRING_UNDEFINED, ECMA_SIMPLE_VALUE_UNDEFINED, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Number properties: * (property name, number value, writable, enumerable, configurable) */ // ECMA-262 v5, 15.1.1.1 NUMBER_VALUE (LIT_MAGIC_STRING_NAN, - ecma_number_make_nan (), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_NAN, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.1.1.2 NUMBER_VALUE (LIT_MAGIC_STRING_INFINITY_UL, - ecma_number_make_infinity (false), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_POSITIVE_INFINITY, + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // ECMA-262 v5, 15.1.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_OBJECT_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_OBJECT), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_OBJECT, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.2 OBJECT_VALUE (LIT_MAGIC_STRING_FUNCTION_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_FUNCTION), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_FUNCTION, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.3 #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN OBJECT_VALUE (LIT_MAGIC_STRING_ARRAY_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_ARRAY), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_ARRAY, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ARRAY_BUILTIN*/ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN // ECMA-262 v5, 15.1.4.4 OBJECT_VALUE (LIT_MAGIC_STRING_STRING_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_STRING), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_STRING, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_STRING_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN // ECMA-262 v5, 15.1.4.5 OBJECT_VALUE (LIT_MAGIC_STRING_BOOLEAN_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_BOOLEAN), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_BOOLEAN, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_BOOLEAN_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN // ECMA-262 v5, 15.1.4.6 OBJECT_VALUE (LIT_MAGIC_STRING_NUMBER_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_NUMBER), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_NUMBER, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_NUMBER_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_DATE_BUILTIN // ECMA-262 v5, 15.1.4.7 OBJECT_VALUE (LIT_MAGIC_STRING_DATE_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_DATE), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_DATE, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_DATE_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_REGEXP_BUILTIN // ECMA-262 v5, 15.1.4.8 OBJECT_VALUE (LIT_MAGIC_STRING_REGEXP_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_REGEXP), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_REGEXP, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_REGEXP_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ERROR_BUILTINS // ECMA-262 v5, 15.1.4.9 OBJECT_VALUE (LIT_MAGIC_STRING_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.10 OBJECT_VALUE (LIT_MAGIC_STRING_EVAL_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_EVAL_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_EVAL_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.11 OBJECT_VALUE (LIT_MAGIC_STRING_RANGE_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_RANGE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_RANGE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.12 OBJECT_VALUE (LIT_MAGIC_STRING_REFERENCE_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_REFERENCE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_REFERENCE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.13 OBJECT_VALUE (LIT_MAGIC_STRING_SYNTAX_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_SYNTAX_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_SYNTAX_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.14 OBJECT_VALUE (LIT_MAGIC_STRING_TYPE_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_TYPE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_TYPE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.1.4.15 OBJECT_VALUE (LIT_MAGIC_STRING_URI_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_URI_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_URI_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ERROR_BUILTINS */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_MATH_BUILTIN // ECMA-262 v5, 15.1.5.1 OBJECT_VALUE (LIT_MAGIC_STRING_MATH_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_MATH), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_MATH, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_MATH_BUILTIN */ #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN // ECMA-262 v5, 15.1.5.2 OBJECT_VALUE (LIT_MAGIC_STRING_JSON_U, - ecma_builtin_get (ECMA_BUILTIN_ID_JSON), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_JSON, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #endif /* !CONFIG_ECMA_COMPACT_PROFILE_DISABLE_JSON_BUILTIN */ #ifdef CONFIG_ECMA_COMPACT_PROFILE OBJECT_VALUE (LIT_MAGIC_STRING_COMPACT_PROFILE_ERROR_UL, - ecma_builtin_get (ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR, + ECMA_PROPERTY_FIXED) #endif /* CONFIG_ECMA_COMPACT_PROFILE */ /* Routine properties: @@ -245,5 +199,4 @@ ROUTINE (LIT_MAGIC_STRING_UNESCAPE, ecma_builtin_global_object_unescape, 1, 1) #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h index e1d100afe8..2ff6ba3375 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-internal-routines-template.inc.h @@ -28,10 +28,8 @@ #define PASTE_(x, y) PASTE__ (x, y) #define PASTE(x, y) PASTE_ (x, y) -#define FIND_PROPERTY_INDEX_ROUTINE_NAME \ - PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _find_property_index) -#define TRY_TO_INSTANTIATE_PROPERTY_ROUTINE_NAME \ - PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _try_to_instantiate_property) +#define PROPERTY_DESCRIPTOR_LIST_NAME \ + PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _property_descriptor_list) #define LIST_LAZY_PROPERTY_NAMES_ROUTINE_NAME \ PASTE (PASTE (ecma_builtin_, BUILTIN_UNDERSCORED_ID), _list_lazy_property_names) #define DISPATCH_ROUTINE_ROUTINE_NAME \ @@ -59,11 +57,10 @@ static const lit_magic_string_id_t ECMA_BUILTIN_PROPERTY_NAMES[] = { -#define SIMPLE_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) name, -#define NUMBER_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) name, -#define STRING_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) name, -#define CP_UNIMPLEMENTED_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) name, -#define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) name, +#define SIMPLE_VALUE(name, simple_value, prop_attributes) name, +#define NUMBER_VALUE(name, number_value, prop_attributes) name, +#define STRING_VALUE(name, magic_string_id, prop_attributes) name, +#define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) name, #define ROUTINE(name, c_function_name, args_number, length_prop_value) name, #include BUILTIN_INC_HEADER_NAME }; @@ -73,15 +70,13 @@ static const lit_magic_string_id_t ECMA_BUILTIN_PROPERTY_NAMES[] = enum { -#define SIMPLE_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ +#define SIMPLE_VALUE(name, simple_value, prop_attributes) \ ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define NUMBER_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ +#define NUMBER_VALUE(name, number_value, prop_attributes) \ ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define STRING_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ +#define STRING_VALUE(name, magic_string_id, prop_attributes) \ ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define CP_UNIMPLEMENTED_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ +#define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) \ ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), #define ROUTINE(name, c_function_name, args_number, length_prop_value) \ ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), @@ -89,242 +84,53 @@ enum }; /** - * Return the index of a magic string ID in the ECMA_BUILTIN_PROPERTY_NAMES - * array, or -1 if not found. - * - * Note: we trust the compiler to find the optimal (most performance and/or - * memory effective) way of implementing the switch construct of this function - * in binary code (e.g., jump tables for large consecutive cases, binary search - * for non-consecutive cases, some simple conditional branches for low number of - * cases, etc. -- the worst case is a linear sequence of comparisons, but even - * that's not that bad, since we cannot have more than 64 IDs in the array). + * Built-in property list of the built-in object. */ -static int32_t -FIND_PROPERTY_INDEX_ROUTINE_NAME (lit_magic_string_id_t id) /**< magic string id */ +const ecma_builtin_property_descriptor_t PROPERTY_DESCRIPTOR_LIST_NAME[] = { - switch (id) - { -#define SIMPLE_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } -#define NUMBER_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } -#define STRING_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } -#define CP_UNIMPLEMENTED_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } -#define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } #define ROUTINE(name, c_function_name, args_number, length_prop_value) \ - case name: \ - { \ - return ECMA_BUILTIN_PROPERTY_NAME_INDEX(name); \ - } + { \ + name, \ + ECMA_BUILTIN_PROPERTY_ROUTINE, \ + ECMA_PROPERTY_CONFIGURABLE_WRITABLE, \ + length_prop_value \ + }, +#define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) \ + { \ + name, \ + ECMA_BUILTIN_PROPERTY_OBJECT, \ + prop_attributes, \ + obj_builtin_id \ + }, +#define SIMPLE_VALUE(name, simple_value, prop_attributes) \ + { \ + name, \ + ECMA_BUILTIN_PROPERTY_SIMPLE, \ + prop_attributes, \ + simple_value \ + }, +#define NUMBER_VALUE(name, number_value, prop_attributes) \ + { \ + name, \ + ECMA_BUILTIN_PROPERTY_NUMBER, \ + prop_attributes, \ + number_value \ + }, +#define STRING_VALUE(name, magic_string_id, prop_attributes) \ + { \ + name, \ + ECMA_BUILTIN_PROPERTY_STRING, \ + prop_attributes, \ + magic_string_id \ + }, #include BUILTIN_INC_HEADER_NAME - default: - { - return -1; - } - } -} /* FIND_PROPERTY_INDEX_ROUTINE_NAME */ - -/** - * If the property's name is one of built-in properties of the built-in object - * that is not instantiated yet, instantiate the property and - * return pointer to the instantiated property. - * - * @return pointer property, if one was instantiated, - * NULL - otherwise. - */ -ecma_property_t * -TRY_TO_INSTANTIATE_PROPERTY_ROUTINE_NAME (ecma_object_t *obj_p, /**< object */ - ecma_string_t *prop_name_p) /**< property's name */ -{ -#define OBJECT_ID(builtin_id) const ecma_builtin_id_t builtin_object_id = builtin_id; -#include BUILTIN_INC_HEADER_NAME - - JERRY_ASSERT (ecma_builtin_is (obj_p, builtin_object_id)); - JERRY_ASSERT (ecma_find_named_property (obj_p, prop_name_p) == NULL); - - lit_magic_string_id_t id; - - if (!ecma_is_string_magic (prop_name_p, &id)) - { - return NULL; - } - - int32_t index = FIND_PROPERTY_INDEX_ROUTINE_NAME (id); - - if (index == -1) - { - return NULL; - } - - JERRY_ASSERT (index >= 0 && (uint32_t) index < sizeof (uint64_t) * JERRY_BITSINBYTE); - - uint32_t bit; - ecma_internal_property_id_t mask_prop_id; - - if (index >= 32) - { - mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63; - bit = (uint32_t) 1u << (index - 32); - } - else - { - mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31; - bit = (uint32_t) 1u << index; - } - - ecma_property_t *mask_prop_p = ecma_find_internal_property (obj_p, mask_prop_id); - if (mask_prop_p == NULL) { - mask_prop_p = ecma_create_internal_property (obj_p, mask_prop_id); - ecma_set_internal_property_value (mask_prop_p, 0); + LIT_MAGIC_STRING__COUNT, + ECMA_BUILTIN_PROPERTY_END, + 0, + 0 } - - uint32_t bit_mask = ecma_get_internal_property_value (mask_prop_p); - - if (bit_mask & bit) - { - return NULL; - } - - bit_mask |= bit; - - ecma_set_internal_property_value (mask_prop_p, bit_mask); - - ecma_value_t value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); - ecma_property_writable_value_t writable; - ecma_property_enumerable_value_t enumerable; - ecma_property_configurable_value_t configurable; - - switch (id) - { - JERRY_ASSERT ((uint16_t) id == id); - -#define ROUTINE(name, c_function_name, args_number, length_prop_value) case name: \ - { \ - ecma_object_t *func_obj_p = ecma_builtin_make_function_object_for_routine (builtin_object_id, \ - id, \ - length_prop_value); \ - \ - writable = ECMA_PROPERTY_WRITABLE; \ - enumerable = ECMA_PROPERTY_NOT_ENUMERABLE; \ - configurable = ECMA_PROPERTY_CONFIGURABLE; \ - \ - value = ecma_make_object_value (func_obj_p); \ - \ - break; \ - } -#define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - value = ecma_make_object_value (obj_getter); \ - writable = prop_writable; \ - enumerable = prop_enumerable; \ - configurable = prop_configurable; \ - break; \ - } -#define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - value = ecma_make_simple_value (simple_value); \ - \ - writable = prop_writable; \ - enumerable = prop_enumerable; \ - configurable = prop_configurable; \ - \ - break; \ - } -#define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - value = ecma_make_number_value (number_value); \ - \ - writable = prop_writable; \ - enumerable = prop_enumerable; \ - configurable = prop_configurable; \ - \ - break; \ - } -#define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - ecma_string_t *magic_string_p = ecma_get_magic_string (magic_string_id); \ - \ - value = ecma_make_string_value (magic_string_p); \ - \ - writable = prop_writable; \ - enumerable = prop_enumerable; \ - configurable = prop_configurable; \ - \ - break; \ - } -#ifdef CONFIG_ECMA_COMPACT_PROFILE -#define CP_UNIMPLEMENTED_VALUE(name, value, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - /* The object throws CompactProfileError upon invocation */ \ - ecma_object_t *get_set_p = ecma_builtin_get (ECMA_BUILTIN_ID_COMPACT_PROFILE_ERROR); \ - ecma_property_t *compact_profile_thrower_property_p = ecma_create_named_accessor_property (obj_p, \ - prop_name_p, \ - get_set_p, \ - get_set_p, \ - true, \ - false); \ - ecma_deref_object (get_set_p); \ - \ - return compact_profile_thrower_property_p; \ - } -#else /* !CONFIG_ECMA_COMPACT_PROFILE */ -#define CP_UNIMPLEMENTED_VALUE(name, value, prop_writable, prop_enumerable, prop_configurable) case name: \ - { \ - JERRY_UNIMPLEMENTED ("The built-in is not implemented."); \ - } -#endif /* CONFIG_ECMA_COMPACT_PROFILE */ -#include BUILTIN_INC_HEADER_NAME - - default: - { - JERRY_UNREACHABLE (); - } - } - - uint8_t prop_attributes = 0; - - if (configurable) - { - prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_CONFIGURABLE); - } - if (enumerable) - { - prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_ENUMERABLE); - } - if (writable) - { - prop_attributes = (uint8_t) (prop_attributes | ECMA_PROPERTY_FLAG_WRITABLE); - } - - ecma_property_t *prop_p = ecma_create_named_data_property (obj_p, - prop_name_p, - prop_attributes); - - ecma_named_data_property_assign_value (obj_p, prop_p, value); - - ecma_free_value (value); - - return prop_p; -} /* TRY_TO_INSTANTIATE_PROPERTY_ROUTINE_NAME */ +}; /** * List names of the built-in object's lazy instantiated properties @@ -487,8 +293,7 @@ DISPATCH_ROUTINE_ROUTINE_NAME (uint16_t builtin_routine_id, /**< built-in wide r #undef PASTE__ #undef PASTE_ #undef PASTE -#undef FIND_PROPERTY_INDEX_ROUTINE_NAME -#undef TRY_TO_INSTANTIATE_PROPERTY_ROUTINE_NAME +#undef PROPERTY_DESCRIPTOR_LIST_NAME #undef LIST_LAZY_PROPERTY_NAMES_ROUTINE_NAME #undef DISPATCH_ROUTINE_ROUTINE_NAME #undef BUILTIN_UNDERSCORED_ID diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-json.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-json.inc.h index 8421fe46d5..1e267eecbb 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-json.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-json.inc.h @@ -23,15 +23,15 @@ #endif /* !OBJECT_ID */ #ifndef SIMPLE_VALUE -# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable) +# define SIMPLE_VALUE(name, simple_value, prop_attributes) #endif /* !SIMPLE_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -51,5 +51,4 @@ ROUTINE (LIT_MAGIC_STRING_STRINGIFY, ecma_builtin_json_stringify, 3, 3) #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE 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 8cfb95856f..e7f14ce920 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-math.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef SIMPLE_VALUE -# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable) +# define SIMPLE_VALUE(name, simple_value, prop_attributes) #endif /* !SIMPLE_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -45,59 +45,43 @@ OBJECT_ID (ECMA_BUILTIN_ID_MATH) // ECMA-262 v5, 15.8.1.1 NUMBER_VALUE (LIT_MAGIC_STRING_E_U, - ECMA_NUMBER_E, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_E, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.2 NUMBER_VALUE (LIT_MAGIC_STRING_LN10_U, - ECMA_NUMBER_LN10, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_LN10, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.3 NUMBER_VALUE (LIT_MAGIC_STRING_LN2_U, - ECMA_NUMBER_LN2, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_LN2, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.4 NUMBER_VALUE (LIT_MAGIC_STRING_LOG2E_U, - ECMA_NUMBER_LOG2E, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_LOG2E, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.5 NUMBER_VALUE (LIT_MAGIC_STRING_LOG10E_U, - ECMA_NUMBER_LOG10E, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_LOG10E, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.6 NUMBER_VALUE (LIT_MAGIC_STRING_PI_U, - ECMA_NUMBER_PI, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_PI, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.7 NUMBER_VALUE (LIT_MAGIC_STRING_SQRT1_2_U, - ECMA_NUMBER_SQRT_1_2, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_SQRT_1_2, + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.8.1.8 NUMBER_VALUE (LIT_MAGIC_STRING_SQRT2_U, - ECMA_NUMBER_SQRT2, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_SQRT2, + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -125,5 +109,4 @@ ROUTINE (LIT_MAGIC_STRING_TAN, ecma_builtin_math_object_tan, 1, 1) #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.inc.h index 8efe00764a..a2be99ea4c 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number-prototype.inc.h @@ -22,7 +22,7 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -37,10 +37,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE) // 15.7.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_NUMBER), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_NUMBER, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -56,5 +54,4 @@ ROUTINE (LIT_MAGIC_STRING_TO_PRECISION_UL, ecma_builtin_number_prototype_object_ #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-number.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-number.inc.h index 3a22c85213..b3487487e0 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-number.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-number.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -38,59 +38,44 @@ OBJECT_ID (ECMA_BUILTIN_ID_NUMBER) // 15.7.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) // 15.7.3.4 NUMBER_VALUE (LIT_MAGIC_STRING_NAN, - ecma_number_make_nan (), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_NAN, + ECMA_PROPERTY_FIXED) // 15.7.3.2 NUMBER_VALUE (LIT_MAGIC_STRING_MAX_VALUE_U, - ECMA_NUMBER_MAX_VALUE, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_MAX, + ECMA_PROPERTY_FIXED) // 15.7.3.3 NUMBER_VALUE (LIT_MAGIC_STRING_MIN_VALUE_U, - ECMA_NUMBER_MIN_VALUE, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_MIN, + ECMA_PROPERTY_FIXED) // 15.7.3.5 NUMBER_VALUE (LIT_MAGIC_STRING_POSITIVE_INFINITY_U, - ecma_number_make_infinity (false), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_POSITIVE_INFINITY, + ECMA_PROPERTY_FIXED) // 15.7.3.6 NUMBER_VALUE (LIT_MAGIC_STRING_NEGATIVE_INFINITY_U, - ecma_number_make_infinity (true), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_NUMBER_NEGATIVE_INFINITY, + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.7.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_NUMBER_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_NUMBER_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.inc.h index 2bd6eecd08..ba453d4d04 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object-prototype.inc.h @@ -22,7 +22,7 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -37,10 +37,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_OBJECT_PROTOTYPE) // 15.2.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_OBJECT), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_OBJECT, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -56,5 +54,4 @@ ROUTINE (LIT_MAGIC_STRING_PROPERTY_IS_ENUMERABLE_UL, ecma_builtin_object_prototy #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-object.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-object.inc.h index f965bf411e..d727936885 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-object.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-object.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -42,19 +42,15 @@ OBJECT_ID (ECMA_BUILTIN_ID_OBJECT) // 15.2.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.2.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_OBJECT_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_OBJECT_PROTOTYPE, + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -77,5 +73,4 @@ ROUTINE (LIT_MAGIC_STRING_DEFINE_PROPERTY_UL, ecma_builtin_object_object_define_ #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.inc.h index 43fe89d876..0a407e8b9d 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_RANGE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_RANGE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_RANGE_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.inc.h index 1c3412daaa..63d8e9c2b0 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-rangeerror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_RANGE_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_RANGE_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.inc.h index eedb78ee38..20c4d7d0b0 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_REFERENCE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_REFERENCE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_REFERENCE_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.inc.h index 47ce30c0b6..74b80b89b9 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-referenceerror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_REFERENCE_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_REFERENCE_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h index 4d41b98539..5da82625c8 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp-prototype.inc.h @@ -23,19 +23,19 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef SIMPLE_VALUE -# define SIMPLE_VALUE(name, simple_value, prop_writable, prop_enumerable, prop_configurable) +# define SIMPLE_VALUE(name, simple_value, prop_attributes) #endif /* !SIMPLE_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef ROUTINE @@ -47,44 +47,33 @@ OBJECT_ID (ECMA_BUILTIN_ID_REGEXP_PROTOTYPE) // ECMA-262 v5, 15.10.6.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_REGEXP), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_REGEXP, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // ECMA-262 v5, 15.10.7.1 STRING_VALUE (LIT_MAGIC_STRING_SOURCE, LIT_MAGIC_STRING_EMPTY_NON_CAPTURE_GROUP, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.10.7.2 SIMPLE_VALUE (LIT_MAGIC_STRING_GLOBAL, ECMA_SIMPLE_VALUE_FALSE, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.10.7.3 SIMPLE_VALUE (LIT_MAGIC_STRING_IGNORECASE_UL, ECMA_SIMPLE_VALUE_FALSE, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) + // ECMA-262 v5, 15.10.7.4 SIMPLE_VALUE (LIT_MAGIC_STRING_MULTILINE, ECMA_SIMPLE_VALUE_FALSE, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) // ECMA-262 v5, 15.10.7.5 NUMBER_VALUE (LIT_MAGIC_STRING_LASTINDEX_UL, 0, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FLAG_WRITABLE) #ifndef CONFIG_ECMA_COMPACT_PROFILE_DISABLE_ANNEXB_BUILTIN ROUTINE (LIT_MAGIC_STRING_COMPILE, ecma_builtin_regexp_prototype_compile, 2, 1) @@ -98,5 +87,4 @@ ROUTINE (LIT_MAGIC_STRING_TO_STRING_UL, ecma_builtin_regexp_prototype_to_string, #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h index d9329a6e21..19965d2857 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-regexp.inc.h @@ -23,34 +23,29 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ /* Object identifier */ OBJECT_ID (ECMA_BUILTIN_ID_REGEXP) -// ECMA-262 v5, 15.10.5.1 -OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_REGEXP_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) - // ECMA-262 v5, 15.10.5 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 2, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) + +// ECMA-262 v5, 15.10.5.1 +OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, + ECMA_BUILTIN_ID_REGEXP_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.inc.h index 0597ce6761..99aeb53736 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef ROUTINE @@ -41,10 +41,8 @@ OBJECT_ID (ECMA_BUILTIN_ID_STRING_PROTOTYPE) // 15.5.4.1 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_STRING), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_STRING, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) /* Number properties: * (property name, number value) */ @@ -52,9 +50,7 @@ OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, // 15.5.4 (String.prototype is itself a String object whose value is an empty String), 15.5.5.1 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 0, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -91,5 +87,4 @@ ROUTINE (LIT_MAGIC_STRING_SUBSTR, ecma_builtin_string_prototype_object_substr, 2 #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-string.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-string.inc.h index fbd87ab111..a704e0081a 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-string.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-string.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ #ifndef ROUTINE @@ -42,19 +42,15 @@ OBJECT_ID (ECMA_BUILTIN_ID_STRING) // 15.5.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.7.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_STRING_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_STRING_PROTOTYPE, + ECMA_PROPERTY_FIXED) /* Routine properties: * (property name, C routine name, arguments number or NON_FIXED, value of the routine's length property) */ @@ -65,5 +61,4 @@ ROUTINE (LIT_MAGIC_STRING_FROM_CHAR_CODE_UL, ecma_builtin_string_object_from_cha #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.inc.h index db16a3a0a1..a33a608401 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_SYNTAX_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_SYNTAX_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_SYNTAX_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.inc.h index 1322da3471..3a0e838781 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-syntaxerror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_SYNTAX_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_SYNTAX_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.inc.h index c1caa685cd..436668d337 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-type-error-thrower.inc.h @@ -24,7 +24,7 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ /* Object identifier */ @@ -35,14 +35,11 @@ OBJECT_ID (ECMA_BUILTIN_ID_TYPE_ERROR_THROWER) NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 0, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.inc.h index d8e57555ff..561306a2cc 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_TYPE_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_TYPE_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_TYPE_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.inc.h index 33105b4bdf..f9bbe7fa30 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-typeerror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_TYPE_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_TYPE_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.inc.h index 8b26d52492..859b7851b8 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror-prototype.inc.h @@ -22,11 +22,11 @@ #endif /* !OBJECT_ID */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -37,29 +37,22 @@ OBJECT_ID (ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE) // 15.11.7.8 OBJECT_VALUE (LIT_MAGIC_STRING_CONSTRUCTOR, - ecma_builtin_get (ECMA_BUILTIN_ID_URI_ERROR), - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_BUILTIN_ID_URI_ERROR, + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.9 STRING_VALUE (LIT_MAGIC_STRING_NAME, LIT_MAGIC_STRING_URI_ERROR_UL, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) // 15.11.7.10 STRING_VALUE (LIT_MAGIC_STRING_MESSAGE, LIT_MAGIC_STRING__EMPTY, - ECMA_PROPERTY_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_CONFIGURABLE) + ECMA_PROPERTY_CONFIGURABLE_WRITABLE) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.inc.h b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.inc.h index 63086ff5f9..e157f73227 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.inc.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtin-urierror.inc.h @@ -22,15 +22,15 @@ #endif /* !OBJECT_ID */ #ifndef NUMBER_VALUE -# define NUMBER_VALUE(name, number_value, prop_writable, prop_enumerable, prop_configurable) +# define NUMBER_VALUE(name, number_value, prop_attributes) #endif /* !NUMBER_VALUE */ #ifndef STRING_VALUE -# define STRING_VALUE(name, magic_string_id, prop_writable, prop_enumerable, prop_configurable) +# define STRING_VALUE(name, magic_string_id, prop_attributes) #endif /* !STRING_VALUE */ #ifndef OBJECT_VALUE -# define OBJECT_VALUE(name, obj_getter, prop_writable, prop_enumerable, prop_configurable) +# define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) #endif /* !OBJECT_VALUE */ /* Object identifier */ @@ -42,24 +42,19 @@ OBJECT_ID (ECMA_BUILTIN_ID_URI_ERROR) // 15.11.3 NUMBER_VALUE (LIT_MAGIC_STRING_LENGTH, 1, - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_PROPERTY_FIXED) /* Object properties: * (property name, object pointer getter) */ // 15.11.3.1 OBJECT_VALUE (LIT_MAGIC_STRING_PROTOTYPE, - ecma_builtin_get (ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE), - ECMA_PROPERTY_NOT_WRITABLE, - ECMA_PROPERTY_NOT_ENUMERABLE, - ECMA_PROPERTY_NOT_CONFIGURABLE) + ECMA_BUILTIN_ID_URI_ERROR_PROTOTYPE, + ECMA_PROPERTY_FIXED) #undef OBJECT_ID #undef SIMPLE_VALUE #undef NUMBER_VALUE #undef STRING_VALUE #undef OBJECT_VALUE -#undef CP_UNIMPLEMENTED_VALUE #undef ROUTINE diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins-internal.h b/jerry-core/ecma/builtin-objects/ecma-builtins-internal.h index 2ba9bb022c..301dc8d241 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins-internal.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtins-internal.h @@ -61,12 +61,58 @@ extern ecma_object_t * ecma_builtin_make_function_object_for_routine (ecma_builtin_id_t, uint16_t, uint8_t); +/** + * Type of built-in properties. + */ +typedef enum +{ + ECMA_BUILTIN_PROPERTY_SIMPLE, /**< simple value property */ + ECMA_BUILTIN_PROPERTY_NUMBER, /**< number value property */ + ECMA_BUILTIN_PROPERTY_STRING, /**< string value property */ + ECMA_BUILTIN_PROPERTY_OBJECT, /**< builtin object property */ + ECMA_BUILTIN_PROPERTY_ROUTINE, /**< routine property */ + ECMA_BUILTIN_PROPERTY_END, /**< last property */ +} ecma_builtin_property_type_t; + +/** + * Type of symbolic built-in number types (starting from 256). + */ +typedef enum +{ + ECMA_BUILTIN_NUMBER_MAX = 256, /**< value of ECMA_NUMBER_MAX_VALUE */ + ECMA_BUILTIN_NUMBER_MIN, /**< value of ECMA_NUMBER_MIN_VALUE */ + ECMA_BUILTIN_NUMBER_E, /**< value of ECMA_NUMBER_E */ + ECMA_BUILTIN_NUMBER_PI, /**< value of ECMA_NUMBER_PI */ + ECMA_BUILTIN_NUMBER_LN10, /**< value of ECMA_NUMBER_LN10 */ + ECMA_BUILTIN_NUMBER_LN2, /**< value of ECMA_NUMBER_LN2 */ + ECMA_BUILTIN_NUMBER_LOG2E, /**< value of ECMA_NUMBER_LOG2E */ + ECMA_BUILTIN_NUMBER_LOG10E, /**< value of ECMA_NUMBER_LOG10E */ + ECMA_BUILTIN_NUMBER_SQRT2, /**< value of ECMA_NUMBER_SQRT2 */ + ECMA_BUILTIN_NUMBER_SQRT_1_2, /**< value of ECMA_NUMBER_SQRT_1_2 */ + ECMA_BUILTIN_NUMBER_NAN, /**< result of ecma_number_make_nan () */ + ECMA_BUILTIN_NUMBER_POSITIVE_INFINITY, /**< result of ecma_number_make_infinity (false) */ + ECMA_BUILTIN_NUMBER_NEGATIVE_INFINITY, /**< result of ecma_number_make_infinity (true) */ +} ecma_builtin_number_type_t; + +/** + * Description of built-in properties. + */ +typedef struct +{ + uint16_t magic_string_id; /**< name of the property */ + uint8_t type; /**< type of the property */ + uint8_t attributes; /**< attributes of the property */ + uint16_t value; /**< value of the property */ +} ecma_builtin_property_descriptor_t; + #define BUILTIN(builtin_id, \ object_type, \ object_prototype_builtin_id, \ is_extensible, \ is_static, \ lowercase_name) \ +extern const ecma_builtin_property_descriptor_t \ +ecma_builtin_ ## lowercase_name ## _property_descriptor_list[]; \ extern ecma_value_t \ ecma_builtin_ ## lowercase_name ## _dispatch_call (const ecma_value_t *, \ ecma_length_t); \ @@ -78,9 +124,6 @@ ecma_builtin_ ## lowercase_name ## _dispatch_routine (uint16_t builtin_routine_i ecma_value_t this_arg_value, \ const ecma_value_t [], \ ecma_length_t); \ -extern ecma_property_t * \ -ecma_builtin_ ## lowercase_name ## _try_to_instantiate_property (ecma_object_t *, \ - ecma_string_t *); \ extern void \ ecma_builtin_ ## lowercase_name ## _list_lazy_property_names (ecma_object_t *, \ bool, \ diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.c b/jerry-core/ecma/builtin-objects/ecma-builtins.c index 054977394e..545642b365 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtins.c @@ -318,7 +318,7 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * string_p, ECMA_PROPERTY_FIXED); - ecma_set_named_data_property_value (len_prop_p, ecma_make_uint32_value (length_prop_value)); + ecma_set_named_data_property_value (len_prop_p, ecma_make_integer_value (length_prop_value)); JERRY_ASSERT (!ecma_is_property_configurable (len_prop_p)); return len_prop_p; @@ -326,46 +326,199 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * return NULL; } - else + + lit_magic_string_id_t magic_string_id; + + if (!ecma_is_string_magic (string_p, &magic_string_id)) { - ecma_property_t *built_in_id_prop_p = ecma_get_internal_property (object_p, - ECMA_INTERNAL_PROPERTY_BUILT_IN_ID); - ecma_builtin_id_t builtin_id = (ecma_builtin_id_t) ecma_get_internal_property_value (built_in_id_prop_p); + return NULL; + } - JERRY_ASSERT (ecma_builtin_is (object_p, builtin_id)); + ecma_property_t *built_in_id_prop_p = ecma_get_internal_property (object_p, + ECMA_INTERNAL_PROPERTY_BUILT_IN_ID); - switch (builtin_id) - { + ecma_builtin_id_t builtin_id = (ecma_builtin_id_t) ecma_get_internal_property_value (built_in_id_prop_p); + const ecma_builtin_property_descriptor_t *property_list_p = NULL; + + JERRY_ASSERT (ecma_builtin_is (object_p, builtin_id)); + + switch (builtin_id) + { #define BUILTIN(builtin_id, \ object_type, \ object_prototype_builtin_id, \ is_extensible, \ is_static, \ lowercase_name) \ - case builtin_id: \ - { \ - return ecma_builtin_ ## lowercase_name ## _try_to_instantiate_property (object_p, \ - string_p); \ - } + case builtin_id: \ + { \ + property_list_p = ecma_builtin_ ## lowercase_name ## _property_descriptor_list; \ + break; \ + } #include "ecma-builtins.inc.h" - case ECMA_BUILTIN_ID__COUNT: + default: + { + JERRY_UNREACHABLE (); + break; + } + } + + const ecma_builtin_property_descriptor_t *curr_property_p = property_list_p; + + while (curr_property_p->magic_string_id != magic_string_id) + { + if (curr_property_p->magic_string_id == LIT_MAGIC_STRING__COUNT) + { + return NULL; + } + curr_property_p++; + } + + uint32_t index = (uint32_t) (curr_property_p - property_list_p); + + JERRY_ASSERT (index < 64); + + uint32_t bit; + ecma_internal_property_id_t mask_prop_id; + + if (likely (index < 32)) + { + mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31; + bit = (uint32_t) 1u << index; + } + else + { + mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63; + bit = (uint32_t) 1u << (index - 32); + } + + ecma_property_t *mask_prop_p = ecma_find_internal_property (object_p, mask_prop_id); + uint32_t bit_mask; + + if (mask_prop_p == NULL) + { + mask_prop_p = ecma_create_internal_property (object_p, mask_prop_id); + bit_mask = 0; + } + else + { + bit_mask = ecma_get_internal_property_value (mask_prop_p); + + if (bit_mask & bit) + { + /* This property was instantiated before. */ + return NULL; + } + } + + bit_mask |= bit; + + ecma_set_internal_property_value (mask_prop_p, bit_mask); + + ecma_value_t value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); + + switch (curr_property_p->type) + { + case ECMA_BUILTIN_PROPERTY_SIMPLE: + { + value = ecma_make_simple_value (curr_property_p->value); + break; + } + case ECMA_BUILTIN_PROPERTY_NUMBER: + { + ecma_number_t num = 0.0; + + if (curr_property_p->value < ECMA_BUILTIN_NUMBER_MAX) { - JERRY_UNREACHABLE (); + num = curr_property_p->value; } - - default: + else if (curr_property_p->value < ECMA_BUILTIN_NUMBER_NAN) { -#ifdef CONFIG_ECMA_COMPACT_PROFILE - JERRY_UNREACHABLE (); -#else /* !CONFIG_ECMA_COMPACT_PROFILE */ - JERRY_UNIMPLEMENTED ("The built-in is not implemented."); -#endif /* CONFIG_ECMA_COMPACT_PROFILE */ + static const ecma_number_t builtin_number_list[] = + { + ECMA_NUMBER_MAX_VALUE, + ECMA_NUMBER_MIN_VALUE, + ECMA_NUMBER_E, + ECMA_NUMBER_PI, + ECMA_NUMBER_LN10, + ECMA_NUMBER_LN2, + ECMA_NUMBER_LOG2E, + ECMA_NUMBER_LOG10E, + ECMA_NUMBER_SQRT2, + ECMA_NUMBER_SQRT_1_2 + }; + + num = builtin_number_list[curr_property_p->value - ECMA_BUILTIN_NUMBER_MAX]; + } + else + { + switch (curr_property_p->value) + { + case ECMA_BUILTIN_NUMBER_NAN: + { + num = ecma_number_make_nan (); + break; + } + case ECMA_BUILTIN_NUMBER_POSITIVE_INFINITY: + { + num = ecma_number_make_infinity (false); + break; + } + case ECMA_BUILTIN_NUMBER_NEGATIVE_INFINITY: + { + num = ecma_number_make_infinity (true); + break; + } + default: + { + JERRY_UNREACHABLE (); + break; + } + } } + + value = ecma_make_number_value (num); + break; + } + case ECMA_BUILTIN_PROPERTY_STRING: + { + value = ecma_make_string_value (ecma_get_magic_string (curr_property_p->value)); + break; + } + case ECMA_BUILTIN_PROPERTY_OBJECT: + { + value = ecma_make_object_value (ecma_builtin_get (curr_property_p->value)); + break; + } + case ECMA_BUILTIN_PROPERTY_ROUTINE: + { + ecma_object_t *func_obj_p = ecma_builtin_make_function_object_for_routine (builtin_id, + magic_string_id, + (uint8_t) curr_property_p->value); + value = ecma_make_object_value (func_obj_p); + break; + } + default: + { + JERRY_UNREACHABLE (); + return NULL; } + } - JERRY_UNREACHABLE (); + ecma_property_t *prop_p = ecma_create_named_data_property (object_p, + string_p, + curr_property_p->attributes); + + ecma_set_named_data_property_value (prop_p, value); + + /* Reference count of objects must be decreased. */ + if (ecma_is_value_object (value)) + { + ecma_free_value (value); } + + return prop_p; } /* ecma_builtin_try_to_instantiate_property */ /**