Remove 'ecma_completion_value_t'
Remove ecma_completion_value_t, and add an extra bit to ecma_value_t to represent errors. From the long list of completion types only normal and error remained. JerryScript-DCO-1.0-Signed-off-by: László Langó llango.u-szeged@partner.samsung.com JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
committed by
László Langó
parent
c25d8617a5
commit
b2426a7a94
+50
-53
@@ -40,20 +40,20 @@
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.2.3
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value.
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value.
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_call_n (ecma_value_t this_value, /**< this object value */
|
||||
ecma_value_t func_value, /**< function object value */
|
||||
const ecma_value_t *arguments_list_p, /**< stack pointer */
|
||||
ecma_length_t arguments_list_len) /**< number of arguments */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
if (!ecma_op_is_callable (func_value))
|
||||
{
|
||||
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
return ecma_raise_type_error ("");
|
||||
}
|
||||
|
||||
ecma_object_t *func_obj_p = ecma_get_object_from_value (func_value);
|
||||
@@ -71,19 +71,19 @@ opfunc_call_n (ecma_value_t this_value, /**< this object value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.2.2
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value.
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value.
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_construct_n (ecma_value_t constructor_value, /**< constructor object value */
|
||||
const ecma_value_t *arguments_list_p, /**< stack pointer */
|
||||
ecma_length_t arguments_list_len) /**< number of arguments */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
if (!ecma_is_constructor (constructor_value))
|
||||
{
|
||||
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
|
||||
ret_value = ecma_raise_type_error ("");
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -95,7 +95,7 @@ opfunc_construct_n (ecma_value_t constructor_value, /**< constructor object valu
|
||||
arguments_list_len),
|
||||
ret_value);
|
||||
|
||||
ret_value = ecma_make_normal_completion_value (ecma_copy_value (construction_ret_value, true));
|
||||
ret_value = ecma_copy_value (construction_ret_value, true);
|
||||
|
||||
ECMA_FINALIZE (construction_ret_value);
|
||||
}
|
||||
@@ -108,11 +108,11 @@ opfunc_construct_n (ecma_value_t constructor_value, /**< constructor object valu
|
||||
*
|
||||
* See also: ECMA-262 v5, 10.5 - Declaration binding instantiation (block 8).
|
||||
*
|
||||
* @return completion value
|
||||
* @return ecma value
|
||||
* Returned 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.
|
||||
* However, ecma_free_value may be called for it, but it is a no-op.
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
vm_var_decl (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
|
||||
ecma_string_t *var_name_str_p) /**< variable name */
|
||||
{
|
||||
@@ -120,21 +120,20 @@ vm_var_decl (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
|
||||
{
|
||||
const bool is_configurable_bindings = frame_ctx_p->is_eval_code;
|
||||
|
||||
ecma_completion_value_t completion = ecma_op_create_mutable_binding (frame_ctx_p->lex_env_p,
|
||||
var_name_str_p,
|
||||
is_configurable_bindings);
|
||||
ecma_value_t completion_value = ecma_op_create_mutable_binding (frame_ctx_p->lex_env_p,
|
||||
var_name_str_p,
|
||||
is_configurable_bindings);
|
||||
|
||||
JERRY_ASSERT (ecma_is_completion_value_empty (completion));
|
||||
JERRY_ASSERT (ecma_is_value_empty (completion_value));
|
||||
|
||||
/* Skipping SetMutableBinding as we have already checked that there were not
|
||||
* any binding with specified name in current lexical environment
|
||||
* and CreateMutableBinding sets the created binding's value to undefined */
|
||||
JERRY_ASSERT (ecma_is_completion_value_normal_simple_value (ecma_op_get_binding_value (frame_ctx_p->lex_env_p,
|
||||
var_name_str_p,
|
||||
true),
|
||||
ECMA_SIMPLE_VALUE_UNDEFINED));
|
||||
JERRY_ASSERT (ecma_is_value_undefined (ecma_op_get_binding_value (frame_ctx_p->lex_env_p,
|
||||
var_name_str_p,
|
||||
true)));
|
||||
}
|
||||
return ecma_make_empty_completion_value ();
|
||||
return ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
} /* vm_var_decl */
|
||||
|
||||
/**
|
||||
@@ -142,24 +141,20 @@ vm_var_decl (vm_frame_ctx_t *frame_ctx_p, /**< interpreter context */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.4.9
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_logical_not (ecma_value_t left_value) /**< left value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
ecma_value_t to_bool_value = ecma_op_to_boolean (left_value);
|
||||
|
||||
ecma_simple_value_t old_value = ECMA_SIMPLE_VALUE_TRUE;
|
||||
ecma_completion_value_t to_bool_value = ecma_op_to_boolean (left_value);
|
||||
|
||||
if (ecma_is_value_true (ecma_get_completion_value_value (to_bool_value)))
|
||||
if (ecma_is_value_true (to_bool_value))
|
||||
{
|
||||
old_value = ECMA_SIMPLE_VALUE_FALSE;
|
||||
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
|
||||
}
|
||||
|
||||
ret_value = ecma_make_simple_completion_value (old_value);
|
||||
|
||||
return ret_value;
|
||||
} /* opfunc_logical_not */
|
||||
|
||||
@@ -168,13 +163,13 @@ opfunc_logical_not (ecma_value_t left_value) /**< left value */
|
||||
*
|
||||
* See also: ECMA-262 v5, 11.4.3
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
opfunc_typeof (ecma_value_t left_value) /**< left value */
|
||||
{
|
||||
ecma_completion_value_t ret_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ecma_string_t *type_str_p = NULL;
|
||||
|
||||
@@ -212,7 +207,7 @@ opfunc_typeof (ecma_value_t left_value) /**< left value */
|
||||
}
|
||||
}
|
||||
|
||||
ret_value = ecma_make_normal_completion_value (ecma_make_string_value (type_str_p));
|
||||
ret_value = ecma_make_string_value (type_str_p);
|
||||
|
||||
return ret_value;
|
||||
} /* opfunc_typeof */
|
||||
@@ -278,22 +273,23 @@ opfunc_set_accessor (bool is_getter, /**< is getter accessor */
|
||||
/**
|
||||
* Deletes an object property.
|
||||
*
|
||||
* @return completion value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
vm_op_delete_prop (ecma_value_t object, /**< base object */
|
||||
ecma_value_t property, /**< property name */
|
||||
bool is_strict) /**< strict mode */
|
||||
{
|
||||
ecma_completion_value_t completion_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
if (ecma_is_value_undefined (object))
|
||||
{
|
||||
completion_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
completion_value = ecma_make_empty_completion_value ();
|
||||
completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ECMA_TRY_CATCH (check_coercible_ret,
|
||||
ecma_op_check_object_coercible (object),
|
||||
@@ -315,7 +311,7 @@ vm_op_delete_prop (ecma_value_t object, /**< base object */
|
||||
ecma_op_object_delete (obj_p, name_string_p, is_strict),
|
||||
completion_value);
|
||||
|
||||
completion_value = ecma_make_normal_completion_value (delete_op_ret_val);
|
||||
completion_value = delete_op_ret_val;
|
||||
|
||||
ECMA_FINALIZE (delete_op_ret_val);
|
||||
ECMA_FINALIZE (obj_value);
|
||||
@@ -329,14 +325,15 @@ vm_op_delete_prop (ecma_value_t object, /**< base object */
|
||||
/**
|
||||
* Deletes a variable.
|
||||
*
|
||||
* @return completion value
|
||||
* @return ecma value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_completion_value_t
|
||||
ecma_value_t
|
||||
vm_op_delete_var (lit_cpointer_t name_literal, /**< name literal */
|
||||
ecma_object_t *lex_env_p, /**< lexical environment */
|
||||
bool is_strict) /**< strict mode */
|
||||
{
|
||||
ecma_completion_value_t completion_value = ecma_make_empty_completion_value ();
|
||||
ecma_value_t completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ecma_string_t *var_name_str_p;
|
||||
|
||||
@@ -349,7 +346,7 @@ vm_op_delete_var (lit_cpointer_t name_literal, /**< name literal */
|
||||
|
||||
if (ecma_is_value_undefined (ref.base))
|
||||
{
|
||||
completion_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -363,7 +360,7 @@ vm_op_delete_var (lit_cpointer_t name_literal, /**< name literal */
|
||||
ref.referenced_name_cp)),
|
||||
completion_value);
|
||||
|
||||
completion_value = ecma_make_normal_completion_value (delete_op_ret_val);
|
||||
completion_value = delete_op_ret_val;
|
||||
|
||||
ECMA_FINALIZE (delete_op_ret_val);
|
||||
|
||||
@@ -382,13 +379,13 @@ vm_op_delete_var (lit_cpointer_t name_literal, /**< name literal */
|
||||
* ECMA-262 v5, 12.6.4
|
||||
*
|
||||
* @return completion value
|
||||
* Returned value must be freed with ecma_free_completion_value
|
||||
* Returned value must be freed with ecma_free_value
|
||||
*/
|
||||
ecma_collection_header_t *
|
||||
opfunc_for_in (ecma_value_t left_value, /**< left value */
|
||||
ecma_value_t *result_obj_p) /**< expression object */
|
||||
{
|
||||
ecma_completion_value_t compl_val = ecma_make_empty_completion_value ();
|
||||
ecma_value_t compl_val = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
ecma_collection_header_t *prop_names_p = NULL;
|
||||
|
||||
/* 3. */
|
||||
@@ -417,7 +414,7 @@ opfunc_for_in (ecma_value_t left_value, /**< left value */
|
||||
ECMA_FINALIZE (obj_expr_value);
|
||||
}
|
||||
|
||||
JERRY_ASSERT (ecma_is_completion_value_empty (compl_val));
|
||||
JERRY_ASSERT (ecma_is_value_empty (compl_val));
|
||||
|
||||
return prop_names_p;
|
||||
} /* opfunc_for_in */
|
||||
|
||||
Reference in New Issue
Block a user