Adding several completion value construction and comparison helpers.

This commit is contained in:
Ruben Ayrapetyan
2014-08-29 12:51:06 +04:00
parent 164350b369
commit f7968e617d
17 changed files with 202 additions and 123 deletions
+2 -2
View File
@@ -41,7 +41,7 @@ ecma_reject (bool is_throw) /**< Throw flag */
{
if (is_throw)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
@@ -212,7 +212,7 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
// d.
if (ecma_uint32_to_number (new_len_uint32) != new_len_num)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_RANGE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_RANGE));
}
else
{
+2 -4
View File
@@ -244,13 +244,11 @@ ecma_op_abstract_relational_compare (ecma_value_t x, /**< first operand */
if (*num_x_p >= *num_y_p)
{
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE));
ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE));
ret_value = ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_TRUE);
}
ECMA_FINALIZE(ny);
+5 -9
View File
@@ -50,7 +50,7 @@ ecma_op_check_object_coercible (ecma_value_t value) /**< ecma-value */
if (ecma_is_value_undefined (value)
|| ecma_is_value_null (value))
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else if (ecma_is_value_boolean (value))
{
@@ -167,8 +167,7 @@ ecma_op_to_primitive (ecma_value_t value, /**< ecma-value */
case ECMA_TYPE_NUMBER:
case ECMA_TYPE_STRING:
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true));
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
}
case ECMA_TYPE_OBJECT:
@@ -260,8 +259,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */
{
case ECMA_TYPE_NUMBER:
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true));
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
}
case ECMA_TYPE_SIMPLE:
case ECMA_TYPE_STRING:
@@ -372,8 +370,7 @@ ecma_op_to_string (ecma_value_t value) /**< ecma-value */
}
}
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_string_value (res_p));
return ecma_make_normal_completion_value (ecma_make_string_value (res_p));
} /* ecma_op_to_string */
/**
@@ -399,8 +396,7 @@ ecma_op_to_object (ecma_value_t value) /**< ecma-value */
case ECMA_TYPE_OBJECT:
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true));
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
}
}
+9 -11
View File
@@ -352,7 +352,7 @@ ecma_function_call_setup_args_variables (ecma_object_t *func_obj_p, /**< Functio
return completion;
}
JERRY_ASSERT (ecma_is_empty_completion_value (completion));
JERRY_ASSERT (ecma_is_completion_value_empty (completion));
completion = ecma_op_set_mutable_binding (env_p,
formal_parameter_name_string_p,
@@ -364,7 +364,7 @@ ecma_function_call_setup_args_variables (ecma_object_t *func_obj_p, /**< Functio
return completion;
}
JERRY_ASSERT (ecma_is_empty_completion_value (completion));
JERRY_ASSERT (ecma_is_completion_value_empty (completion));
}
}
@@ -445,10 +445,9 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
false);
if (ecma_is_completion_value_normal (completion))
{
JERRY_ASSERT(ecma_is_empty_completion_value (completion));
JERRY_ASSERT(ecma_is_completion_value_empty (completion));
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_RETURN,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED));
ret_value = ecma_make_return_completion_value (ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED));
}
else
{
@@ -546,8 +545,7 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
obj_value = ecma_make_object_value (obj_p);
}
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
obj_value);
ret_value = ecma_make_normal_completion_value (obj_value);
ECMA_FINALIZE (call_completion);
ECMA_FINALIZE (func_obj_prototype_prop_value);
@@ -600,7 +598,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment
function_name_p,
is_configurable_bindings);
JERRY_ASSERT (ecma_is_empty_completion_value (completion));
JERRY_ASSERT (ecma_is_completion_value_empty (completion));
}
else if (ecma_is_lexical_environment_global (lex_env_p))
{
@@ -635,7 +633,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment
}
else if (existing_prop_p->type == ECMA_PROPERTY_NAMEDACCESSOR)
{
completion = ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
completion = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
@@ -644,7 +642,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment
if (existing_prop_p->u.named_data_property.writable != ECMA_PROPERTY_WRITABLE
|| existing_prop_p->u.named_data_property.enumerable != ECMA_PROPERTY_ENUMERABLE)
{
completion = ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
completion = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
}
@@ -659,7 +657,7 @@ ecma_op_function_declaration (ecma_object_t *lex_env_p, /**< lexical environment
}
else
{
JERRY_ASSERT (ecma_is_empty_completion_value (completion));
JERRY_ASSERT (ecma_is_completion_value_empty (completion));
// f.
ret_value = ecma_op_set_mutable_binding (lex_env_p,
+3 -3
View File
@@ -58,7 +58,7 @@ ecma_op_get_value (ecma_reference_t ref) /**< ECMA-reference */
// 3.
if (is_unresolvable_reference)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
}
// 4.
@@ -114,7 +114,7 @@ ecma_reject_put (bool is_throw) /**< Throw flag */
{
if (is_throw)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
@@ -149,7 +149,7 @@ ecma_op_put_value (ecma_reference_t ref, /**< ECMA-reference */
// 3.a.
if (ref.is_strict)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
}
else
{
+7 -11
View File
@@ -94,8 +94,7 @@ ecma_op_has_binding (ecma_object_t *lex_env_p, /**< lexical environment */
}
}
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_simple_value (has_binding));
return ecma_make_simple_completion_value (has_binding);
} /* ecma_op_has_binding */
/**
@@ -203,7 +202,7 @@ ecma_op_set_mutable_binding (ecma_object_t *lex_env_p, /**< lexical environment
}
else if (is_strict)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
break;
@@ -260,15 +259,14 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
/* is the binding mutable? */
if (property_p->u.named_data_property.writable == ECMA_PROPERTY_WRITABLE)
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (prop_value, true));
return ecma_make_normal_completion_value (ecma_copy_value (prop_value, true));
}
else if (ecma_is_value_empty (prop_value))
{
/* unitialized immutable binding */
if (is_strict)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
}
else
{
@@ -288,7 +286,7 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
{
if (is_strict)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_REFERENCE));
}
else
{
@@ -346,8 +344,7 @@ ecma_op_delete_binding (ecma_object_t *lex_env_p, /**< lexical environment */
}
}
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_simple_value (ret_val));
return ecma_make_simple_completion_value (ret_val);
}
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND:
{
@@ -391,8 +388,7 @@ ecma_op_implicit_this_value (ecma_object_t *lex_env_p) /**< lexical environment
ecma_object_t *binding_obj_p = ecma_get_lex_env_binding_object (lex_env_p);
ecma_ref_object (binding_obj_p);
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_object_value (binding_obj_p));
return ecma_make_normal_completion_value (ecma_make_object_value (binding_obj_p));
}
else
{
+7 -11
View File
@@ -40,7 +40,7 @@ ecma_reject (bool is_throw) /**< Throw flag */
{
if (is_throw)
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
@@ -84,8 +84,7 @@ ecma_op_create_object_object_arg (ecma_value_t value) /**< argument of construct
case ECMA_TYPE_OBJECT:
{
// 1.a
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true));
return ecma_make_normal_completion_value (ecma_copy_value (value, true));
}
case ECMA_TYPE_NUMBER:
case ECMA_TYPE_STRING:
@@ -107,8 +106,7 @@ ecma_op_create_object_object_arg (ecma_value_t value) /**< argument of construct
ecma_object_t *obj_p = ecma_op_create_object_object_noarg ();
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_object_value (obj_p));
return ecma_make_normal_completion_value (ecma_make_object_value (obj_p));
}
}
@@ -144,8 +142,7 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */
// 3.
if (prop_p->type == ECMA_PROPERTY_NAMEDDATA)
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (prop_p->u.named_data_property.value, true));
return ecma_make_normal_completion_value (ecma_copy_value (prop_p->u.named_data_property.value, true));
}
else
{
@@ -168,8 +165,7 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */
0),
ret_value);
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (call_completion.u.value, true));
ret_value = ecma_make_normal_completion_value (ecma_copy_value (call_completion.u.value, true));
ECMA_FINALIZE (call_completion);
@@ -265,7 +261,7 @@ ecma_op_general_object_put (ecma_object_t *obj_p, /**< the object */
if (is_throw)
{
// a.
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
@@ -523,7 +519,7 @@ ecma_op_general_object_delete (ecma_object_t *obj_p, /**< the object */
else if (is_throw)
{
// 4.
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
else
{
+1 -1
View File
@@ -418,7 +418,7 @@ ecma_op_object_has_instance (ecma_object_t *obj_p, /**< the object */
case ECMA_OBJECT_TYPE_STRING:
case ECMA_OBJECT_TYPE_ARGUMENTS:
{
return ecma_make_throw_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
return ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
}
case ECMA_OBJECT_TYPE_FUNCTION: