From ea0176764e635e33d370e5815cf8ce002acc7f07 Mon Sep 17 00:00:00 2001 From: Zoltan Herczeg Date: Fri, 24 Jun 2016 01:54:33 -0700 Subject: [PATCH] Remove ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION to free an object type. JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com --- jerry-core/ecma/base/ecma-globals.h | 10 ++- ...a-builtin-internal-routines-template.inc.h | 18 ++--- .../ecma/builtin-objects/ecma-builtins.c | 48 +++++++++---- .../ecma/builtin-objects/ecma-builtins.h | 18 +++++ .../ecma/operations/ecma-function-object.c | 36 +++++----- jerry-core/ecma/operations/ecma-objects.c | 69 ++++++++----------- 6 files changed, 108 insertions(+), 91 deletions(-) diff --git a/jerry-core/ecma/base/ecma-globals.h b/jerry-core/ecma/base/ecma-globals.h index 044f86076..ac8252d36 100644 --- a/jerry-core/ecma/base/ecma-globals.h +++ b/jerry-core/ecma/base/ecma-globals.h @@ -430,13 +430,11 @@ typedef enum ECMA_OBJECT_TYPE_GENERAL = 0, /**< all objects that are not String (15.5), Function (15.3), Arguments (10.6), Array (15.4) specification-defined objects */ ECMA_OBJECT_TYPE_FUNCTION = 1, /**< Function objects (15.3), created through 13.2 routine */ - ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION = 2, /** One of built-in functions described in section 15 - * of ECMA-262 v5 specification */ + ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION = 2, /**< External (host) function object */ ECMA_OBJECT_TYPE_ARRAY = 3, /**< Array object (15.4) */ ECMA_OBJECT_TYPE_STRING = 4, /**< String objects (15.5) */ - ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION = 5, /**< External (host) function object */ - ECMA_OBJECT_TYPE_BOUND_FUNCTION = 6, /**< Function objects (15.3), created through 15.3.4.5 routine */ - ECMA_OBJECT_TYPE_ARGUMENTS = 7, /**< Arguments object (10.6) */ + ECMA_OBJECT_TYPE_BOUND_FUNCTION = 5, /**< Function objects (15.3), created through 15.3.4.5 routine */ + ECMA_OBJECT_TYPE_ARGUMENTS = 6, /**< Arguments object (10.6) */ ECMA_OBJECT_TYPE__MAX = ECMA_OBJECT_TYPE_ARGUMENTS /**< maximum value */ } ecma_object_type_t; @@ -448,7 +446,7 @@ typedef enum { /* ECMA_OBJECT_TYPE_GENERAL (0) with built-in flag. */ /* ECMA_OBJECT_TYPE_FUNCTION (1) with built-in flag. */ - /* ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION (2) with built-in flag. */ + /* ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION (2) with built-in flag. */ /* ECMA_OBJECT_TYPE_ARRAY (3) with built-in flag. */ /* ECMA_OBJECT_TYPE_STRING (4) with built-in flag. */ ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE = 5, /**< declarative lexical environment */ 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 e6899ebc3..01f165f5b 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 @@ -50,21 +50,11 @@ #undef ROUTINE_ARG_LIST_0 #undef ROUTINE_ARG -#define ECMA_BUILTIN_PROPERTY_NAME_INDEX(name) \ - PASTE (PASTE (PASTE (PASTE (ecma_builtin_property_names, _), BUILTIN_UNDERSCORED_ID), _), name) - enum { -#define SIMPLE_VALUE(name, simple_value, prop_attributes) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define NUMBER_VALUE(name, number_value, prop_attributes) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define STRING_VALUE(name, magic_string_id, prop_attributes) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), -#define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), + PASTE (ECMA_ROUTINE_START_, BUILTIN_UNDERSCORED_ID) = ECMA_BUILTIN_ID__COUNT - 1, #define ROUTINE(name, c_function_name, args_number, length_prop_value) \ - ECMA_BUILTIN_PROPERTY_NAME_INDEX(name), + ECMA_ROUTINE_ ## name ## c_function_name, #include BUILTIN_INC_HEADER_NAME }; @@ -78,7 +68,7 @@ const ecma_builtin_property_descriptor_t PROPERTY_DESCRIPTOR_LIST_NAME[] = name, \ ECMA_BUILTIN_PROPERTY_ROUTINE, \ ECMA_PROPERTY_CONFIGURABLE_WRITABLE, \ - length_prop_value \ + ECMA_ROUTINE_VALUE (ECMA_ROUTINE_ ## name ## c_function_name, length_prop_value) \ }, #define OBJECT_VALUE(name, obj_builtin_id, prop_attributes) \ { \ @@ -148,7 +138,7 @@ DISPATCH_ROUTINE_ROUTINE_NAME (uint16_t builtin_routine_id, /**< built-in wide r #define ROUTINE_ARG_LIST_3 ROUTINE_ARG_LIST_2, ROUTINE_ARG(3) #define ROUTINE_ARG_LIST_NON_FIXED , arguments_list, arguments_number #define ROUTINE(name, c_function_name, args_number, length_prop_value) \ - case name: \ + case ECMA_ROUTINE_ ## name ## c_function_name: \ { \ return c_function_name (this_arg_value ROUTINE_ARG_LIST_ ## args_number); \ } diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.c b/jerry-core/ecma/builtin-objects/ecma-builtins.c index 4f7281149..38a5a0b2b 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins.c +++ b/jerry-core/ecma/builtin-objects/ecma-builtins.c @@ -87,6 +87,22 @@ ecma_builtin_get (ecma_builtin_id_t builtin_id) /**< id of built-in to check on return ecma_builtin_objects[builtin_id]; } /* ecma_builtin_get */ +/** + * Checks whether the given function is a built-in routine + * + * @return true if the function object is a built-in routine + * false otherwise + */ +inline bool __attr_always_inline___ +ecma_builtin_function_is_routine (ecma_object_t *func_obj_p) /**< function object */ +{ + JERRY_ASSERT (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION); + JERRY_ASSERT (ecma_get_object_is_builtin (func_obj_p)); + + ecma_extended_object_t *ext_func_obj_p = (ecma_extended_object_t *) func_obj_p; + return (ext_func_obj_p->u.built_in.routine_id >= ECMA_BUILTIN_ID__COUNT); +} /* ecma_builtin_function_is_routine */ + /** * Initialize specified built-in object. * @@ -113,6 +129,7 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) obj_p; ext_obj_p->u.built_in.id = obj_builtin_id; + ext_obj_p->u.built_in.routine_id = obj_builtin_id; ext_obj_p->u.built_in.instantiated_bitset = 0; /** Initializing [[PrimitiveValue]] properties of built-in prototype objects */ @@ -285,12 +302,14 @@ ecma_builtin_make_function_object_for_routine (ecma_builtin_id_t builtin_id, /** { ecma_object_t *prototype_obj_p = ecma_builtin_get (ECMA_BUILTIN_ID_FUNCTION_PROTOTYPE); - ecma_object_t *func_obj_p = ecma_create_object (prototype_obj_p, true, true, ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION); + ecma_object_t *func_obj_p = ecma_create_object (prototype_obj_p, true, true, ECMA_OBJECT_TYPE_FUNCTION); ecma_deref_object (prototype_obj_p); ecma_set_object_is_builtin (func_obj_p); + JERRY_ASSERT (routine_id >= ECMA_BUILTIN_ID__COUNT); + ecma_extended_object_t *ext_func_obj_p = (ecma_extended_object_t *) func_obj_p; ext_func_obj_p->u.built_in.id = builtin_id; ext_func_obj_p->u.built_in.length = length_prop_value; @@ -328,9 +347,10 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * { JERRY_ASSERT (ecma_get_object_is_builtin (object_p)); - const ecma_object_type_t type = ecma_get_object_type (object_p); + ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p; - if (type == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) + if (ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_FUNCTION + && ecma_builtin_function_is_routine (object_p)) { ecma_string_t *magic_string_length_p = ecma_get_magic_string (LIT_MAGIC_STRING_LENGTH); @@ -348,8 +368,6 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * * as it is non-configurable and so can't be deleted */ - ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p; - ecma_property_t *len_prop_p = ecma_create_named_data_property (object_p, string_p, ECMA_PROPERTY_FIXED); @@ -371,8 +389,6 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * return NULL; } - ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p; - ecma_builtin_id_t builtin_id = (ecma_builtin_id_t) ext_obj_p->u.built_in.id; JERRY_ASSERT (builtin_id < ECMA_BUILTIN_ID__COUNT); @@ -513,9 +529,10 @@ ecma_builtin_try_to_instantiate_property (ecma_object_t *object_p, /**< object * } 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); + ecma_object_t *func_obj_p; + func_obj_p = ecma_builtin_make_function_object_for_routine (builtin_id, + ECMA_GET_ROUTINE_ID (curr_property_p->value), + ECMA_GET_ROUTINE_LENGTH (curr_property_p->value)); value = ecma_make_object_value (func_obj_p); break; } @@ -559,9 +576,12 @@ ecma_builtin_list_lazy_property_names (ecma_object_t *object_p, /**< a built-in ecma_collection_header_t *non_enum_collection_p) /**< skipped 'non-enumerable' * collection */ { - const ecma_object_type_t type = ecma_get_object_type (object_p); + JERRY_ASSERT (ecma_get_object_is_builtin (object_p)); - if (type == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) + ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p; + + if (ecma_get_object_type (object_p) == ECMA_OBJECT_TYPE_FUNCTION + && ecma_builtin_function_is_routine (object_p)) { ecma_collection_header_t *for_enumerable_p = main_collection_p; (void) for_enumerable_p; @@ -575,8 +595,6 @@ ecma_builtin_list_lazy_property_names (ecma_object_t *object_p, /**< a built-in } else { - ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) object_p; - ecma_builtin_id_t builtin_id = (ecma_builtin_id_t) ext_obj_p->u.built_in.id; JERRY_ASSERT (builtin_id < ECMA_BUILTIN_ID__COUNT); @@ -659,7 +677,7 @@ ecma_builtin_dispatch_call (ecma_object_t *obj_p, /**< built-in object */ ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); ecma_extended_object_t *ext_obj_p = (ecma_extended_object_t *) obj_p; - if (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) + if (ecma_builtin_function_is_routine (obj_p)) { ret_value = ecma_builtin_dispatch_routine (ext_obj_p->u.built_in.id, ext_obj_p->u.built_in.routine_id, diff --git a/jerry-core/ecma/builtin-objects/ecma-builtins.h b/jerry-core/ecma/builtin-objects/ecma-builtins.h index 6cfde222a..0a5c7ff2a 100644 --- a/jerry-core/ecma/builtin-objects/ecma-builtins.h +++ b/jerry-core/ecma/builtin-objects/ecma-builtins.h @@ -34,6 +34,21 @@ typedef enum ECMA_BUILTIN_ID__COUNT /**< number of built-in objects */ } ecma_builtin_id_t; +/** + * Construct a routine value + */ +#define ECMA_ROUTINE_VALUE(id, length) (((id) << 4) | length) + +/** + * Get routine length + */ +#define ECMA_GET_ROUTINE_LENGTH(value) ((uint8_t) ((value) & 0xf)) + +/** + * Get routine ID + */ +#define ECMA_GET_ROUTINE_ID(value) ((uint16_t) ((value) >> 4)) + /* ecma-builtins.c */ extern void ecma_init_builtins (void); extern void ecma_finalize_builtins (void); @@ -55,4 +70,7 @@ extern bool ecma_builtin_is (ecma_object_t *, ecma_builtin_id_t); extern ecma_object_t * ecma_builtin_get (ecma_builtin_id_t); +extern bool +ecma_builtin_function_is_routine (ecma_object_t *); + #endif /* !ECMA_BUILTINS_H */ diff --git a/jerry-core/ecma/operations/ecma-function-object.c b/jerry-core/ecma/operations/ecma-function-object.c index 2adb45cbb..696dfd5dc 100644 --- a/jerry-core/ecma/operations/ecma-function-object.c +++ b/jerry-core/ecma/operations/ecma-function-object.c @@ -59,9 +59,8 @@ ecma_op_is_callable (ecma_value_t value) /**< ecma value */ JERRY_ASSERT (!ecma_is_lexical_environment (obj_p)); return (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_FUNCTION - || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION - || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION); + || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION); } /* ecma_op_is_callable */ /** @@ -83,8 +82,13 @@ ecma_is_constructor (ecma_value_t value) /**< ecma value */ JERRY_ASSERT (obj_p != NULL); JERRY_ASSERT (!ecma_is_lexical_environment (obj_p)); - return (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_FUNCTION - || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION + if (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_FUNCTION) + { + return (!ecma_get_object_is_builtin (obj_p) + || !ecma_builtin_function_is_routine (obj_p)); + } + + return (ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_BOUND_FUNCTION || ecma_get_object_type (obj_p) == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION); } /* ecma_is_constructor */ @@ -444,7 +448,7 @@ ecma_op_create_external_function_object (ecma_external_pointer_t code_p) /**< po * created through 13.2 (ECMA_OBJECT_TYPE_FUNCTION) * or 15.3.4.5 (ECMA_OBJECT_TYPE_BOUND_FUNCTION), * and for built-in Function objects - * from section 15 (ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION). + * from section 15 (ECMA_OBJECT_TYPE_FUNCTION). * * @return ecma value * Returned value must be freed with ecma_free_value @@ -460,6 +464,12 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object * if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION) { + if (ecma_get_object_is_builtin (func_obj_p) + && ecma_builtin_function_is_routine (func_obj_p)) + { + return ecma_raise_type_error (ECMA_ERR_MSG ("")); + } + if (!ecma_is_value_object (value)) { return ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE); @@ -505,8 +515,7 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object * ecma_deref_ecma_string (prototype_magic_string_p); } - else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION || - ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION) + else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION) { ret_value = ecma_raise_type_error (ECMA_ERR_MSG ("")); } @@ -535,7 +544,7 @@ ecma_op_function_has_instance (ecma_object_t *func_obj_p, /**< Function object * * created through 13.2 (ECMA_OBJECT_TYPE_FUNCTION) * or 15.3.4.5 (ECMA_OBJECT_TYPE_BOUND_FUNCTION), * and for built-in Function objects - * from section 15 (ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION). + * from section 15 (ECMA_OBJECT_TYPE_FUNCTION). * * @return ecma value * Returned value must be freed with ecma_free_value @@ -636,13 +645,6 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */ ecma_free_value (this_binding); } } - else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) - { - ret_value = ecma_builtin_dispatch_call (func_obj_p, - this_arg_value, - arguments_list_p, - arguments_list_len); - } else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION) { ecma_extended_object_t *ext_func_obj_p = (ecma_extended_object_t *) func_obj_p; @@ -822,8 +824,8 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */ if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION) { - if (unlikely (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION - && ecma_get_object_is_builtin (func_obj_p))) + if (unlikely (ecma_get_object_is_builtin (func_obj_p) + && !ecma_builtin_function_is_routine (func_obj_p))) { ret_value = ecma_builtin_dispatch_construct (func_obj_p, arguments_list_p, diff --git a/jerry-core/ecma/operations/ecma-objects.c b/jerry-core/ecma/operations/ecma-objects.c index ee7707096..85a9e08ef 100644 --- a/jerry-core/ecma/operations/ecma-objects.c +++ b/jerry-core/ecma/operations/ecma-objects.c @@ -39,13 +39,12 @@ #ifndef JERRY_NDEBUG #define JERRY_ASSERT_OBJECT_TYPE_IS_VALID(type) \ JERRY_ASSERT (type == ECMA_OBJECT_TYPE_GENERAL \ - || type == ECMA_OBJECT_TYPE_ARRAY \ || type == ECMA_OBJECT_TYPE_FUNCTION \ - || type == ECMA_OBJECT_TYPE_BOUND_FUNCTION \ - || type == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION \ + || type == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION \ + || type == ECMA_OBJECT_TYPE_ARRAY \ || type == ECMA_OBJECT_TYPE_STRING \ - || type == ECMA_OBJECT_TYPE_ARGUMENTS \ - || type == ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION); + || type == ECMA_OBJECT_TYPE_BOUND_FUNCTION \ + || type == ECMA_OBJECT_TYPE_ARGUMENTS); #else /* JERRY_NDEBUG */ #define JERRY_ASSERT_OBJECT_TYPE_IS_VALID(type) #endif /* !JERRY_NDEBUG */ @@ -71,12 +70,11 @@ ecma_op_object_get (ecma_object_t *obj_p, /**< the object */ switch (type) { case ECMA_OBJECT_TYPE_GENERAL: - case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_FUNCTION: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: + case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_STRING: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: { return ecma_op_general_object_get (obj_p, property_name_p); } @@ -112,10 +110,9 @@ ecma_op_object_get_own_property_longpath (ecma_object_t *obj_p, /**< the object switch (type) { case ECMA_OBJECT_TYPE_GENERAL: + case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_BOUND_FUNCTION: - case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: { prop_p = ecma_op_general_object_get_own_property (obj_p, property_name_p); @@ -142,6 +139,7 @@ ecma_op_object_get_own_property_longpath (ecma_object_t *obj_p, /**< the object break; } + default: { JERRY_UNREACHABLE (); @@ -213,13 +211,12 @@ ecma_op_object_get_property (ecma_object_t *obj_p, /**< the object */ * static const get_property_ptr_t get_property [ECMA_OBJECT_TYPE__COUNT] = * { * [ECMA_OBJECT_TYPE_GENERAL] = &ecma_op_general_object_get_property, - * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_get_property, * [ECMA_OBJECT_TYPE_FUNCTION] = &ecma_op_general_object_get_property, - * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_get_property, * [ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION] = &ecma_op_general_object_get_property, - * [ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION] = &ecma_op_general_object_get_property, - * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_get_property, - * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_get_property + * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_get_property, + * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_get_property, + * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_get_property, + * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_get_property * }; * * return get_property[type] (obj_p, property_name_p); @@ -254,13 +251,12 @@ ecma_op_object_put (ecma_object_t *obj_p, /**< the object */ * static const put_ptr_t put [ECMA_OBJECT_TYPE__COUNT] = * { * [ECMA_OBJECT_TYPE_GENERAL] = &ecma_op_general_object_put, - * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_put, * [ECMA_OBJECT_TYPE_FUNCTION] = &ecma_op_general_object_put, - * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_put, * [ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION] = &ecma_op_general_object_put, - * [ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION] = &ecma_op_general_object_put, - * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_put, - * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_put + * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_put, + * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_put, + * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_put, + * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_put * }; * * return put[type] (obj_p, property_name_p); @@ -292,12 +288,11 @@ ecma_op_object_delete (ecma_object_t *obj_p, /**< the object */ switch (type) { case ECMA_OBJECT_TYPE_GENERAL: - case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_FUNCTION: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: + case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_STRING: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: { return ecma_op_general_object_delete (obj_p, property_name_p, @@ -342,13 +337,12 @@ ecma_op_object_default_value (ecma_object_t *obj_p, /**< the object */ * static const default_value_ptr_t default_value [ECMA_OBJECT_TYPE__COUNT] = * { * [ECMA_OBJECT_TYPE_GENERAL] = &ecma_op_general_object_default_value, - * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_default_value, * [ECMA_OBJECT_TYPE_FUNCTION] = &ecma_op_general_object_default_value, - * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_default_value, * [ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION] = &ecma_op_general_object_default_value, - * [ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION] = &ecma_op_general_object_default_value, - * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_default_value, - * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_default_value + * [ECMA_OBJECT_TYPE_ARRAY] = &ecma_op_general_object_default_value, + * [ECMA_OBJECT_TYPE_STRING] = &ecma_op_general_object_default_value, + * [ECMA_OBJECT_TYPE_BOUND_FUNCTION] = &ecma_op_general_object_default_value, + * [ECMA_OBJECT_TYPE_ARGUMENTS] = &ecma_op_general_object_default_value * }; * * return default_value[type] (obj_p, property_name_p); @@ -383,10 +377,9 @@ ecma_op_object_define_own_property (ecma_object_t *obj_p, /**< the object */ { case ECMA_OBJECT_TYPE_GENERAL: case ECMA_OBJECT_TYPE_FUNCTION: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: case ECMA_OBJECT_TYPE_STRING: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: { return ecma_op_general_object_define_own_property (obj_p, property_name_p, @@ -435,8 +428,8 @@ ecma_op_object_has_instance (ecma_object_t *obj_p, /**< the object */ switch (type) { - case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_GENERAL: + case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_STRING: case ECMA_OBJECT_TYPE_ARGUMENTS: { @@ -444,12 +437,12 @@ ecma_op_object_has_instance (ecma_object_t *obj_p, /**< the object */ } case ECMA_OBJECT_TYPE_FUNCTION: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: { return ecma_op_function_has_instance (obj_p, value); } + default: { JERRY_UNREACHABLE (); @@ -559,12 +552,11 @@ ecma_op_object_get_property_names (ecma_object_t *obj_p, /**< object */ break; } - case ECMA_OBJECT_TYPE_ARRAY: case ECMA_OBJECT_TYPE_GENERAL: - case ECMA_OBJECT_TYPE_ARGUMENTS: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: + case ECMA_OBJECT_TYPE_ARRAY: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: + case ECMA_OBJECT_TYPE_ARGUMENTS: { break; } @@ -865,9 +857,8 @@ ecma_object_get_class_name (ecma_object_t *obj_p) /**< object */ return LIT_MAGIC_STRING_ARGUMENTS_UL; } case ECMA_OBJECT_TYPE_FUNCTION: - case ECMA_OBJECT_TYPE_BOUND_FUNCTION: case ECMA_OBJECT_TYPE_EXTERNAL_FUNCTION: - case ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION: + case ECMA_OBJECT_TYPE_BOUND_FUNCTION: { return LIT_MAGIC_STRING_FUNCTION_UL; }