diff --git a/src/libcoreint/opcodes-agnostic.c b/src/libcoreint/opcodes-agnostic.c index 9aba7c133..c00f14e48 100644 --- a/src/libcoreint/opcodes-agnostic.c +++ b/src/libcoreint/opcodes-agnostic.c @@ -33,12 +33,9 @@ opfunc_is_true_jmp_down (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (cond_value, - get_variable_value (int_data, cond_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (cond_value, get_variable_value (int_data, cond_var_idx, false), ret_value); - ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (cond_value); + ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (ecma_get_completion_value_value (cond_value)); JERRY_ASSERT (ecma_is_completion_value_normal (to_bool_completion)); if (ecma_is_value_true (ecma_get_completion_value_value (to_bool_completion))) @@ -53,7 +50,7 @@ opfunc_is_true_jmp_down (opcode_t opdata, /**< operation data */ ret_value = ecma_make_empty_completion_value (); - ECMA_FINALIZE_STACKED (cond_value, int_data->stack_frame_p); + ECMA_FINALIZE (cond_value); return ret_value; } @@ -69,12 +66,9 @@ opfunc_is_true_jmp_up (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (cond_value, - get_variable_value (int_data, cond_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (cond_value, get_variable_value (int_data, cond_var_idx, false), ret_value); - ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (cond_value); + ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (ecma_get_completion_value_value (cond_value)); JERRY_ASSERT (ecma_is_completion_value_normal (to_bool_completion)); if (ecma_is_value_true (ecma_get_completion_value_value (to_bool_completion))) @@ -89,7 +83,7 @@ opfunc_is_true_jmp_up (opcode_t opdata, /**< operation data */ ret_value = ecma_make_empty_completion_value (); - ECMA_FINALIZE_STACKED (cond_value, int_data->stack_frame_p); + ECMA_FINALIZE (cond_value); return ret_value; } @@ -111,12 +105,9 @@ opfunc_is_false_jmp_down (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (cond_value, - get_variable_value (int_data, cond_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (cond_value, get_variable_value (int_data, cond_var_idx, false), ret_value); - ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (cond_value); + ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (ecma_get_completion_value_value (cond_value)); JERRY_ASSERT (ecma_is_completion_value_normal (to_bool_completion)); if (!ecma_is_value_true (ecma_get_completion_value_value (to_bool_completion))) @@ -131,7 +122,7 @@ opfunc_is_false_jmp_down (opcode_t opdata, /**< operation data */ ret_value = ecma_make_empty_completion_value (); - ECMA_FINALIZE_STACKED (cond_value, int_data->stack_frame_p); + ECMA_FINALIZE (cond_value); return ret_value; } @@ -147,12 +138,9 @@ opfunc_is_false_jmp_up (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (cond_value, - get_variable_value (int_data, cond_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (cond_value, get_variable_value (int_data, cond_var_idx, false), ret_value); - ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (cond_value); + ecma_completion_value_t to_bool_completion = ecma_op_to_boolean (ecma_get_completion_value_value (cond_value)); JERRY_ASSERT (ecma_is_completion_value_normal (to_bool_completion)); if (!ecma_is_value_true (ecma_get_completion_value_value (to_bool_completion))) @@ -167,7 +155,7 @@ opfunc_is_false_jmp_up (opcode_t opdata, /**< operation data */ ret_value = ecma_make_empty_completion_value (); - ECMA_FINALIZE_STACKED (cond_value, int_data->stack_frame_p); + ECMA_FINALIZE (cond_value); return ret_value; } diff --git a/src/libcoreint/opcodes-ecma-arithmetics.c b/src/libcoreint/opcodes-ecma-arithmetics.c index f0bbf2d41..5aa546f66 100644 --- a/src/libcoreint/opcodes-ecma-arithmetics.c +++ b/src/libcoreint/opcodes-ecma-arithmetics.c @@ -112,20 +112,14 @@ opfunc_addition (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (prim_left_value, - ecma_op_to_primitive (left_value, + ecma_op_to_primitive (ecma_get_completion_value_value (left_value), ECMA_PREFERRED_TYPE_NO), ret_value); ECMA_TRY_CATCH (prim_right_value, - ecma_op_to_primitive (right_value, + ecma_op_to_primitive (ecma_get_completion_value_value (right_value), ECMA_PREFERRED_TYPE_NO), ret_value); @@ -158,8 +152,8 @@ opfunc_addition (opcode_t opdata, /**< operation data */ ECMA_FINALIZE (prim_right_value); ECMA_FINALIZE (prim_left_value); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -184,23 +178,17 @@ opfunc_substraction (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_arithmetic (int_data, dst_var_idx, number_arithmetic_substraction, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -225,23 +213,17 @@ opfunc_multiplication (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_arithmetic (int_data, dst_var_idx, number_arithmetic_multiplication, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -266,23 +248,17 @@ opfunc_division (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_arithmetic (int_data, dst_var_idx, number_arithmetic_division, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -307,23 +283,17 @@ opfunc_remainder (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_arithmetic (int_data, dst_var_idx, number_arithmetic_remainder, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -347,12 +317,9 @@ opfunc_unary_plus (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); - ECMA_TRY_CATCH_STACKED (var_value, - get_variable_value (int_data, var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (var_value, get_variable_value (int_data, var_idx, false), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (num_var_value, - var_value, + ecma_get_completion_value_value (var_value), ret_value); ecma_number_t *tmp_p = int_data->tmp_num_p; @@ -363,7 +330,7 @@ opfunc_unary_plus (opcode_t opdata, /**< operation data */ ecma_make_number_value (tmp_p)); ECMA_OP_TO_NUMBER_FINALIZE (num_var_value); - ECMA_FINALIZE_STACKED (var_value, int_data->stack_frame_p); + ECMA_FINALIZE (var_value); int_data->pos++; @@ -387,12 +354,9 @@ opfunc_unary_minus (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); - ECMA_TRY_CATCH_STACKED (var_value, - get_variable_value (int_data, var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (var_value, get_variable_value (int_data, var_idx, false), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (num_var_value, - var_value, + ecma_get_completion_value_value (var_value), ret_value); ecma_number_t *tmp_p = int_data->tmp_num_p; @@ -403,7 +367,7 @@ opfunc_unary_minus (opcode_t opdata, /**< operation data */ ecma_make_number_value (tmp_p)); ECMA_OP_TO_NUMBER_FINALIZE (num_var_value); - ECMA_FINALIZE_STACKED (var_value, int_data->stack_frame_p); + ECMA_FINALIZE (var_value); int_data->pos++; diff --git a/src/libcoreint/opcodes-ecma-bitwise.c b/src/libcoreint/opcodes-ecma-bitwise.c index f808fb1c5..7d2c51c15 100644 --- a/src/libcoreint/opcodes-ecma-bitwise.c +++ b/src/libcoreint/opcodes-ecma-bitwise.c @@ -128,23 +128,17 @@ opfunc_b_and (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_logic_and, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -169,23 +163,17 @@ opfunc_b_or (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_logic_or, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -210,23 +198,17 @@ opfunc_b_xor (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_logic_xor, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -251,23 +233,17 @@ opfunc_b_shift_left (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_shift_left, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -292,23 +268,17 @@ opfunc_b_shift_right (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_shift_right, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -333,23 +303,17 @@ opfunc_b_shift_uright (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_shift_uright, - left_value, - right_value); + ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -373,18 +337,15 @@ opfunc_b_not (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ret_value = do_number_bitwise_logic (int_data, dst_var_idx, number_bitwise_not, - right_value, - right_value); + ecma_get_completion_value_value (right_value), + ecma_get_completion_value_value (right_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); int_data->pos++; diff --git a/src/libcoreint/opcodes-ecma-equality.c b/src/libcoreint/opcodes-ecma-equality.c index 9002d5aaa..72650c3b9 100644 --- a/src/libcoreint/opcodes-ecma-equality.c +++ b/src/libcoreint/opcodes-ecma-equality.c @@ -34,17 +34,11 @@ opfunc_equal_value (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_equality_compare (left_value, - right_value), + ecma_op_abstract_equality_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)), ret_value); JERRY_ASSERT (ecma_is_completion_value_normal_true (compare_result) @@ -54,8 +48,8 @@ opfunc_equal_value (opcode_t opdata, /**< operation data */ ecma_get_completion_value_value (compare_result)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -80,17 +74,11 @@ opfunc_not_equal_value (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_equality_compare (left_value, - right_value), + ecma_op_abstract_equality_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)), ret_value); JERRY_ASSERT (ecma_is_completion_value_normal_true (compare_result) @@ -103,8 +91,8 @@ opfunc_not_equal_value (opcode_t opdata, /**< operation data */ : ECMA_SIMPLE_VALUE_TRUE)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -129,24 +117,18 @@ opfunc_equal_value_type (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - bool is_equal = ecma_op_strict_equality_compare (left_value, - right_value); + bool is_equal = ecma_op_strict_equality_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_TRUE : ECMA_SIMPLE_VALUE_FALSE)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -171,25 +153,19 @@ opfunc_not_equal_value_type (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - bool is_equal = ecma_op_strict_equality_compare (left_value, - right_value); + bool is_equal = ecma_op_strict_equality_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value)); ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (is_equal ? ECMA_SIMPLE_VALUE_FALSE : ECMA_SIMPLE_VALUE_TRUE)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; diff --git a/src/libcoreint/opcodes-ecma-relational.c b/src/libcoreint/opcodes-ecma-relational.c index 7d19be7a8..c4163b65b 100644 --- a/src/libcoreint/opcodes-ecma-relational.c +++ b/src/libcoreint/opcodes-ecma-relational.c @@ -34,17 +34,11 @@ opfunc_less_than (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_relational_compare (left_value, - right_value, + ecma_op_abstract_relational_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value), true), ret_value); @@ -64,8 +58,8 @@ opfunc_less_than (opcode_t opdata, /**< operation data */ ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (res)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -90,17 +84,11 @@ opfunc_greater_than (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_relational_compare (right_value, - left_value, + ecma_op_abstract_relational_compare (ecma_get_completion_value_value (right_value), + ecma_get_completion_value_value (left_value), false), ret_value); @@ -120,8 +108,8 @@ opfunc_greater_than (opcode_t opdata, /**< operation data */ ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (res)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -146,17 +134,11 @@ opfunc_less_or_equal_than (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_relational_compare (right_value, - left_value, + ecma_op_abstract_relational_compare (ecma_get_completion_value_value (right_value), + ecma_get_completion_value_value (left_value), false), ret_value); @@ -183,8 +165,8 @@ opfunc_less_or_equal_than (opcode_t opdata, /**< operation data */ ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (res)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -209,17 +191,11 @@ opfunc_greater_or_equal_than (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ECMA_TRY_CATCH (compare_result, - ecma_op_abstract_relational_compare (left_value, - right_value, + ecma_op_abstract_relational_compare (ecma_get_completion_value_value (left_value), + ecma_get_completion_value_value (right_value), true), ret_value); @@ -246,8 +222,8 @@ opfunc_greater_or_equal_than (opcode_t opdata, /**< operation data */ ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, ecma_make_simple_value (res)); ECMA_FINALIZE (compare_result); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -272,26 +248,20 @@ opfunc_instanceof (opcode_t opdata __unused, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - if (!ecma_is_value_object (right_value)) + if (!ecma_is_value_object (ecma_get_completion_value_value (right_value))) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } else { - ecma_object_t *right_value_obj_p = ecma_get_object_from_value (right_value); + ecma_object_t *right_value_obj_p = ecma_get_object_from_completion_value (right_value); ECMA_TRY_CATCH (is_instance_of, ecma_op_object_has_instance (right_value_obj_p, - left_value), + ecma_get_completion_value_value (left_value)), ret_value); ret_value = set_variable_value (int_data, int_data->pos, dst_idx, ecma_get_completion_value_value (is_instance_of)); @@ -299,8 +269,8 @@ opfunc_instanceof (opcode_t opdata __unused, /**< operation data */ ECMA_FINALIZE (is_instance_of); } - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; @@ -325,26 +295,20 @@ opfunc_in (opcode_t opdata __unused, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (left_value, - get_variable_value (int_data, left_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (left_value, get_variable_value (int_data, left_var_idx, false), ret_value); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); - if (!ecma_is_value_object (right_value)) + if (!ecma_is_value_object (ecma_get_completion_value_value (right_value))) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } else { - ECMA_TRY_CATCH (str_left_value, ecma_op_to_string (left_value), ret_value); + ECMA_TRY_CATCH (str_left_value, ecma_op_to_string (ecma_get_completion_value_value (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_completion_value (str_left_value); - ecma_object_t *right_value_obj_p = ecma_get_object_from_value (right_value); + ecma_object_t *right_value_obj_p = ecma_get_object_from_completion_value (right_value); if (ecma_op_object_get_property (right_value_obj_p, left_value_prop_name_p) != NULL) { @@ -362,8 +326,8 @@ opfunc_in (opcode_t opdata __unused, /**< operation data */ ECMA_FINALIZE (str_left_value); } - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (left_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); + ECMA_FINALIZE (left_value); int_data->pos++; diff --git a/src/libcoreint/opcodes-ecma-support.h b/src/libcoreint/opcodes-ecma-support.h index 2b6bd1703..30c920425 100644 --- a/src/libcoreint/opcodes-ecma-support.h +++ b/src/libcoreint/opcodes-ecma-support.h @@ -34,7 +34,7 @@ #include "deserializer.h" bool is_reg_variable (int_data_t *int_data, idx_t var_idx); -ecma_completion_type_t get_variable_value (int_data_t *, idx_t, bool); +ecma_completion_value_t get_variable_value (int_data_t *, idx_t, bool); ecma_completion_value_t set_variable_value (int_data_t *, opcode_counter_t, idx_t, ecma_value_t); ecma_completion_value_t fill_varg_list (int_data_t *int_data, ecma_length_t args_number, diff --git a/src/libcoreint/opcodes-helpers-variables.c b/src/libcoreint/opcodes-helpers-variables.c index 2a7a0296f..335faef52 100644 --- a/src/libcoreint/opcodes-helpers-variables.c +++ b/src/libcoreint/opcodes-helpers-variables.c @@ -68,15 +68,16 @@ is_reg_variable (int_data_t *int_data, /**< interpreter context */ /** * Get variable's value. * - * @return /stack convention/ + * @return completion value + * Returned value must be freed with ecma_free_completion_value */ -ecma_completion_type_t +ecma_completion_value_t get_variable_value (int_data_t *int_data, /**< interpreter context */ idx_t var_idx, /**< variable identifier */ bool do_eval_or_arguments_check) /** run 'strict eval or arguments reference' check See also: do_strict_eval_arguments_check */ { - ecma_completion_type_t completion_type; + ecma_completion_value_t ret_value; if (is_reg_variable (int_data, var_idx)) { @@ -84,10 +85,7 @@ get_variable_value (int_data_t *int_data, /**< interpreter context */ JERRY_ASSERT (!ecma_is_value_empty (reg_value)); - ecma_stack_push_value (int_data->stack_frame_p, - ecma_copy_value (reg_value, true)); - - completion_type = ECMA_COMPLETION_TYPE_NORMAL; + ret_value = ecma_make_normal_completion_value (ecma_copy_value (reg_value, true)); } else { @@ -108,19 +106,14 @@ get_variable_value (int_data_t *int_data, /**< interpreter context */ #endif /* !JERRY_NDEBUG */ } - ecma_completion_value_t completion = ecma_op_get_value_lex_env_base (ref_base_lex_env_p, - &var_name_string, - int_data->is_strict); - - ecma_stack_push_value (int_data->stack_frame_p, - ecma_get_completion_value_value (completion)); + ret_value = ecma_op_get_value_lex_env_base (ref_base_lex_env_p, + &var_name_string, + int_data->is_strict); ecma_check_that_ecma_string_need_not_be_freed (&var_name_string); - - completion_type = ecma_get_completion_value_type (completion); } - return completion_type; + return ret_value; } /* get_variable_value */ /** diff --git a/src/libcoreint/opcodes-varg.c b/src/libcoreint/opcodes-varg.c index 5b50dac08..6f0c78366 100644 --- a/src/libcoreint/opcodes-varg.c +++ b/src/libcoreint/opcodes-varg.c @@ -31,7 +31,7 @@ fill_varg_list (int_data_t *int_data, /**< interpreter context */ ecma_length_t args_number, /**< number of arguments */ ecma_value_t arg_values[], /**< out: arguments' values */ ecma_length_t *out_arg_number_p) /**< out: number of arguments - successfully read */ + successfully read */ { ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); @@ -50,14 +50,16 @@ fill_varg_list (int_data_t *int_data, /**< interpreter context */ const idx_t varg_var_idx = next_opcode.data.meta.data_1; - ECMA_TRY_CATCH_STACKED (arg, - get_variable_value (int_data, varg_var_idx, false), - ret_value, - int_data->stack_frame_p); + ecma_completion_value_t get_arg_completion = get_variable_value (int_data, varg_var_idx, false); - arg_values[arg_index] = ecma_copy_value (arg, true); - - ECMA_FINALIZE_STACKED (arg, int_data->stack_frame_p); + if (ecma_is_completion_value_normal (get_arg_completion)) + { + arg_values[arg_index] = ecma_get_completion_value_value (get_arg_completion); + } + else + { + ret_value = get_arg_completion; + } } else { diff --git a/src/libcoreint/opcodes.c b/src/libcoreint/opcodes.c index 3c3d55c8e..763a7ba97 100644 --- a/src/libcoreint/opcodes.c +++ b/src/libcoreint/opcodes.c @@ -110,19 +110,18 @@ opfunc_assignment (opcode_t opdata, /**< operation data */ } else if (type_value_right == OPCODE_ARG_TYPE_VARIABLE) { - ECMA_TRY_CATCH_STACKED (get_value_completion, - get_variable_value (int_data, - src_val_descr, - false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (get_value_completion, + get_variable_value (int_data, + src_val_descr, + false), + ret_value); ret_value = set_variable_value (int_data, int_data->pos, dst_var_idx, - get_value_completion); + ecma_get_completion_value_value (get_value_completion)); - ECMA_FINALIZE_STACKED (get_value_completion, int_data->stack_frame_p); + ECMA_FINALIZE (get_value_completion); } else if (type_value_right == OPCODE_ARG_TYPE_NUMBER) { @@ -201,12 +200,9 @@ opfunc_pre_incr (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); // 1., 2., 3. - ECMA_TRY_CATCH_STACKED (old_value, - get_variable_value (int_data, incr_var_idx, true), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (old_value, get_variable_value (int_data, incr_var_idx, true), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (old_num, - old_value, + ecma_get_completion_value_value (old_value), ret_value); // 4. @@ -228,7 +224,7 @@ opfunc_pre_incr (opcode_t opdata, /**< operation data */ JERRY_ASSERT (ecma_is_completion_value_empty (reg_assignment_res)); ECMA_OP_TO_NUMBER_FINALIZE (old_num); - ECMA_FINALIZE_STACKED (old_value, int_data->stack_frame_p); + ECMA_FINALIZE (old_value); int_data->pos++; @@ -253,12 +249,9 @@ opfunc_pre_decr (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); // 1., 2., 3. - ECMA_TRY_CATCH_STACKED (old_value, - get_variable_value (int_data, decr_var_idx, true), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (old_value, get_variable_value (int_data, decr_var_idx, true), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (old_num, - old_value, + ecma_get_completion_value_value (old_value), ret_value); // 4. @@ -280,7 +273,7 @@ opfunc_pre_decr (opcode_t opdata, /**< operation data */ JERRY_ASSERT (ecma_is_completion_value_empty (reg_assignment_res)); ECMA_OP_TO_NUMBER_FINALIZE (old_num); - ECMA_FINALIZE_STACKED (old_value, int_data->stack_frame_p); + ECMA_FINALIZE (old_value); int_data->pos++; @@ -305,12 +298,9 @@ opfunc_post_incr (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); // 1., 2., 3. - ECMA_TRY_CATCH_STACKED (old_value, - get_variable_value (int_data, incr_var_idx, true), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (old_value, get_variable_value (int_data, incr_var_idx, true), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (old_num, - old_value, + ecma_get_completion_value_value (old_value), ret_value); // 4. @@ -333,7 +323,7 @@ opfunc_post_incr (opcode_t opdata, /**< operation data */ JERRY_ASSERT (ecma_is_completion_value_empty (reg_assignment_res)); ECMA_OP_TO_NUMBER_FINALIZE (old_num); - ECMA_FINALIZE_STACKED (old_value, int_data->stack_frame_p); + ECMA_FINALIZE (old_value); int_data->pos++; @@ -358,12 +348,9 @@ opfunc_post_decr (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value = ecma_make_empty_completion_value (); // 1., 2., 3. - ECMA_TRY_CATCH_STACKED (old_value, - get_variable_value (int_data, decr_var_idx, true), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (old_value, get_variable_value (int_data, decr_var_idx, true), ret_value); ECMA_OP_TO_NUMBER_TRY_CATCH (old_num, - old_value, + ecma_get_completion_value_value (old_value), ret_value); // 4. @@ -386,7 +373,7 @@ opfunc_post_decr (opcode_t opdata, /**< operation data */ JERRY_ASSERT (ecma_is_completion_value_empty (reg_assignment_res)); ECMA_OP_TO_NUMBER_FINALIZE (old_num); - ECMA_FINALIZE_STACKED (old_value, int_data->stack_frame_p); + ECMA_FINALIZE (old_value); int_data->pos++; @@ -651,10 +638,7 @@ opfunc_call_n (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (func_value, - get_variable_value (int_data, func_name_lit_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (func_value, get_variable_value (int_data, func_name_lit_idx, false), ret_value); int_data->pos++; @@ -697,12 +681,7 @@ opfunc_call_n (opcode_t opdata, /**< operation data */ if (this_arg_var_idx_set) { - ecma_completion_type_t type = get_variable_value (int_data, this_arg_var_idx, false); - JERRY_ASSERT (type == ECMA_COMPLETION_TYPE_NORMAL); - - this_value = ecma_make_normal_completion_value (ecma_copy_value (ecma_stack_top_value (int_data->stack_frame_p), - true)); - ecma_stack_pop (int_data->stack_frame_p); + this_value = get_variable_value (int_data, this_arg_var_idx, false); } else { @@ -710,13 +689,13 @@ opfunc_call_n (opcode_t opdata, /**< operation data */ } JERRY_ASSERT (ecma_is_completion_value_normal (this_value)); - if (!ecma_op_is_callable (func_value)) + if (!ecma_op_is_callable (ecma_get_completion_value_value (func_value))) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } else { - ecma_object_t *func_obj_p = ecma_get_object_from_value (func_value); + ecma_object_t *func_obj_p = ecma_get_object_from_completion_value (func_value); ECMA_TRY_CATCH (call_completion, ecma_op_function_call (func_obj_p, @@ -751,7 +730,7 @@ opfunc_call_n (opcode_t opdata, /**< operation data */ MEM_FINALIZE_LOCAL_ARRAY (arg_values); - ECMA_FINALIZE_STACKED (func_value, int_data->stack_frame_p); + ECMA_FINALIZE (func_value); return ret_value; } /* opfunc_call_n */ @@ -774,10 +753,9 @@ opfunc_construct_n (opcode_t opdata, /**< operation data */ const opcode_counter_t lit_oc = int_data->pos; ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (constructor_value, - get_variable_value (int_data, constructor_name_lit_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (constructor_value, + get_variable_value (int_data, constructor_name_lit_idx, false), + ret_value); MEM_DEFINE_LOCAL_ARRAY (arg_values, args_number, ecma_value_t); @@ -793,13 +771,13 @@ opfunc_construct_n (opcode_t opdata, /**< operation data */ { JERRY_ASSERT (args_read == args_number); - if (!ecma_is_constructor (constructor_value)) + if (!ecma_is_constructor (ecma_get_completion_value_value (constructor_value))) { ret_value = ecma_make_throw_obj_completion_value (ecma_new_standard_error (ECMA_ERROR_TYPE)); } else { - ecma_object_t *constructor_obj_p = ecma_get_object_from_value (constructor_value); + ecma_object_t *constructor_obj_p = ecma_get_object_from_completion_value (constructor_value); ECMA_TRY_CATCH (construction_completion, ecma_op_function_construct (constructor_obj_p, @@ -829,7 +807,7 @@ opfunc_construct_n (opcode_t opdata, /**< operation data */ MEM_FINALIZE_LOCAL_ARRAY (arg_values); - ECMA_FINALIZE_STACKED (constructor_value, int_data->stack_frame_p); + ECMA_FINALIZE (constructor_value); return ret_value; } /* opfunc_construct_n */ @@ -941,99 +919,105 @@ opfunc_obj_decl (opcode_t opdata, /**< operation data */ const idx_t prop_name_var_idx = next_opcode.data.meta.data_1; const idx_t value_for_prop_desc_var_idx = next_opcode.data.meta.data_2; - ECMA_TRY_CATCH_STACKED (value_for_prop_desc, - get_variable_value (int_data, - value_for_prop_desc_var_idx, - false), - completion, - int_data->stack_frame_p); + ecma_completion_value_t value_for_prop_desc = get_variable_value (int_data, + value_for_prop_desc_var_idx, + false); - JERRY_ASSERT (is_reg_variable (int_data, prop_name_var_idx)); - - ECMA_TRY_CATCH_STACKED (prop_name_value, - get_variable_value (int_data, - prop_name_var_idx, - false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH (prop_name_str_value, - ecma_op_to_string (prop_name_value), - ret_value); - - bool is_throw_syntax_error = false; - - ecma_string_t *prop_name_string_p = ecma_get_string_from_completion_value (prop_name_str_value); - ecma_property_t *previous_p = ecma_op_object_get_own_property (obj_p, prop_name_string_p); - - const bool is_previous_undefined = (previous_p == NULL); - const bool is_previous_data_desc = (!is_previous_undefined - && previous_p->type == ECMA_PROPERTY_NAMEDDATA); - const bool is_previous_accessor_desc = (!is_previous_undefined - && previous_p->type == ECMA_PROPERTY_NAMEDACCESSOR); - JERRY_ASSERT (is_previous_undefined || is_previous_data_desc || is_previous_accessor_desc); - - ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); + if (ecma_is_completion_value_normal (value_for_prop_desc)) { - prop_desc.is_enumerable_defined = true; - prop_desc.is_enumerable = true; + JERRY_ASSERT (is_reg_variable (int_data, prop_name_var_idx)); - prop_desc.is_configurable_defined = true; - prop_desc.is_configurable = true; - } + ECMA_TRY_CATCH (prop_name_value, + get_variable_value (int_data, + prop_name_var_idx, + false), + ret_value); + ECMA_TRY_CATCH (prop_name_str_value, + ecma_op_to_string (ecma_get_completion_value_value (prop_name_value)), + ret_value); - if (type == OPCODE_META_TYPE_VARG_PROP_DATA) - { - prop_desc.is_value_defined = true; - prop_desc.value = value_for_prop_desc; + bool is_throw_syntax_error = false; - prop_desc.is_writable_defined = true; - prop_desc.is_writable = true; + ecma_string_t *prop_name_string_p = ecma_get_string_from_completion_value (prop_name_str_value); + ecma_property_t *previous_p = ecma_op_object_get_own_property (obj_p, prop_name_string_p); - if (!is_previous_undefined - && ((is_previous_data_desc - && int_data->is_strict) - || is_previous_accessor_desc)) + const bool is_previous_undefined = (previous_p == NULL); + const bool is_previous_data_desc = (!is_previous_undefined + && previous_p->type == ECMA_PROPERTY_NAMEDDATA); + const bool is_previous_accessor_desc = (!is_previous_undefined + && previous_p->type == ECMA_PROPERTY_NAMEDACCESSOR); + JERRY_ASSERT (is_previous_undefined || is_previous_data_desc || is_previous_accessor_desc); + + ecma_property_descriptor_t prop_desc = ecma_make_empty_property_descriptor (); { - is_throw_syntax_error = true; - } - } - else if (type == OPCODE_META_TYPE_VARG_PROP_GETTER) - { - prop_desc.is_get_defined = true; - prop_desc.get_p = ecma_get_object_from_value (value_for_prop_desc); + prop_desc.is_enumerable_defined = true; + prop_desc.is_enumerable = true; - if (!is_previous_undefined - && is_previous_data_desc) - { - is_throw_syntax_error = true; + prop_desc.is_configurable_defined = true; + prop_desc.is_configurable = true; } + + if (type == OPCODE_META_TYPE_VARG_PROP_DATA) + { + prop_desc.is_value_defined = true; + prop_desc.value = ecma_get_completion_value_value (value_for_prop_desc); + + prop_desc.is_writable_defined = true; + prop_desc.is_writable = true; + + if (!is_previous_undefined + && ((is_previous_data_desc + && int_data->is_strict) + || is_previous_accessor_desc)) + { + is_throw_syntax_error = true; + } + } + else if (type == OPCODE_META_TYPE_VARG_PROP_GETTER) + { + prop_desc.is_get_defined = true; + prop_desc.get_p = ecma_get_object_from_completion_value (value_for_prop_desc); + + if (!is_previous_undefined + && is_previous_data_desc) + { + is_throw_syntax_error = true; + } + } + else + { + prop_desc.is_set_defined = true; + prop_desc.set_p = ecma_get_object_from_completion_value (value_for_prop_desc); + + if (!is_previous_undefined + && is_previous_data_desc) + { + is_throw_syntax_error = true; + } + } + + /* The SyntaxError should be treated as an early error */ + JERRY_ASSERT (!is_throw_syntax_error); + + ecma_completion_value_t define_prop_completion = ecma_op_object_define_own_property (obj_p, + prop_name_string_p, + &prop_desc, + false); + JERRY_ASSERT (ecma_is_completion_value_normal_true (define_prop_completion) + || ecma_is_completion_value_normal_false (define_prop_completion)); + + ecma_free_completion_value (value_for_prop_desc); + + ECMA_FINALIZE (prop_name_str_value); + ECMA_FINALIZE (prop_name_value); } else { - prop_desc.is_set_defined = true; - prop_desc.set_p = ecma_get_object_from_value (value_for_prop_desc); + completion = value_for_prop_desc; - if (!is_previous_undefined - && is_previous_data_desc) - { - is_throw_syntax_error = true; - } + break; } - /* The SyntaxError should be treated as an early error */ - JERRY_ASSERT (!is_throw_syntax_error); - - ecma_completion_value_t define_prop_completion = ecma_op_object_define_own_property (obj_p, - prop_name_string_p, - &prop_desc, - false); - JERRY_ASSERT (ecma_is_completion_value_normal_true (define_prop_completion) - || ecma_is_completion_value_normal_false (define_prop_completion)); - - ECMA_FINALIZE (prop_name_str_value); - ECMA_FINALIZE_STACKED (prop_name_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (value_for_prop_desc, int_data->stack_frame_p); - int_data->pos++; } else @@ -1090,14 +1074,11 @@ opfunc_retval (opcode_t opdata __unused, /**< operation data */ { ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (expr_val, - get_variable_value (int_data, opdata.data.retval.ret_value, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (expr_val, get_variable_value (int_data, opdata.data.retval.ret_value, false), ret_value); - ret_value = ecma_make_return_completion_value (ecma_copy_value (expr_val, true)); + ret_value = ecma_make_return_completion_value (ecma_copy_value (ecma_get_completion_value_value (expr_val), true)); - ECMA_FINALIZE_STACKED (expr_val, int_data->stack_frame_p); + ECMA_FINALIZE (expr_val); return ret_value; } /* opfunc_retval */ @@ -1121,23 +1102,21 @@ opfunc_prop_getter (opcode_t opdata __unused, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (base_value, - get_variable_value (int_data, base_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (prop_name_value, - get_variable_value (int_data, prop_name_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (base_value, + get_variable_value (int_data, base_var_idx, false), + ret_value); + ECMA_TRY_CATCH (prop_name_value, + get_variable_value (int_data, prop_name_var_idx, false), + ret_value); ECMA_TRY_CATCH (check_coercible_ret, - ecma_op_check_object_coercible (base_value), + ecma_op_check_object_coercible (ecma_get_completion_value_value (base_value)), ret_value); ECMA_TRY_CATCH (prop_name_str_value, - ecma_op_to_string (prop_name_value), + ecma_op_to_string (ecma_get_completion_value_value (prop_name_value)), ret_value); ecma_string_t *prop_name_string_p = ecma_get_string_from_completion_value (prop_name_str_value); - ecma_reference_t ref = ecma_make_reference (base_value, + ecma_reference_t ref = ecma_make_reference (ecma_get_completion_value_value (base_value), prop_name_string_p, int_data->is_strict); @@ -1151,8 +1130,8 @@ opfunc_prop_getter (opcode_t opdata __unused, /**< operation data */ ECMA_FINALIZE (prop_name_str_value); ECMA_FINALIZE (check_coercible_ret); - ECMA_FINALIZE_STACKED (prop_name_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (base_value, int_data->stack_frame_p); + ECMA_FINALIZE (prop_name_value); + ECMA_FINALIZE (base_value); int_data->pos++; @@ -1178,39 +1157,34 @@ opfunc_prop_setter (opcode_t opdata __unused, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (base_value, - get_variable_value (int_data, base_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (prop_name_value, - get_variable_value (int_data, prop_name_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (base_value, + get_variable_value (int_data, base_var_idx, false), + ret_value); + ECMA_TRY_CATCH (prop_name_value, + get_variable_value (int_data, prop_name_var_idx, false), + ret_value); ECMA_TRY_CATCH (check_coercible_ret, - ecma_op_check_object_coercible (base_value), + ecma_op_check_object_coercible (ecma_get_completion_value_value (base_value)), ret_value); ECMA_TRY_CATCH (prop_name_str_value, - ecma_op_to_string (prop_name_value), + ecma_op_to_string (ecma_get_completion_value_value (prop_name_value)), ret_value); ecma_string_t *prop_name_string_p = ecma_get_string_from_completion_value (prop_name_str_value); - ecma_reference_t ref = ecma_make_reference (base_value, + ecma_reference_t ref = ecma_make_reference (ecma_get_completion_value_value (base_value), prop_name_string_p, int_data->is_strict); - ECMA_TRY_CATCH_STACKED (rhs_value, - get_variable_value (int_data, rhs_var_idx, false), - ret_value, - int_data->stack_frame_p); - ret_value = ecma_op_put_value_object_base (ref, rhs_value); - ECMA_FINALIZE_STACKED (rhs_value, int_data->stack_frame_p); + ECMA_TRY_CATCH (rhs_value, get_variable_value (int_data, rhs_var_idx, false), ret_value); + ret_value = ecma_op_put_value_object_base (ref, ecma_get_completion_value_value (rhs_value)); + ECMA_FINALIZE (rhs_value); ecma_free_reference (ref); ECMA_FINALIZE (prop_name_str_value); ECMA_FINALIZE (check_coercible_ret); - ECMA_FINALIZE_STACKED (prop_name_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (base_value, int_data->stack_frame_p); + ECMA_FINALIZE (prop_name_value); + ECMA_FINALIZE (base_value); int_data->pos++; @@ -1257,13 +1231,10 @@ opfunc_logical_not (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (right_value, - get_variable_value (int_data, right_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (right_value, get_variable_value (int_data, right_var_idx, false), ret_value); ecma_simple_value_t old_value = ECMA_SIMPLE_VALUE_TRUE; - ecma_completion_value_t to_bool_value = ecma_op_to_boolean (right_value); + ecma_completion_value_t to_bool_value = ecma_op_to_boolean (ecma_get_completion_value_value (right_value)); if (ecma_is_value_true (ecma_get_completion_value_value (to_bool_value))) { @@ -1274,7 +1245,7 @@ opfunc_logical_not (opcode_t opdata, /**< operation data */ dst_var_idx, ecma_make_simple_value (old_value)); - ECMA_FINALIZE_STACKED (right_value, int_data->stack_frame_p); + ECMA_FINALIZE (right_value); int_data->pos++; @@ -1323,14 +1294,13 @@ opfunc_with (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (expr_value, - get_variable_value (int_data, - expr_var_idx, - false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (expr_value, + get_variable_value (int_data, + expr_var_idx, + false), + ret_value); ECMA_TRY_CATCH (obj_expr_value, - ecma_op_to_object (expr_value), + ecma_op_to_object (ecma_get_completion_value_value (expr_value)), ret_value); int_data->pos++; @@ -1367,7 +1337,7 @@ opfunc_with (opcode_t opdata, /**< operation data */ ecma_deref_object (new_env_p); ECMA_FINALIZE (obj_expr_value); - ECMA_FINALIZE_STACKED (expr_value, int_data->stack_frame_p); + ECMA_FINALIZE (expr_value); return ret_value; } /* opfunc_with */ @@ -1388,16 +1358,15 @@ opfunc_throw (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (var_value, - get_variable_value (int_data, - var_idx, - false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (var_value, + get_variable_value (int_data, + var_idx, + false), + ret_value); - ret_value = ecma_make_throw_completion_value (ecma_copy_value (var_value, true)); + ret_value = ecma_make_throw_completion_value (ecma_copy_value (ecma_get_completion_value_value (var_value), true)); - ECMA_FINALIZE_STACKED (var_value, int_data->stack_frame_p); + ECMA_FINALIZE (var_value); int_data->pos++; @@ -1421,13 +1390,10 @@ evaluate_arg_for_typeof (int_data_t *int_data, /**< interpreter context */ if (is_reg_variable (int_data, var_idx)) { // 2.b - ecma_completion_type_t type = get_variable_value (int_data, var_idx, false); - JERRY_ASSERT (type == ECMA_COMPLETION_TYPE_NORMAL); - - ret_value = ecma_make_normal_completion_value (ecma_copy_value (ecma_stack_top_value (int_data->stack_frame_p), - true)); - - ecma_stack_pop (int_data->stack_frame_p); + ret_value = get_variable_value (int_data, + var_idx, + false); + JERRY_ASSERT (ecma_is_completion_value_normal (ret_value)); } else { @@ -1613,25 +1579,23 @@ opfunc_delete_prop (opcode_t opdata, /**< operation data */ ecma_completion_value_t ret_value; - ECMA_TRY_CATCH_STACKED (base_value, - get_variable_value (int_data, base_var_idx, false), - ret_value, - int_data->stack_frame_p); - ECMA_TRY_CATCH_STACKED (name_value, - get_variable_value (int_data, name_var_idx, false), - ret_value, - int_data->stack_frame_p); + ECMA_TRY_CATCH (base_value, + get_variable_value (int_data, base_var_idx, false), + ret_value); + ECMA_TRY_CATCH (name_value, + get_variable_value (int_data, name_var_idx, false), + ret_value); ECMA_TRY_CATCH (check_coercible_ret, - ecma_op_check_object_coercible (base_value), + ecma_op_check_object_coercible (ecma_get_completion_value_value (base_value)), ret_value); ECMA_TRY_CATCH (str_name_value, - ecma_op_to_string (name_value), + ecma_op_to_string (ecma_get_completion_value_value (name_value)), ret_value); JERRY_ASSERT (ecma_is_value_string (ecma_get_completion_value_value (str_name_value))); ecma_string_t *name_string_p = ecma_get_string_from_completion_value (str_name_value); - if (ecma_is_value_undefined (base_value)) + if (ecma_is_value_undefined (ecma_get_completion_value_value (base_value))) { if (int_data->is_strict) { @@ -1645,7 +1609,7 @@ opfunc_delete_prop (opcode_t opdata, /**< operation data */ } else { - ECMA_TRY_CATCH (obj_value, ecma_op_to_object (base_value), ret_value); + ECMA_TRY_CATCH (obj_value, ecma_op_to_object (ecma_get_completion_value_value (base_value)), ret_value); JERRY_ASSERT (ecma_is_value_object (ecma_get_completion_value_value (obj_value))); ecma_object_t *obj_p = ecma_get_object_from_completion_value (obj_value); @@ -1664,8 +1628,8 @@ opfunc_delete_prop (opcode_t opdata, /**< operation data */ ECMA_FINALIZE (str_name_value); ECMA_FINALIZE (check_coercible_ret); - ECMA_FINALIZE_STACKED (name_value, int_data->stack_frame_p); - ECMA_FINALIZE_STACKED (base_value, int_data->stack_frame_p); + ECMA_FINALIZE (name_value); + ECMA_FINALIZE (base_value); int_data->pos++; diff --git a/src/libecmaobjects/ecma-helpers-value.c b/src/libecmaobjects/ecma-helpers-value.c index 1690addd1..587633634 100644 --- a/src/libecmaobjects/ecma-helpers-value.c +++ b/src/libecmaobjects/ecma-helpers-value.c @@ -436,13 +436,13 @@ ecma_free_value (ecma_value_t value, /**< value description */ * * @return type field */ -ecma_completion_type_t __attribute_const__ -ecma_get_completion_value_type (ecma_completion_value_t completion_value) /**< completion value */ +static ecma_completion_type_t __attribute_const__ +ecma_get_completion_value_type_field (ecma_completion_value_t completion_value) /**< completion value */ { return jrt_extract_bit_field (completion_value, ECMA_COMPLETION_VALUE_TYPE_POS, ECMA_COMPLETION_VALUE_TYPE_WIDTH); -} /* ecma_get_completion_value_type */ +} /* ecma_get_completion_value_type_field */ /** * Get value field of completion value @@ -702,7 +702,7 @@ ecma_make_meta_completion_value (void) inline ecma_value_t __attribute_const__ __attribute_always_inline__ ecma_get_completion_value_value (ecma_completion_value_t completion_value) /**< completion value */ { - const ecma_completion_type_t type = ecma_get_completion_value_type (completion_value); + const ecma_completion_type_t type = ecma_get_completion_value_type_field (completion_value); const bool is_type_ok = (type == ECMA_COMPLETION_TYPE_NORMAL #ifdef CONFIG_ECMA_EXCEPTION_SUPPORT @@ -757,7 +757,7 @@ ecma_get_object_from_completion_value (ecma_completion_value_t completion_value) ecma_completion_value_t ecma_copy_completion_value (ecma_completion_value_t value) /**< completion value */ { - const ecma_completion_type_t type = ecma_get_completion_value_type (value); + const ecma_completion_type_t type = ecma_get_completion_value_type_field (value); const bool is_type_ok = (type == ECMA_COMPLETION_TYPE_NORMAL #ifdef CONFIG_ECMA_EXCEPTION_SUPPORT || type == ECMA_COMPLETION_TYPE_THROW @@ -778,7 +778,7 @@ ecma_copy_completion_value (ecma_completion_value_t value) /**< completion value void ecma_free_completion_value (ecma_completion_value_t completion_value) /**< completion value */ { - switch (ecma_get_completion_value_type (completion_value)) + switch (ecma_get_completion_value_type_field (completion_value)) { case ECMA_COMPLETION_TYPE_NORMAL: #ifdef CONFIG_ECMA_EXCEPTION_SUPPORT @@ -816,7 +816,7 @@ ecma_free_completion_value (ecma_completion_value_t completion_value) /**< compl inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_normal (ecma_completion_value_t value) /**< completion value */ { - return (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_NORMAL); + return (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_NORMAL); } /* ecma_is_completion_value_normal */ /** @@ -829,7 +829,7 @@ inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_throw (ecma_completion_value_t value) /**< completion value */ { #ifdef CONFIG_ECMA_EXCEPTION_SUPPORT - return (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_THROW); + return (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_THROW); #else /* CONFIG_ECMA_EXCEPTION_SUPPORT */ (void) value; @@ -846,7 +846,7 @@ ecma_is_completion_value_throw (ecma_completion_value_t value) /**< completion v inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_return (ecma_completion_value_t value) /**< completion value */ { - return (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_RETURN); + return (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_RETURN); } /* ecma_is_completion_value_return */ /** @@ -858,7 +858,7 @@ ecma_is_completion_value_return (ecma_completion_value_t value) /**< completion inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_exit (ecma_completion_value_t value) /**< completion value */ { - if (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_EXIT) + if (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_EXIT) { JERRY_ASSERT (ecma_is_value_boolean (ecma_get_completion_value_value_field (value))); @@ -879,7 +879,7 @@ ecma_is_completion_value_exit (ecma_completion_value_t value) /**< completion va inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_meta (ecma_completion_value_t value) /**< completion value */ { - if (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_META) + if (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_META) { JERRY_ASSERT (ecma_is_value_empty (ecma_get_completion_value_value_field (value))); @@ -900,7 +900,7 @@ ecma_is_completion_value_meta (ecma_completion_value_t value) /**< completion va inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_break (ecma_completion_value_t value) /**< completion value */ { - return (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_BREAK); + return (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_BREAK); } /* ecma_is_completion_value_break */ /** @@ -912,7 +912,7 @@ ecma_is_completion_value_break (ecma_completion_value_t value) /**< completion v inline bool __attribute_const__ __attribute_always_inline__ ecma_is_completion_value_continue (ecma_completion_value_t value) /**< completion value */ { - return (ecma_get_completion_value_type (value) == ECMA_COMPLETION_TYPE_CONTINUE); + return (ecma_get_completion_value_type_field (value) == ECMA_COMPLETION_TYPE_CONTINUE); } /* ecma_is_completion_value_continue */ /** diff --git a/src/libecmaobjects/ecma-helpers.h b/src/libecmaobjects/ecma-helpers.h index c20290d78..f2302065d 100644 --- a/src/libecmaobjects/ecma-helpers.h +++ b/src/libecmaobjects/ecma-helpers.h @@ -1,4 +1,4 @@ -/* Copyright 2014-2015 Samsung Electronics Co., Ltd. +/* Copyright 2014 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -96,8 +96,6 @@ extern ecma_completion_value_t ecma_make_empty_completion_value (void); extern ecma_completion_value_t ecma_make_return_completion_value (ecma_value_t value); extern ecma_completion_value_t ecma_make_exit_completion_value (bool is_successful); extern ecma_completion_value_t ecma_make_meta_completion_value (void); -extern ecma_completion_type_t __attribute_const__ -ecma_get_completion_value_type (ecma_completion_value_t completion_value); extern ecma_value_t ecma_get_completion_value_value (ecma_completion_value_t completion_value); extern ecma_number_t* __attribute_const__ ecma_get_number_from_completion_value (ecma_completion_value_t completion_value); diff --git a/src/libecmaobjects/ecma-stack.c b/src/libecmaobjects/ecma-stack.c index 26fa19e0c..ecfebb319 100644 --- a/src/libecmaobjects/ecma-stack.c +++ b/src/libecmaobjects/ecma-stack.c @@ -70,10 +70,6 @@ ecma_stack_add_frame (ecma_stack_frame_t *frame_p) /**< frame to initialize */ frame_p->top_chunk_p = NULL; frame_p->dynamically_allocated_value_slots_p = frame_p->inlined_values; frame_p->current_slot_index = 0; - -#ifndef JERRY_NDEBUG - frame_p->items_number = 0; -#endif /* !JERRY_NDEBUG */ } /* ecma_stack_add_frame */ /** @@ -138,10 +134,6 @@ void ecma_stack_push_value (ecma_stack_frame_t *frame_p, /**< ecma-stack frame */ ecma_value_t value) /**< ecma-value */ { -#ifndef JERRY_NDEBUG - frame_p->items_number++; -#endif /* !JERRY_NDEBUG */ - frame_p->current_slot_index++; if (frame_p->current_slot_index >= JERRY_MIN (ECMA_STACK_FRAME_INLINED_VALUES_NUMBER, @@ -158,13 +150,9 @@ ecma_stack_push_value (ecma_stack_frame_t *frame_p, /**< ecma-stack frame */ /** * Get top value from ecma-stack */ -ecma_value_t +inline ecma_value_t __attribute_always_inline__ ecma_stack_top_value (ecma_stack_frame_t *frame_p) /**< ecma-stack frame */ { -#ifndef JERRY_NDEBUG - JERRY_ASSERT (frame_p->items_number > 0); -#endif /* !JERRY_NDEBUG */ - const size_t slots_in_top_chunk = ecma_stack_slots_in_top_chunk (frame_p); JERRY_ASSERT (frame_p->current_slot_index < slots_in_top_chunk); @@ -217,12 +205,6 @@ ecma_stack_pop (ecma_stack_frame_t *frame_p) /**< ecma-stack frame */ frame_p->current_slot_index--; } -#ifndef JERRY_NDEBUG - JERRY_ASSERT (frame_p->items_number > 0); - - frame_p->items_number--; -#endif /* !JERRY_NDEBUG */ - ecma_free_value (value, true); } /* ecma_stack_pop */ diff --git a/src/libecmaobjects/ecma-stack.h b/src/libecmaobjects/ecma-stack.h index 279eb72bf..cdaede590 100644 --- a/src/libecmaobjects/ecma-stack.h +++ b/src/libecmaobjects/ecma-stack.h @@ -52,10 +52,6 @@ typedef struct ecma_stack_frame_t ecma_value_t inlined_values [ECMA_STACK_FRAME_INLINED_VALUES_NUMBER]; /**< place for values inlined in stack frame * (instead of being dynamically allocated * on the heap) */ - -#ifndef JERRY_NDEBUG - uint32_t items_number; /**< number of items pushed on the current frame */ -#endif /* !JERRY_NDEBUG */ } ecma_stack_frame_t; extern void ecma_stack_init (void); diff --git a/src/libecmaoperations/ecma-try-catch-macro.h b/src/libecmaoperations/ecma-try-catch-macro.h index d2cdd62ce..c469433d4 100644 --- a/src/libecmaoperations/ecma-try-catch-macro.h +++ b/src/libecmaoperations/ecma-try-catch-macro.h @@ -28,9 +28,6 @@ * Note: * Each ECMA_TRY_CATCH should have it's own corresponding ECMA_FINALIZE * statement with same argument as corresponding ECMA_TRY_CATCH's first argument. - * - * See also: - * ECMA_TRY_CATCH_STACKED */ #define ECMA_TRY_CATCH(var, op, return_value) \ ecma_completion_value_t var = op; \ @@ -49,36 +46,10 @@ * Note: * Each ECMA_TRY_CATCH should be followed by ECMA_FINALIZE with same argument * as corresponding ECMA_TRY_CATCH's first argument. - * - * See also: - * ECMA_FINALIZE_STACKED */ #define ECMA_FINALIZE(var) ecma_free_completion_value (var); \ } -/** - * ECMA_TRY_CATCH for stack convention - */ -#define ECMA_TRY_CATCH_STACKED(var, op, return_value, frame_p) \ - ecma_completion_type_t var ## completion_type = op; \ - if (unlikely (var ## completion_type != ECMA_COMPLETION_TYPE_NORMAL)) \ - { \ - JERRY_ASSERT (var ## completion_type == ECMA_COMPLETION_TYPE_THROW); \ - return_value = ecma_make_completion_value (var ## completion_type, \ - ecma_copy_value (ecma_stack_top_value (frame_p), true)); \ - } \ - else \ - { \ - ecma_value_t var = ecma_stack_top_value (frame_p); \ - -/** - * ECMA_FINALIZE for stack convention - */ -#define ECMA_FINALIZE_STACKED(var, frame_p) (void) var; \ - } \ - (void) var ## completion_type; \ - ecma_stack_pop (frame_p) \ - /** * The macro defines try-block that tries to perform ToNumber operation on given value * and checks for exceptions that might be thrown during the operation.