Adding target counter and depth level to 'break' and 'continue' completion values.

This commit is contained in:
Ruben Ayrapetyan
2014-08-28 22:56:29 +04:00
parent 16cbe0c63b
commit 227c09fb3e
21 changed files with 239 additions and 247 deletions
+2 -2
View File
@@ -201,9 +201,9 @@ ecma_op_array_object_define_own_property (ecma_object_t *obj_p, /**< the array o
}
JERRY_ASSERT (ecma_is_completion_value_normal (completion)
&& completion.value.value_type == ECMA_TYPE_NUMBER);
&& completion.u.value.value_type == ECMA_TYPE_NUMBER);
new_len_num = *(ecma_number_t*) ECMA_GET_POINTER (completion.value.value);
new_len_num = *(ecma_number_t*) ECMA_GET_POINTER (completion.u.value.value);
ecma_free_completion_value (completion);
+8 -10
View File
@@ -226,33 +226,31 @@ ecma_op_abstract_relational_compare (ecma_value_t x, /**< first operand */
px = left_first ? prim_first_converted_value : prim_second_converted_value;
py = left_first ? prim_second_converted_value : prim_first_converted_value;
const bool is_px_string = (px.value.value_type == ECMA_TYPE_STRING);
const bool is_py_string = (py.value.value_type == ECMA_TYPE_STRING);
const bool is_px_string = (px.u.value.value_type == ECMA_TYPE_STRING);
const bool is_py_string = (py.u.value.value_type == ECMA_TYPE_STRING);
if (!(is_px_string && is_py_string))
{ // 3.
// a.
ECMA_TRY_CATCH(nx, ecma_op_to_number (px.value), ret_value);
ECMA_TRY_CATCH(nx, ecma_op_to_number (px.u.value), ret_value);
// b.
ECMA_TRY_CATCH(ny, ecma_op_to_number (py.value), ret_value);
ECMA_TRY_CATCH(ny, ecma_op_to_number (py.u.value), ret_value);
ecma_number_t* num_x_p = (ecma_number_t*)ECMA_GET_POINTER(nx.value.value);
ecma_number_t* num_y_p = (ecma_number_t*)ECMA_GET_POINTER(ny.value.value);
ecma_number_t* num_x_p = (ecma_number_t*)ECMA_GET_POINTER(nx.u.value.value);
ecma_number_t* num_y_p = (ecma_number_t*)ECMA_GET_POINTER(ny.u.value.value);
TODO(/* Implement according to ECMA */);
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),
ECMA_TARGET_ID_RESERVED);
ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE));
}
else
{
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE),
ECMA_TARGET_ID_RESERVED);
ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE));
}
ECMA_FINALIZE(ny);
+6 -10
View File
@@ -168,8 +168,7 @@ ecma_op_to_primitive (ecma_value_t value, /**< ecma-value */
case ECMA_TYPE_STRING:
{
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (value, true));
}
case ECMA_TYPE_OBJECT:
@@ -262,8 +261,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),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (value, true));
}
case ECMA_TYPE_SIMPLE:
case ECMA_TYPE_STRING:
@@ -275,7 +273,7 @@ ecma_op_to_number (ecma_value_t value) /**< ecma-value */
ecma_completion_value_t completion_to_primitive = ecma_op_to_primitive (value, ECMA_PREFERRED_TYPE_NUMBER);
JERRY_ASSERT(ecma_is_completion_value_normal (completion_to_primitive));
ecma_completion_value_t completion_to_number = ecma_op_to_number (completion_to_primitive.value);
ecma_completion_value_t completion_to_number = ecma_op_to_number (completion_to_primitive.u.value);
ecma_free_completion_value (completion_to_primitive);
return completion_to_number;
@@ -305,7 +303,7 @@ ecma_op_to_string (ecma_value_t value) /**< ecma-value */
ecma_op_to_primitive (value, ECMA_PREFERRED_TYPE_STRING),
ret_value);
ret_value = ecma_op_to_string (prim_value.value);
ret_value = ecma_op_to_string (prim_value.u.value);
ECMA_FINALIZE (prim_value);
@@ -375,8 +373,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),
ECMA_TARGET_ID_RESERVED);
ecma_make_string_value (res_p));
} /* ecma_op_to_string */
/**
@@ -403,8 +400,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),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (value, true));
}
}
+7 -9
View File
@@ -423,7 +423,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
ecma_completion_value_t completion = ecma_op_to_object (this_arg_value);
JERRY_ASSERT (ecma_is_completion_value_normal (completion));
this_binding = completion.value;
this_binding = completion.u.value;
}
// 5.
@@ -448,8 +448,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
JERRY_ASSERT(ecma_is_empty_completion_value (completion));
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_RETURN,
ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED),
ECMA_TARGET_ID_RESERVED);
ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED));
}
else
{
@@ -502,9 +501,9 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
// 6.
ecma_object_t *prototype_p;
if (func_obj_prototype_prop_value.value.value_type == ECMA_TYPE_OBJECT)
if (func_obj_prototype_prop_value.u.value.value_type == ECMA_TYPE_OBJECT)
{
prototype_p = ECMA_GET_POINTER (func_obj_prototype_prop_value.value.value);
prototype_p = ECMA_GET_POINTER (func_obj_prototype_prop_value.u.value.value);
ecma_ref_object (prototype_p);
}
else
@@ -535,11 +534,11 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
ecma_value_t obj_value;
// 9.
if (call_completion.value.value_type == ECMA_TYPE_OBJECT)
if (call_completion.u.value.value_type == ECMA_TYPE_OBJECT)
{
ecma_deref_object (obj_p);
obj_value = ecma_copy_value (call_completion.value, true);
obj_value = ecma_copy_value (call_completion.u.value, true);
}
else
{
@@ -548,8 +547,7 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
}
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
obj_value,
ECMA_TARGET_ID_RESERVED);
obj_value);
ECMA_FINALIZE (call_completion);
ECMA_FINALIZE (func_obj_prototype_prop_value);
+2 -2
View File
@@ -81,7 +81,7 @@ ecma_op_get_value (ecma_reference_t ref) /**< ECMA-reference */
ECMA_TRY_CATCH (obj_base, ecma_op_to_object (base), ret_value);
ecma_object_t *obj_p = ECMA_GET_POINTER (obj_base.value.value);
ecma_object_t *obj_p = ECMA_GET_POINTER (obj_base.u.value.value);
JERRY_ASSERT (obj_p != NULL && !obj_p->is_lexical_environment);
JERRY_ASSERT (obj_p->u.object.type == ECMA_OBJECT_TYPE_GENERAL);
@@ -189,7 +189,7 @@ ecma_op_put_value (ecma_reference_t ref, /**< ECMA-reference */
// sub_1.
ECMA_TRY_CATCH (obj_base, ecma_op_to_object (base), ret_value);
ecma_object_t *obj_p = ECMA_GET_POINTER (obj_base.value.value);
ecma_object_t *obj_p = ECMA_GET_POINTER (obj_base.u.value.value);
JERRY_ASSERT (obj_p != NULL && !obj_p->is_lexical_environment);
JERRY_ASSERT (obj_p->u.object.type == ECMA_OBJECT_TYPE_GENERAL);
+4 -8
View File
@@ -95,8 +95,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),
ECMA_TARGET_ID_RESERVED);
ecma_make_simple_value (has_binding));
} /* ecma_op_has_binding */
/**
@@ -262,8 +261,7 @@ ecma_op_get_binding_value (ecma_object_t *lex_env_p, /**< lexical environment */
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),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (prop_value, true));
}
else if (ecma_is_value_empty (prop_value))
{
@@ -349,8 +347,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),
ECMA_TARGET_ID_RESERVED);
ecma_make_simple_value (ret_val));
}
case ECMA_LEXICAL_ENVIRONMENT_OBJECTBOUND:
{
@@ -395,8 +392,7 @@ ecma_op_implicit_this_value (ecma_object_t *lex_env_p) /**< lexical environment
ecma_ref_object (binding_obj_p);
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_object_value (binding_obj_p),
ECMA_TARGET_ID_RESERVED);
ecma_make_object_value (binding_obj_p));
}
else
{
@@ -362,7 +362,7 @@ ecma_op_arguments_object_get_own_property (ecma_object_t *obj_p, /**< the object
ecma_completion_value_t completion = ecma_arguments_get_mapped_arg_value (map_p, mapped_prop_p);
ecma_free_value (desc_p->u.named_data_property.value, false);
desc_p->u.named_data_property.value = ecma_copy_value (completion.value, false);
desc_p->u.named_data_property.value = ecma_copy_value (completion.u.value, false);
ecma_free_completion_value (completion);
}
+4 -8
View File
@@ -85,8 +85,7 @@ ecma_op_create_object_object_arg (ecma_value_t value) /**< argument of construct
{
// 1.a
return ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (value, true),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (value, true));
}
case ECMA_TYPE_NUMBER:
case ECMA_TYPE_STRING:
@@ -109,8 +108,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),
ECMA_TARGET_ID_RESERVED);
ecma_make_object_value (obj_p));
}
}
@@ -147,8 +145,7 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */
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),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (prop_p->u.named_data_property.value, true));
}
else
{
@@ -172,8 +169,7 @@ ecma_op_general_object_get (ecma_object_t *obj_p, /**< the object */
ret_value);
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_copy_value (call_completion.value, true),
ECMA_TARGET_ID_RESERVED);
ecma_copy_value (call_completion.u.value, true));
ECMA_FINALIZE (call_completion);