Adding target counter and depth level to 'break' and 'continue' completion values.
This commit is contained in:
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user