diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 18b8f818a..22dd5f39d 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -374,8 +374,7 @@ opfunc_var_decl (opcode_t opdata, /**< operation data */ { ecma_string_t *var_name_string_p = ecma_new_ecma_string_from_lit_index (opdata.data.var_decl.variable_name); - if (ecma_is_completion_value_normal_false (ecma_op_has_binding (int_data->lex_env_p, - var_name_string_p))) + if (!ecma_op_has_binding (int_data->lex_env_p, var_name_string_p)) { const bool is_configurable_bindings = int_data->is_eval_code; diff --git a/src/libecmaoperations/ecma-function-object.c b/src/libecmaoperations/ecma-function-object.c index e557bacc8..e0f7b5f24 100644 --- a/src/libecmaoperations/ecma-function-object.c +++ b/src/libecmaoperations/ecma-function-object.c @@ -341,9 +341,8 @@ ecma_function_call_setup_args_variables (ecma_object_t *func_obj_p, /**< Functio JERRY_ASSERT (formal_parameter_name_value.value_type == ECMA_TYPE_STRING); ecma_string_t *formal_parameter_name_string_p = ECMA_GET_POINTER (formal_parameter_name_value.value); - ecma_completion_value_t arg_already_declared = ecma_op_has_binding (env_p, - formal_parameter_name_string_p); - if (!ecma_is_completion_value_normal_true (arg_already_declared)) + bool arg_already_declared = ecma_op_has_binding (env_p, formal_parameter_name_string_p); + if (!arg_already_declared) { ecma_completion_value_t completion = ecma_op_create_mutable_binding (env_p, formal_parameter_name_string_p, @@ -683,9 +682,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment function_code_opcode_idx); // c. - bool func_already_declared = ecma_is_completion_value_normal_true (ecma_op_has_binding (lex_env_p, - function_name_p)); - + bool func_already_declared = ecma_op_has_binding (lex_env_p, function_name_p); // d. ecma_completion_value_t completion = ecma_make_empty_completion_value (); diff --git a/src/libecmaoperations/ecma-lex-env.c b/src/libecmaoperations/ecma-lex-env.c index 3beac7af5..ea62b04c6 100644 --- a/src/libecmaoperations/ecma-lex-env.c +++ b/src/libecmaoperations/ecma-lex-env.c @@ -55,19 +55,15 @@ ecma_get_lex_env_binding_object (ecma_object_t* obj_lex_env_p) /**< object lexic * * See also: ECMA-262 v5, 10.2.1 * - * @return completion value - * Return value is simple and so need not be freed. - * However, ecma_free_completion_value may be called for it, but it is a no-op. + * @return true / false */ -ecma_completion_value_t +bool ecma_op_has_binding (ecma_object_t *lex_env_p, /**< lexical environment */ ecma_string_t *name_p) /**< argument N */ { JERRY_ASSERT(lex_env_p != NULL && ecma_is_lexical_environment (lex_env_p)); - ecma_simple_value_t has_binding = ECMA_SIMPLE_VALUE_UNDEFINED; - switch (ecma_get_lex_env_type (lex_env_p)) { case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE: @@ -83,34 +79,24 @@ ecma_op_has_binding (ecma_object_t *lex_env_p, /**< lexical environment */ if (is_equal) { - return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE); + return true; } #endif /* CONFIG_ECMA_COMPACT_PROFILE */ ecma_property_t *property_p = ecma_find_named_property (lex_env_p, name_p); - has_binding = (property_p != NULL) ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE; - - break; + return (property_p != NULL); } + case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND: { ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p); - if (ecma_op_object_has_property (binding_obj_p, name_p)) - { - has_binding = ECMA_SIMPLE_VALUE_TRUE; - } - else - { - has_binding = ECMA_SIMPLE_VALUE_FALSE; - } - - break; + return ecma_op_object_has_property (binding_obj_p, name_p); } } - return ecma_make_simple_completion_value (has_binding); + JERRY_UNREACHABLE (); } /* ecma_op_has_binding */ /** @@ -134,7 +120,7 @@ ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environme { case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE: { - JERRY_ASSERT(ecma_is_completion_value_normal_false (ecma_op_has_binding (lex_env_p, name_p))); + JERRY_ASSERT(!ecma_op_has_binding (lex_env_p, name_p)); ecma_create_named_data_property (lex_env_p, name_p, @@ -203,7 +189,7 @@ ecma_op_set_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environment && ecma_is_lexical_environment (lex_env_p)); JERRY_ASSERT(name_p != NULL); - JERRY_ASSERT(ecma_is_completion_value_normal_true (ecma_op_has_binding (lex_env_p, name_p))); + JERRY_ASSERT(ecma_op_has_binding (lex_env_p, name_p)); switch (ecma_get_lex_env_type (lex_env_p)) { @@ -280,7 +266,7 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */ && ecma_is_lexical_environment (lex_env_p)); JERRY_ASSERT(name_p != NULL); - JERRY_ASSERT(ecma_is_completion_value_normal_true (ecma_op_has_binding (lex_env_p, name_p))); + JERRY_ASSERT(ecma_op_has_binding (lex_env_p, name_p)); switch (ecma_get_lex_env_type (lex_env_p)) { @@ -467,7 +453,7 @@ ecma_op_create_immutable_binding (ecma_object_t *lex_env_p, /**< lexical environ { case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE: { - JERRY_ASSERT(ecma_is_completion_value_normal_false (ecma_op_has_binding (lex_env_p, name_p))); + JERRY_ASSERT(!ecma_op_has_binding (lex_env_p, name_p)); /* * Warning: @@ -512,7 +498,7 @@ ecma_op_initialize_immutable_binding (ecma_object_t *lex_env_p, /**< lexical env { case ECMA_LEXICAL_ENVIRONMENT_DECLARATIVE: { - JERRY_ASSERT(ecma_is_completion_value_normal_true (ecma_op_has_binding (lex_env_p, name_p))); + JERRY_ASSERT(ecma_op_has_binding (lex_env_p, name_p)); ecma_property_t *prop_p = ecma_get_named_data_property (lex_env_p, name_p); diff --git a/src/libecmaoperations/ecma-lex-env.h b/src/libecmaoperations/ecma-lex-env.h index 73e7852d5..76aa75206 100644 --- a/src/libecmaoperations/ecma-lex-env.h +++ b/src/libecmaoperations/ecma-lex-env.h @@ -37,8 +37,8 @@ extern ecma_completion_value_t ecma_op_put_value_object_base (ecma_reference_t r ecma_value_t value); /* ECMA-262 v5, Table 17. Abstract methods of Environment Records */ -extern ecma_completion_value_t ecma_op_has_binding (ecma_object_t *lex_env_p, - ecma_string_t *name_p); +extern bool ecma_op_has_binding (ecma_object_t *lex_env_p, + ecma_string_t *name_p); extern ecma_completion_value_t ecma_op_create_mutable_binding (ecma_object_t *lex_env_p, ecma_string_t *name_p, bool is_deletable); diff --git a/src/libecmaoperations/ecma-reference.c b/src/libecmaoperations/ecma-reference.c index 5448a2e93..d9415e75c 100644 --- a/src/libecmaoperations/ecma-reference.c +++ b/src/libecmaoperations/ecma-reference.c @@ -46,19 +46,12 @@ ecma_op_get_identifier_reference (ecma_object_t *lex_env_p, /**< lexical environ while (lex_env_iter_p != NULL) { - ecma_completion_value_t completion_value; - completion_value = ecma_op_has_binding (lex_env_iter_p, name_p); - - if (ecma_is_completion_value_normal_true (completion_value)) + if (ecma_op_has_binding (lex_env_iter_p, name_p)) { return ecma_make_reference (ecma_make_object_value (lex_env_iter_p), name_p, is_strict); } - else - { - JERRY_ASSERT(ecma_is_completion_value_normal_false (completion_value)); - } lex_env_iter_p = ecma_get_lex_env_outer_reference (lex_env_iter_p); }