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:
Zoltan Herczeg
2016-02-16 04:06:18 -08:00
committed by László Langó
parent c25d8617a5
commit b2426a7a94
96 changed files with 2691 additions and 3272 deletions
+20 -20
View File
@@ -37,15 +37,15 @@
* rightNum = ToNumber (rightValue);
* result = leftNum ArithmeticOp rightNum;
*
* @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
do_number_arithmetic (number_arithmetic_op op, /**< number arithmetic operation */
ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_OP_TO_NUMBER_TRY_CATCH (num_left, left_value, ret_value);
ECMA_OP_TO_NUMBER_TRY_CATCH (num_right, right_value, ret_value);
@@ -81,7 +81,7 @@ do_number_arithmetic (number_arithmetic_op op, /**< number arithmetic operation
}
}
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_number_value (res_p));
ret_value = ecma_make_number_value (res_p);
ECMA_OP_TO_NUMBER_FINALIZE (num_right);
ECMA_OP_TO_NUMBER_FINALIZE (num_left);
@@ -94,14 +94,14 @@ do_number_arithmetic (number_arithmetic_op op, /**< number arithmetic operation
*
* See also: ECMA-262 v5, 11.6.1
*
* @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_addition (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (prim_left_value,
ecma_op_to_primitive (left_value,
@@ -123,7 +123,7 @@ opfunc_addition (ecma_value_t left_value, /**< left value */
ecma_string_t *concat_str_p = ecma_concat_ecma_strings (string1_p, string2_p);
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_string_value (concat_str_p));
ret_value = ecma_make_string_value (concat_str_p);
ECMA_FINALIZE (str_right_value);
ECMA_FINALIZE (str_left_value);
@@ -146,13 +146,13 @@ opfunc_addition (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.4, 11.4.6
*
* @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_unary_plus (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_OP_TO_NUMBER_TRY_CATCH (num_var_value,
left_value,
@@ -161,7 +161,7 @@ opfunc_unary_plus (ecma_value_t left_value) /**< left value */
ecma_number_t *tmp_p = ecma_alloc_number ();
*tmp_p = num_var_value;
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_number_value (tmp_p));
ret_value = ecma_make_number_value (tmp_p);
ECMA_OP_TO_NUMBER_FINALIZE (num_var_value);
@@ -173,13 +173,13 @@ opfunc_unary_plus (ecma_value_t left_value) /**< left value */
*
* See also: ECMA-262 v5, 11.4, 11.4.7
*
* @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_unary_minus (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_OP_TO_NUMBER_TRY_CATCH (num_var_value,
left_value,
@@ -188,7 +188,7 @@ opfunc_unary_minus (ecma_value_t left_value) /**< left value */
ecma_number_t *tmp_p = ecma_alloc_number ();
*tmp_p = ecma_number_negate (num_var_value);
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ecma_make_number_value (tmp_p));
ret_value = ecma_make_number_value (tmp_p);
ECMA_OP_TO_NUMBER_FINALIZE (num_var_value);
+5 -5
View File
@@ -35,15 +35,15 @@
* rightNum = ToNumber (rightValue);
* result = leftNum BitwiseLogicOp rightNum;
*
* @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
do_number_bitwise_logic (number_bitwise_logic_op op, /**< number bitwise logic operation */
ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_OP_TO_NUMBER_TRY_CATCH (num_left, left_value, ret_value);
ECMA_OP_TO_NUMBER_TRY_CATCH (num_right, right_value, ret_value);
@@ -94,7 +94,7 @@ do_number_bitwise_logic (number_bitwise_logic_op op, /**< number bitwise logic o
}
}
ret_value = ecma_make_normal_completion_value (ecma_make_number_value (res_p));
ret_value = ecma_make_number_value (res_p);
ECMA_OP_TO_NUMBER_FINALIZE (num_right);
ECMA_OP_TO_NUMBER_FINALIZE (num_left);
+21 -21
View File
@@ -37,14 +37,14 @@
*
* See also: ECMA-262 v5, 11.9.1
*
* @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_equal_value (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_equality_compare (left_value,
@@ -53,7 +53,7 @@ opfunc_equal_value (ecma_value_t left_value, /**< left value */
JERRY_ASSERT (ecma_is_value_boolean (compare_result));
ret_value = ecma_make_normal_completion_value (compare_result);
ret_value = compare_result;
ECMA_FINALIZE (compare_result);
@@ -65,14 +65,14 @@ opfunc_equal_value (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.9.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_not_equal_value (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_equality_compare (left_value, right_value),
@@ -82,8 +82,8 @@ opfunc_not_equal_value (ecma_value_t left_value, /**< left value */
bool is_equal = ecma_is_value_true (compare_result);
ret_value = ecma_make_normal_completion_value (ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
: ECMA_SIMPLE_VALUE_TRUE));
ret_value = ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
: ECMA_SIMPLE_VALUE_TRUE);
ECMA_FINALIZE (compare_result);
@@ -95,17 +95,17 @@ opfunc_not_equal_value (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.9.4
*
* @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_equal_value_type (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
return ecma_make_normal_completion_value (ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE));
return ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE
: ECMA_SIMPLE_VALUE_FALSE);
} /* opfunc_equal_value_type */
/**
@@ -113,17 +113,17 @@ opfunc_equal_value_type (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.9.5
*
* @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_not_equal_value_type (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right value */
{
bool is_equal = ecma_op_strict_equality_compare (left_value, right_value);
return ecma_make_normal_completion_value (ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
: ECMA_SIMPLE_VALUE_TRUE));
return ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE
: ECMA_SIMPLE_VALUE_TRUE);
} /* opfunc_not_equal_value_type */
/**
+39 -58
View File
@@ -34,34 +34,30 @@
*
* See also: ECMA-262 v5, 11.8.1
*
* @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_less_than (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_relational_compare (left_value, right_value, true),
ret_value);
ecma_simple_value_t res;
if (ecma_is_value_undefined (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
JERRY_ASSERT (ecma_is_value_boolean (compare_result));
res = (ecma_is_value_true (compare_result) ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
ret_value = compare_result;
}
ret_value = ecma_make_simple_completion_value (res);
ECMA_FINALIZE (compare_result);
return ret_value;
@@ -72,34 +68,30 @@ opfunc_less_than (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.8.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_greater_than (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_relational_compare (right_value, left_value, false),
ret_value);
ecma_simple_value_t res;
if (ecma_is_value_undefined (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
JERRY_ASSERT (ecma_is_value_boolean (compare_result));
res = (ecma_is_value_true (compare_result) ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE);
ret_value = compare_result;
}
ret_value = ecma_make_simple_completion_value (res);
ECMA_FINALIZE (compare_result);
return ret_value;
@@ -110,24 +102,22 @@ opfunc_greater_than (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.8.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_less_or_equal_than (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_relational_compare (right_value, left_value, false),
ret_value);
ecma_simple_value_t res;
if (ecma_is_value_undefined (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
@@ -135,16 +125,14 @@ opfunc_less_or_equal_than (ecma_value_t left_value, /**< left value */
if (ecma_is_value_true (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
res = ECMA_SIMPLE_VALUE_TRUE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
}
ret_value = ecma_make_simple_completion_value (res);
ECMA_FINALIZE (compare_result);
return ret_value;
@@ -155,24 +143,22 @@ opfunc_less_or_equal_than (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.8.4
*
* @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_greater_or_equal_than (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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_TRY_CATCH (compare_result,
ecma_op_abstract_relational_compare (left_value, right_value, true),
ret_value);
ecma_simple_value_t res;
if (ecma_is_value_undefined (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
@@ -180,16 +166,14 @@ opfunc_greater_or_equal_than (ecma_value_t left_value, /**< left value */
if (ecma_is_value_true (compare_result))
{
res = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
else
{
res = ECMA_SIMPLE_VALUE_TRUE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
}
ret_value = ecma_make_simple_completion_value (res);
ECMA_FINALIZE (compare_result);
return ret_value;
@@ -200,18 +184,18 @@ opfunc_greater_or_equal_than (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.8.6
*
* @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_instanceof (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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);
if (!ecma_is_value_object (right_value))
{
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
ret_value = ecma_raise_type_error ("");
}
else
{
@@ -221,7 +205,7 @@ opfunc_instanceof (ecma_value_t left_value, /**< left value */
ecma_op_object_has_instance (right_value_obj_p, left_value),
ret_value);
ret_value = ecma_make_normal_completion_value (is_instance_of);
ret_value = is_instance_of;
ECMA_FINALIZE (is_instance_of);
}
@@ -234,38 +218,35 @@ opfunc_instanceof (ecma_value_t left_value, /**< left value */
*
* See also: ECMA-262 v5, 11.8.7
*
* @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_in (ecma_value_t left_value, /**< left value */
ecma_value_t right_value) /**< right 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);
if (!ecma_is_value_object (right_value))
{
ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE));
ret_value = ecma_raise_type_error ("");
}
else
{
ECMA_TRY_CATCH (str_left_value, ecma_op_to_string (left_value), ret_value);
ecma_simple_value_t is_in = ECMA_SIMPLE_VALUE_UNDEFINED;
ecma_string_t *left_value_prop_name_p = ecma_get_string_from_value (str_left_value);
ecma_object_t *right_value_obj_p = ecma_get_object_from_value (right_value);
if (ecma_op_object_get_property (right_value_obj_p, left_value_prop_name_p) != NULL)
{
is_in = ECMA_SIMPLE_VALUE_TRUE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_TRUE);
}
else
{
is_in = ECMA_SIMPLE_VALUE_FALSE;
ret_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_FALSE);
}
ret_value = ecma_make_simple_completion_value (is_in);
ECMA_FINALIZE (str_left_value);
}
+50 -53
View File
@@ -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 */
+22 -22
View File
@@ -53,75 +53,75 @@ typedef enum
NUMBER_BITWISE_NOT, /**< bitwise NOT calculation */
} number_bitwise_logic_op;
ecma_completion_value_t
ecma_value_t
vm_var_decl (vm_frame_ctx_t *, ecma_string_t *);
ecma_completion_value_t
ecma_value_t
opfunc_call_n (ecma_value_t, ecma_value_t,
const ecma_value_t *, ecma_length_t);
ecma_completion_value_t
ecma_value_t
opfunc_construct_n (ecma_value_t,
const ecma_value_t *, ecma_length_t);
ecma_completion_value_t
ecma_value_t
opfunc_equal_value (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_not_equal_value (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_equal_value_type (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_not_equal_value_type (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
do_number_arithmetic (number_arithmetic_op, ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_unary_plus (ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_unary_minus (ecma_value_t);
ecma_completion_value_t
ecma_value_t
do_number_bitwise_logic (number_bitwise_logic_op, ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_addition (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_less_than (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_greater_than (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_less_or_equal_than (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_greater_or_equal_than (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_in (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_instanceof (ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_logical_not (ecma_value_t);
ecma_completion_value_t
ecma_value_t
opfunc_typeof (ecma_value_t);
void
opfunc_set_accessor (bool, ecma_value_t, ecma_value_t, ecma_value_t);
ecma_completion_value_t
ecma_value_t
vm_op_delete_prop (ecma_value_t, ecma_value_t, bool);
ecma_completion_value_t
ecma_value_t
vm_op_delete_var (lit_cpointer_t, ecma_object_t *, bool);
ecma_collection_header_t *
+3 -3
View File
@@ -41,7 +41,7 @@ vm_stack_context_abort (vm_frame_ctx_t *frame_ctx_p, /**< frame context */
case VM_CONTEXT_FINALLY_THROW:
case VM_CONTEXT_FINALLY_RETURN:
{
ecma_free_value (vm_stack_top_p[-2], true);
ecma_free_value (vm_stack_top_p[-2]);
VM_MINUS_EQUAL_U16 (frame_ctx_p->context_depth, PARSER_TRY_CONTEXT_STACK_ALLOCATION);
vm_stack_top_p -= PARSER_TRY_CONTEXT_STACK_ALLOCATION;
@@ -76,13 +76,13 @@ vm_stack_context_abort (vm_frame_ctx_t *frame_ctx_p, /**< frame context */
current);
lit_utf8_byte_t *data_ptr = chunk_p->data;
ecma_free_value (*(ecma_value_t *) data_ptr, true);
ecma_free_value (*(ecma_value_t *) data_ptr);
current = chunk_p->next_chunk_cp;
ecma_dealloc_collection_chunk (chunk_p);
}
ecma_free_value (vm_stack_top_p[-3], true);
ecma_free_value (vm_stack_top_p[-3]);
VM_MINUS_EQUAL_U16 (frame_ctx_p->context_depth, PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION);
vm_stack_top_p -= PARSER_FOR_IN_CONTEXT_STACK_ALLOCATION;
+1 -1
View File
@@ -28,7 +28,7 @@
*/
/**
* Number of ecma-values inlined into stack frame
* Number of ecma values inlined into stack frame
*/
#define VM_STACK_FRAME_INLINED_VALUES_NUMBER CONFIG_VM_STACK_FRAME_INLINED_VALUES_NUMBER
+176 -204
View File
File diff suppressed because it is too large Load Diff
+5 -8
View File
@@ -187,16 +187,13 @@ typedef enum
extern void vm_init (ecma_compiled_code_t *, bool);
extern void vm_finalize (void);
extern jerry_completion_code_t vm_run_global (void);
extern ecma_completion_value_t vm_run_eval (ecma_compiled_code_t *, bool);
extern ecma_value_t vm_run_eval (ecma_compiled_code_t *, bool);
extern ecma_completion_value_t vm_loop (vm_frame_ctx_t *);
extern ecma_value_t vm_loop (vm_frame_ctx_t *);
extern ecma_completion_value_t vm_run (const ecma_compiled_code_t *,
ecma_value_t,
ecma_object_t *,
bool,
const ecma_value_t *,
ecma_length_t);
extern ecma_value_t vm_run (const ecma_compiled_code_t *, ecma_value_t,
ecma_object_t *, bool, const ecma_value_t *,
ecma_length_t);
extern bool vm_is_strict_mode (void);
extern bool vm_is_direct_eval_form_call (void);