diff --git a/src/libecmabuiltins/ecma-builtin-array-object.c b/src/libecmabuiltins/ecma-builtin-array-object.c index b57648e38..075146e45 100644 --- a/src/libecmabuiltins/ecma-builtin-array-object.c +++ b/src/libecmabuiltins/ecma-builtin-array-object.c @@ -70,8 +70,8 @@ static const ecma_magic_string_id_t ecma_builtin_array_property_names[] = /** * Number of the Array object's built-in properties */ -const ecma_length_t ecma_builtin_array_property_number = (sizeof (ecma_builtin_array_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_array_property_number = (sizeof (ecma_builtin_array_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Array object's 'isArray' routine @@ -150,15 +150,21 @@ ecma_builtin_array_try_to_instantiate_property (ecma_object_t *obj_p, /**< objec bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-array-prototype-object.c b/src/libecmabuiltins/ecma-builtin-array-prototype-object.c index bfe1330c4..90ea05f63 100644 --- a/src/libecmabuiltins/ecma-builtin-array-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-array-prototype-object.c @@ -74,8 +74,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Number of the Array.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_array_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_array_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Array.prototype object's 'toString' routine @@ -139,15 +139,21 @@ ecma_builtin_array_prototype_try_to_instantiate_property (ecma_object_t *obj_p, bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-boolean-object.c b/src/libecmabuiltins/ecma-builtin-boolean-object.c index 455031412..4f90b045a 100644 --- a/src/libecmabuiltins/ecma-builtin-boolean-object.c +++ b/src/libecmabuiltins/ecma-builtin-boolean-object.c @@ -63,8 +63,8 @@ static const ecma_magic_string_id_t ecma_builtin_boolean_property_names[] = /** * Number of the Boolean object's built-in properties */ -const ecma_length_t ecma_builtin_boolean_property_number = (sizeof (ecma_builtin_boolean_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_boolean_property_number = (sizeof (ecma_builtin_boolean_property_names) / + sizeof (ecma_magic_string_id_t)); /** * If the property's name is one of built-in properties of the Boolean object @@ -113,15 +113,21 @@ ecma_builtin_boolean_try_to_instantiate_property (ecma_object_t *obj_p, /**< obj bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-boolean-prototype-object.c b/src/libecmabuiltins/ecma-builtin-boolean-prototype-object.c index e8b652aa3..4bbdbb087 100644 --- a/src/libecmabuiltins/ecma-builtin-boolean-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-boolean-prototype-object.c @@ -81,8 +81,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Boolean of the Boolean.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_boolean_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_boolean_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Boolean.prototype object's 'toString' routine @@ -211,15 +211,21 @@ ecma_builtin_boolean_prototype_try_to_instantiate_property (ecma_object_t *obj_p bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-function-object.c b/src/libecmabuiltins/ecma-builtin-function-object.c index ffef3acbc..ca813af64 100644 --- a/src/libecmabuiltins/ecma-builtin-function-object.c +++ b/src/libecmabuiltins/ecma-builtin-function-object.c @@ -62,8 +62,8 @@ static const ecma_magic_string_id_t ecma_builtin_function_property_names[] = /** * Number of the Function object's built-in properties */ -const ecma_length_t ecma_builtin_function_property_number = (sizeof (ecma_builtin_function_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_function_property_number = (sizeof (ecma_builtin_function_property_names) / + sizeof (ecma_magic_string_id_t)); /** * If the property's name is one of built-in properties of the Function object @@ -112,15 +112,21 @@ ecma_builtin_function_try_to_instantiate_property (ecma_object_t *obj_p, /**< ob bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-function-prototype-object.c b/src/libecmabuiltins/ecma-builtin-function-prototype-object.c index f8daa5712..77a9bbef3 100644 --- a/src/libecmabuiltins/ecma-builtin-function-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-function-prototype-object.c @@ -82,8 +82,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Number of the Function.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_function_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_function_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Function.prototype object's 'toString' routine @@ -226,15 +226,21 @@ ecma_builtin_function_prototype_try_to_instantiate_property (ecma_object_t *obj_ bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-global-object.c b/src/libecmabuiltins/ecma-builtin-global-object.c index 69893ec05..f37623ff5 100644 --- a/src/libecmabuiltins/ecma-builtin-global-object.c +++ b/src/libecmabuiltins/ecma-builtin-global-object.c @@ -77,8 +77,8 @@ static const ecma_magic_string_id_t ecma_builtin_global_property_names[] = /** * Number of the Global object's built-in properties */ -const ecma_length_t ecma_builtin_global_property_number = (sizeof (ecma_builtin_global_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_global_property_number = (sizeof (ecma_builtin_global_property_names) / + sizeof (ecma_magic_string_id_t)); JERRY_STATIC_ASSERT (sizeof (ecma_builtin_global_property_names) > sizeof (void*)); /** @@ -400,21 +400,26 @@ ecma_builtin_global_try_to_instantiate_property (ecma_object_t *obj_p, /**< obje JERRY_ASSERT (index >= 0 && (uint32_t) index < sizeof (uint32_t) * JERRY_BITSINBYTE); + ecma_internal_property_id_t mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31; uint32_t bit = (uint32_t) 1u << index; - ecma_property_t *mask_0_31_prop_p; - mask_0_31_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31); - uint32_t bit_mask = mask_0_31_prop_p->u.internal_property.value; + 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); + mask_prop_p->u.internal_property.value = 0; + } - if (!(bit_mask & bit)) + uint32_t bit_mask = mask_prop_p->u.internal_property.value; + + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; - mask_0_31_prop_p->u.internal_property.value = bit_mask; + mask_prop_p->u.internal_property.value = bit_mask; ecma_value_t value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); ecma_property_writable_value_t writable = ECMA_PROPERTY_WRITABLE; diff --git a/src/libecmabuiltins/ecma-builtin-math-object.c b/src/libecmabuiltins/ecma-builtin-math-object.c index d29fcc466..1762c587b 100644 --- a/src/libecmabuiltins/ecma-builtin-math-object.c +++ b/src/libecmabuiltins/ecma-builtin-math-object.c @@ -146,8 +146,8 @@ static const ecma_magic_string_id_t ecma_builtin_math_property_names[] = /** * Number of the Math object's built-in properties */ -const ecma_length_t ecma_builtin_math_property_number = (sizeof (ecma_builtin_math_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_math_property_number = (sizeof (ecma_builtin_math_property_names) / + sizeof (ecma_magic_string_id_t)); JERRY_STATIC_ASSERT (sizeof (ecma_builtin_math_property_names) > sizeof (void*)); /** @@ -1044,15 +1044,21 @@ ecma_builtin_math_try_to_instantiate_property (ecma_object_t *obj_p, /**< object bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-number-object.c b/src/libecmabuiltins/ecma-builtin-number-object.c index 8634c3d6a..647775427 100644 --- a/src/libecmabuiltins/ecma-builtin-number-object.c +++ b/src/libecmabuiltins/ecma-builtin-number-object.c @@ -68,8 +68,8 @@ static const ecma_magic_string_id_t ecma_builtin_number_property_names[] = /** * Number of the Number object's built-in properties */ -const ecma_length_t ecma_builtin_number_property_number = (sizeof (ecma_builtin_number_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_number_property_number = (sizeof (ecma_builtin_number_property_names) / + sizeof (ecma_magic_string_id_t)); /** * If the property's name is one of built-in properties of the Number object @@ -118,15 +118,21 @@ ecma_builtin_number_try_to_instantiate_property (ecma_object_t *obj_p, /**< obje bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-number-prototype-object.c b/src/libecmabuiltins/ecma-builtin-number-prototype-object.c index 04ecd9072..5fb2ffa84 100644 --- a/src/libecmabuiltins/ecma-builtin-number-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-number-prototype-object.c @@ -90,8 +90,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Number of the Number.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_number_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_number_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Number.prototype object's 'toString' routine @@ -299,15 +299,21 @@ ecma_builtin_number_prototype_try_to_instantiate_property (ecma_object_t *obj_p, bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-object-object.c b/src/libecmabuiltins/ecma-builtin-object-object.c index ae12f0ea3..a988a9058 100644 --- a/src/libecmabuiltins/ecma-builtin-object-object.c +++ b/src/libecmabuiltins/ecma-builtin-object-object.c @@ -63,8 +63,8 @@ static const ecma_magic_string_id_t ecma_builtin_object_property_names[] = /** * Number of the Object object's built-in properties */ -const ecma_length_t ecma_builtin_object_property_number = (sizeof (ecma_builtin_object_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_object_property_number = (sizeof (ecma_builtin_object_property_names) / + sizeof (ecma_magic_string_id_t)); JERRY_STATIC_ASSERT (sizeof (ecma_builtin_object_property_names) > sizeof (void*)); /** @@ -559,21 +559,26 @@ ecma_builtin_object_try_to_instantiate_property (ecma_object_t *obj_p, /**< obje JERRY_ASSERT (index >= 0 && (uint32_t) index < sizeof (uint32_t) * JERRY_BITSINBYTE); + ecma_internal_property_id_t mask_prop_id = ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31; uint32_t bit = (uint32_t) 1u << index; - ecma_property_t *mask_0_31_prop_p; - mask_0_31_prop_p = ecma_get_internal_property (obj_p, - ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31); - uint32_t bit_mask = mask_0_31_prop_p->u.internal_property.value; + 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); + mask_prop_p->u.internal_property.value = 0; + } - if (!(bit_mask & bit)) + uint32_t bit_mask = mask_prop_p->u.internal_property.value; + + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; - mask_0_31_prop_p->u.internal_property.value = bit_mask; + mask_prop_p->u.internal_property.value = bit_mask; ecma_value_t value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY); ecma_property_writable_value_t writable = ECMA_PROPERTY_WRITABLE; diff --git a/src/libecmabuiltins/ecma-builtin-object-prototype-object.c b/src/libecmabuiltins/ecma-builtin-object-prototype-object.c index 2520f4f7d..46173a420 100644 --- a/src/libecmabuiltins/ecma-builtin-object-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-object-prototype-object.c @@ -90,8 +90,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Number of the Object.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_object_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_object_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The Object.prototype object's 'toString' routine @@ -302,15 +302,21 @@ ecma_builtin_object_prototype_try_to_instantiate_property (ecma_object_t *obj_p, bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-string-object.c b/src/libecmabuiltins/ecma-builtin-string-object.c index 5552cf180..cfb597e6b 100644 --- a/src/libecmabuiltins/ecma-builtin-string-object.c +++ b/src/libecmabuiltins/ecma-builtin-string-object.c @@ -70,8 +70,8 @@ static const ecma_magic_string_id_t ecma_builtin_string_property_names[] = /** * Number of the String object's built-in properties */ -const ecma_length_t ecma_builtin_string_property_number = (sizeof (ecma_builtin_string_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_string_property_number = (sizeof (ecma_builtin_string_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The String object's 'fromCharCode' routine @@ -187,15 +187,21 @@ ecma_builtin_string_try_to_instantiate_property (ecma_object_t *obj_p, /**< obje bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtin-string-prototype-object.c b/src/libecmabuiltins/ecma-builtin-string-prototype-object.c index aaef2a964..9c6e857b6 100644 --- a/src/libecmabuiltins/ecma-builtin-string-prototype-object.c +++ b/src/libecmabuiltins/ecma-builtin-string-prototype-object.c @@ -142,8 +142,8 @@ static const ecma_magic_string_id_t ecma_builtin_property_names[] = /** * Number of the String.prototype object's built-in properties */ -const ecma_length_t ecma_builtin_string_prototype_property_number = (sizeof (ecma_builtin_property_names) / - sizeof (ecma_magic_string_id_t)); +static const ecma_length_t ecma_builtin_string_prototype_property_number = (sizeof (ecma_builtin_property_names) / + sizeof (ecma_magic_string_id_t)); /** * The String.prototype object's 'toString' routine @@ -519,15 +519,21 @@ ecma_builtin_string_prototype_try_to_instantiate_property (ecma_object_t *obj_p, bit = (uint32_t) 1u << index; } - ecma_property_t *mask_prop_p = ecma_get_internal_property (obj_p, mask_prop_id); + 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); + mask_prop_p->u.internal_property.value = 0; + } + uint32_t bit_mask = mask_prop_p->u.internal_property.value; - if (!(bit_mask & bit)) + if (bit_mask & bit) { return NULL; } - bit_mask &= ~bit; + bit_mask |= bit; mask_prop_p->u.internal_property.value = bit_mask; diff --git a/src/libecmabuiltins/ecma-builtins-internal.h b/src/libecmabuiltins/ecma-builtins-internal.h index 03e046706..b8bed48a0 100644 --- a/src/libecmabuiltins/ecma-builtins-internal.h +++ b/src/libecmabuiltins/ecma-builtins-internal.h @@ -156,14 +156,7 @@ ecma_builtin_ ## lowercase_name ## _dispatch_routine (ecma_magic_string_id_t bui extern ecma_property_t* \ ecma_builtin_ ## lowercase_name ## _try_to_instantiate_property (ecma_object_t *obj_p, \ ecma_string_t *prop_name_p); -#define DECLARE_PROPERTY_NUMBER_VARIABLES(builtin_id, \ - object_type, \ - object_class, \ - object_prototype_builtin_id, \ - lowercase_name) \ -extern const ecma_length_t ecma_builtin_ ## lowercase_name ## _property_number; -ECMA_BUILTIN_LIST (DECLARE_PROPERTY_NUMBER_VARIABLES) ECMA_BUILTIN_LIST (DECLARE_DISPATCH_ROUTINES) #undef DECLARE_PROPERTY_NUMBER_VARIABLES diff --git a/src/libecmabuiltins/ecma-builtins.c b/src/libecmabuiltins/ecma-builtins.c index 5d27021d6..72c03d414 100644 --- a/src/libecmabuiltins/ecma-builtins.c +++ b/src/libecmabuiltins/ecma-builtins.c @@ -88,8 +88,7 @@ static ecma_object_t* ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ ecma_object_t* prototype_obj_p, /**< prototype object */ ecma_object_type_t obj_type, /**< object's type */ - ecma_magic_string_id_t obj_class, /**< object's class */ - ecma_length_t property_number) /**< number of the object's properties */ + ecma_magic_string_id_t obj_class) /**< object's class */ { ecma_object_t *object_obj_p = ecma_create_object (prototype_obj_p, true, obj_type); @@ -101,22 +100,6 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ ECMA_INTERNAL_PROPERTY_BUILT_IN_ID); built_in_id_prop_p->u.internal_property.value = obj_builtin_id; - JERRY_STATIC_ASSERT (property_number < sizeof (uint64_t) * JERRY_BITSINBYTE); - uint64_t builtin_mask = ((uint32_t) 1u << property_number) - 1; - - ecma_property_t *mask_0_31_prop_p; - mask_0_31_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_0_31); - mask_0_31_prop_p->u.internal_property.value = (uint32_t) builtin_mask; - - if (jrt_extract_bit_field (builtin_mask, 32, 32) != 0) - { - ecma_property_t *mask_32_63_prop_p; - mask_32_63_prop_p = ecma_create_internal_property (object_obj_p, - ECMA_INTERNAL_PROPERTY_NON_INSTANTIATED_BUILT_IN_MASK_32_63); - mask_32_63_prop_p->u.internal_property.value = (uint32_t) jrt_extract_bit_field (builtin_mask, 32, 32); - } - ecma_set_object_is_builtin (object_obj_p, true); /** Initializing [[PrimitiveValue]] properties of built-in prototype objects */ @@ -141,7 +124,6 @@ ecma_builtin_init_object (ecma_builtin_id_t obj_builtin_id, /**< built-in ID */ prim_value_prop_p = ecma_create_internal_property (object_obj_p, ECMA_INTERNAL_PROPERTY_PRIMITIVE_NUMBER_VALUE); ECMA_SET_POINTER (prim_value_prop_p->u.internal_property.value, prim_prop_num_value_p); - break; } case ECMA_BUILTIN_ID_BOOLEAN_PROTOTYPE: @@ -195,8 +177,7 @@ ecma_init_builtins (void) ecma_object_t *builtin_obj_p = ecma_builtin_init_object (ECMA_BUILTIN_ID_ ## builtin_id, \ prototype_obj_p, \ ECMA_OBJECT_ ## object_type, \ - ECMA_MAGIC_STRING_ ## object_class, \ - ecma_builtin_ ## lowercase_name ## _property_number); \ + ECMA_MAGIC_STRING_ ## object_class); \ ecma_builtin_objects [ECMA_BUILTIN_ID_ ## builtin_id] = builtin_obj_p; \ }