Remove last_completion_value.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
This commit is contained in:
+138
-199
@@ -486,22 +486,22 @@ opfunc_construct (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
name_p); \
|
||||
if (ref_base_lex_env_p != NULL) \
|
||||
{ \
|
||||
last_completion_value = ecma_op_get_value_lex_env_base (ref_base_lex_env_p, \
|
||||
name_p, \
|
||||
is_strict); \
|
||||
result = ecma_op_get_value_lex_env_base (ref_base_lex_env_p, \
|
||||
name_p, \
|
||||
is_strict); \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
last_completion_value = ecma_raise_reference_error (ECMA_ERR_MSG ("")); \
|
||||
result = ecma_raise_reference_error (ECMA_ERR_MSG ("")); \
|
||||
} \
|
||||
\
|
||||
ecma_deref_ecma_string (name_p); \
|
||||
\
|
||||
if (ecma_is_value_error (last_completion_value)) \
|
||||
if (ecma_is_value_error (result)) \
|
||||
{ \
|
||||
goto error; \
|
||||
} \
|
||||
(target_value) = last_completion_value; \
|
||||
(target_value) = result; \
|
||||
} \
|
||||
} \
|
||||
else if (literal_index < const_literal_end) \
|
||||
@@ -551,7 +551,7 @@ vm_init_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
{
|
||||
const ecma_compiled_code_t *bytecode_header_p = frame_ctx_p->bytecode_header_p;
|
||||
uint8_t *byte_code_p = frame_ctx_p->byte_code_p;
|
||||
ecma_value_t last_completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
ecma_value_t result = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
uint16_t encoding_limit;
|
||||
uint16_t encoding_delta;
|
||||
uint16_t register_end;
|
||||
@@ -678,7 +678,7 @@ vm_init_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
}
|
||||
|
||||
return last_completion_value;
|
||||
return result;
|
||||
} /* vm_init_loop */
|
||||
|
||||
/**
|
||||
@@ -692,7 +692,6 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
const ecma_compiled_code_t *bytecode_header_p = frame_ctx_p->bytecode_header_p;
|
||||
uint8_t *byte_code_p = frame_ctx_p->byte_code_p;
|
||||
lit_cpointer_t *literal_start_p = frame_ctx_p->literal_start_p;
|
||||
ecma_value_t last_completion_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
|
||||
ecma_value_t *stack_top_p;
|
||||
uint16_t encoding_limit;
|
||||
@@ -703,7 +702,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
int32_t branch_offset = 0;
|
||||
ecma_value_t left_value;
|
||||
ecma_value_t right_value;
|
||||
ecma_value_t result = 0;
|
||||
ecma_value_t result = ecma_make_simple_value (ECMA_SIMPLE_VALUE_EMPTY);
|
||||
ecma_value_t block_result = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
bool is_strict = ((frame_ctx_p->bytecode_header_p->status_flags & CBC_CODE_FLAGS_STRICT_MODE) != 0);
|
||||
|
||||
@@ -963,14 +962,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
else
|
||||
{
|
||||
last_completion_value = ecma_op_to_string (right_value);
|
||||
result = ecma_op_to_string (right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
prop_name_p = ecma_get_string_from_value (last_completion_value);
|
||||
prop_name_p = ecma_get_string_from_value (result);
|
||||
property_p = ecma_find_named_property (object_p, prop_name_p);
|
||||
}
|
||||
|
||||
@@ -1006,13 +1005,12 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
case VM_OC_PUSH_ARRAY:
|
||||
{
|
||||
last_completion_value = ecma_op_create_array_object (NULL, 0, false);
|
||||
result = ecma_op_create_array_object (NULL, 0, false);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_PUSH_ELISON:
|
||||
@@ -1102,16 +1100,16 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
|
||||
if (ref_base_lex_env_p != NULL)
|
||||
{
|
||||
last_completion_value = ecma_op_get_value_lex_env_base (ref_base_lex_env_p,
|
||||
name_p,
|
||||
is_strict);
|
||||
result = ecma_op_get_value_lex_env_base (ref_base_lex_env_p,
|
||||
name_p,
|
||||
is_strict);
|
||||
}
|
||||
else
|
||||
{
|
||||
last_completion_value = ecma_raise_reference_error (ECMA_ERR_MSG (""));
|
||||
result = ecma_raise_reference_error (ECMA_ERR_MSG (""));
|
||||
}
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
ecma_deref_ecma_string (name_p);
|
||||
goto error;
|
||||
@@ -1120,8 +1118,6 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
ecma_ref_object (ref_base_lex_env_p);
|
||||
*stack_top_p++ = ecma_make_object_value (ref_base_lex_env_p);
|
||||
*stack_top_p++ = ecma_make_string_value (name_p);
|
||||
|
||||
result = last_completion_value;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1155,10 +1151,10 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
case VM_OC_PROP_POST_INCR:
|
||||
case VM_OC_PROP_POST_DECR:
|
||||
{
|
||||
last_completion_value = vm_op_get_value (left_value,
|
||||
right_value);
|
||||
result = vm_op_get_value (left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
if (opcode >= CBC_PUSH_PROP_REFERENCE && opcode < CBC_PRE_INCR)
|
||||
{
|
||||
@@ -1168,8 +1164,6 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
|
||||
if (opcode < CBC_PRE_INCR)
|
||||
{
|
||||
if (opcode >= CBC_PUSH_PROP_REFERENCE)
|
||||
@@ -1192,15 +1186,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
{
|
||||
uint32_t opcode_flags = VM_OC_GROUP_GET_INDEX (opcode_data) - VM_OC_PROP_PRE_INCR;
|
||||
|
||||
last_completion_value = ecma_op_to_number (left_value);
|
||||
result = ecma_op_to_number (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
byte_code_p = byte_code_start_p + 1;
|
||||
result = last_completion_value;
|
||||
|
||||
if (ecma_is_value_integer_number (result))
|
||||
{
|
||||
@@ -1352,19 +1345,19 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
block_result = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
}
|
||||
|
||||
last_completion_value = left_value;
|
||||
result = left_value;
|
||||
left_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
goto error;
|
||||
}
|
||||
case VM_OC_THROW:
|
||||
{
|
||||
last_completion_value = ecma_make_error_value (left_value);
|
||||
result = ecma_make_error_value (left_value);
|
||||
left_value = ecma_make_simple_value (ECMA_SIMPLE_VALUE_UNDEFINED);
|
||||
goto error;
|
||||
}
|
||||
case VM_OC_THROW_REFERENCE_ERROR:
|
||||
{
|
||||
last_completion_value = ecma_raise_reference_error (ECMA_ERR_MSG (""));
|
||||
result = ecma_raise_reference_error (ECMA_ERR_MSG (""));
|
||||
goto error;
|
||||
}
|
||||
case VM_OC_EVAL:
|
||||
@@ -1391,23 +1384,21 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
|
||||
frame_ctx_p->call_operation = VM_NO_EXEC_OP;
|
||||
|
||||
last_completion_value = *(--stack_top_p);
|
||||
result = *(--stack_top_p);
|
||||
block_result = frame_ctx_p->call_block_result;
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (VM_OC_HAS_PUT_RESULT (opcode_data))
|
||||
{
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
left_value = last_completion_value;
|
||||
}
|
||||
break;
|
||||
|
||||
ecma_fast_free_value (result);
|
||||
continue;
|
||||
}
|
||||
case VM_OC_NEW:
|
||||
{
|
||||
@@ -1427,28 +1418,25 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
|
||||
frame_ctx_p->call_operation = VM_NO_EXEC_OP;
|
||||
|
||||
last_completion_value = *(--stack_top_p);
|
||||
result = *(--stack_top_p);
|
||||
block_result = frame_ctx_p->call_block_result;
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
JERRY_ASSERT (VM_OC_HAS_PUT_RESULT (opcode_data));
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_PROP_DELETE:
|
||||
{
|
||||
last_completion_value = vm_op_delete_prop (left_value, right_value, is_strict);
|
||||
result = vm_op_delete_prop (left_value, right_value, is_strict);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_DELETE:
|
||||
@@ -1463,16 +1451,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
break;
|
||||
}
|
||||
|
||||
last_completion_value = vm_op_delete_var (literal_start_p[literal_index],
|
||||
frame_ctx_p->lex_env_p,
|
||||
is_strict);
|
||||
result = vm_op_delete_var (literal_start_p[literal_index],
|
||||
frame_ctx_p->lex_env_p,
|
||||
is_strict);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_JUMP:
|
||||
@@ -1521,52 +1507,44 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
case VM_OC_PLUS:
|
||||
{
|
||||
last_completion_value = opfunc_unary_plus (left_value);
|
||||
result = opfunc_unary_plus (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_MINUS:
|
||||
{
|
||||
last_completion_value = opfunc_unary_minus (left_value);
|
||||
result = opfunc_unary_minus (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_NOT:
|
||||
{
|
||||
last_completion_value = opfunc_logical_not (left_value);
|
||||
result = opfunc_logical_not (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_BIT_NOT:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_NOT,
|
||||
left_value,
|
||||
left_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_NOT,
|
||||
left_value,
|
||||
left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_TYPEOF_IDENT:
|
||||
@@ -1596,123 +1574,107 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
break;
|
||||
}
|
||||
|
||||
last_completion_value = ecma_op_get_value_lex_env_base (ref_base_lex_env_p,
|
||||
name_p,
|
||||
is_strict);
|
||||
result = ecma_op_get_value_lex_env_base (ref_base_lex_env_p,
|
||||
name_p,
|
||||
is_strict);
|
||||
|
||||
ecma_deref_ecma_string (name_p);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
left_value = last_completion_value;
|
||||
left_value = result;
|
||||
}
|
||||
/* FALLTHRU */
|
||||
}
|
||||
case VM_OC_TYPEOF:
|
||||
{
|
||||
last_completion_value = opfunc_typeof (left_value);
|
||||
result = opfunc_typeof (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_ADD:
|
||||
{
|
||||
last_completion_value = opfunc_addition (left_value, right_value);
|
||||
result = opfunc_addition (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_SUB:
|
||||
{
|
||||
last_completion_value = do_number_arithmetic (NUMBER_ARITHMETIC_SUBSTRACTION,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_arithmetic (NUMBER_ARITHMETIC_SUBSTRACTION,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_MUL:
|
||||
{
|
||||
last_completion_value = do_number_arithmetic (NUMBER_ARITHMETIC_MULTIPLICATION,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_arithmetic (NUMBER_ARITHMETIC_MULTIPLICATION,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_DIV:
|
||||
{
|
||||
last_completion_value = do_number_arithmetic (NUMBER_ARITHMETIC_DIVISION,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_arithmetic (NUMBER_ARITHMETIC_DIVISION,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_MOD:
|
||||
{
|
||||
last_completion_value = do_number_arithmetic (NUMBER_ARITHMETIC_REMAINDER,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_arithmetic (NUMBER_ARITHMETIC_REMAINDER,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_EQUAL:
|
||||
{
|
||||
last_completion_value = opfunc_equal_value (left_value, right_value);
|
||||
result = opfunc_equal_value (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_NOT_EQUAL:
|
||||
{
|
||||
last_completion_value = opfunc_not_equal_value (left_value, right_value);
|
||||
result = opfunc_not_equal_value (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_STRICT_EQUAL:
|
||||
@@ -1733,158 +1695,134 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
case VM_OC_BIT_OR:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_OR,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_OR,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_BIT_XOR:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_XOR,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_XOR,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_BIT_AND:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_AND,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_LOGIC_AND,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_LEFT_SHIFT:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_LEFT,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_LEFT,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_RIGHT_SHIFT:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_RIGHT,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_RIGHT,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_UNS_RIGHT_SHIFT:
|
||||
{
|
||||
last_completion_value = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_URIGHT,
|
||||
left_value,
|
||||
right_value);
|
||||
result = do_number_bitwise_logic (NUMBER_BITWISE_SHIFT_URIGHT,
|
||||
left_value,
|
||||
right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_LESS:
|
||||
{
|
||||
last_completion_value = opfunc_less_than (left_value, right_value);
|
||||
result = opfunc_less_than (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_GREATER:
|
||||
{
|
||||
last_completion_value = opfunc_greater_than (left_value, right_value);
|
||||
result = opfunc_greater_than (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_LESS_EQUAL:
|
||||
{
|
||||
last_completion_value = opfunc_less_or_equal_than (left_value, right_value);
|
||||
result = opfunc_less_or_equal_than (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_GREATER_EQUAL:
|
||||
{
|
||||
last_completion_value = opfunc_greater_or_equal_than (left_value, right_value);
|
||||
result = opfunc_greater_or_equal_than (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_IN:
|
||||
{
|
||||
last_completion_value = opfunc_in (left_value, right_value);
|
||||
result = opfunc_in (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_INSTANCEOF:
|
||||
{
|
||||
last_completion_value = opfunc_instanceof (left_value, right_value);
|
||||
result = opfunc_instanceof (left_value, right_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
result = last_completion_value;
|
||||
break;
|
||||
}
|
||||
case VM_OC_WITH:
|
||||
@@ -1896,14 +1834,14 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
|
||||
JERRY_ASSERT (frame_ctx_p->registers_p + register_end + frame_ctx_p->context_depth == stack_top_p);
|
||||
|
||||
last_completion_value = ecma_op_to_object (left_value);
|
||||
result = ecma_op_to_object (left_value);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
goto error;
|
||||
}
|
||||
|
||||
object_p = ecma_get_object_from_value (last_completion_value);
|
||||
object_p = ecma_get_object_from_value (result);
|
||||
|
||||
with_env_p = ecma_create_object_lex_env (frame_ctx_p->lex_env_p,
|
||||
object_p,
|
||||
@@ -2066,7 +2004,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
case VM_CONTEXT_FINALLY_THROW:
|
||||
{
|
||||
last_completion_value = stack_top_p[-2];
|
||||
result = stack_top_p[-2];
|
||||
|
||||
VM_MINUS_EQUAL_U16 (frame_ctx_p->context_depth,
|
||||
PARSER_TRY_CONTEXT_STACK_ALLOCATION);
|
||||
@@ -2075,7 +2013,7 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
case VM_CONTEXT_FINALLY_RETURN:
|
||||
{
|
||||
last_completion_value = stack_top_p[-2];
|
||||
result = stack_top_p[-2];
|
||||
|
||||
VM_MINUS_EQUAL_U16 (frame_ctx_p->context_depth,
|
||||
PARSER_TRY_CONTEXT_STACK_ALLOCATION);
|
||||
@@ -2149,16 +2087,17 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
ref_base_lex_env_p = ecma_op_resolve_reference_base (frame_ctx_p->lex_env_p,
|
||||
var_name_str_p);
|
||||
|
||||
last_completion_value = ecma_op_put_value_lex_env_base (ref_base_lex_env_p,
|
||||
var_name_str_p,
|
||||
is_strict,
|
||||
result);
|
||||
ecma_value_t put_value_result = ecma_op_put_value_lex_env_base (ref_base_lex_env_p,
|
||||
var_name_str_p,
|
||||
is_strict,
|
||||
result);
|
||||
|
||||
ecma_deref_ecma_string (var_name_str_p);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (put_value_result))
|
||||
{
|
||||
ecma_free_value (result);
|
||||
result = put_value_result;
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -2186,17 +2125,18 @@ vm_loop (vm_frame_ctx_t *frame_ctx_p) /**< frame context */
|
||||
}
|
||||
else
|
||||
{
|
||||
last_completion_value = vm_op_set_value (object,
|
||||
property,
|
||||
result,
|
||||
is_strict);
|
||||
ecma_value_t set_value_result = vm_op_set_value (object,
|
||||
property,
|
||||
result,
|
||||
is_strict);
|
||||
|
||||
ecma_free_value (object);
|
||||
ecma_free_value (property);
|
||||
|
||||
if (ecma_is_value_error (last_completion_value))
|
||||
if (ecma_is_value_error (set_value_result))
|
||||
{
|
||||
ecma_free_value (result);
|
||||
result = set_value_result;
|
||||
goto error;
|
||||
}
|
||||
|
||||
@@ -2226,7 +2166,7 @@ error:
|
||||
ecma_fast_free_value (left_value);
|
||||
ecma_fast_free_value (right_value);
|
||||
|
||||
if (unlikely (ecma_is_value_error (last_completion_value)))
|
||||
if (ecma_is_value_error (result))
|
||||
{
|
||||
ecma_value_t *vm_stack_p = stack_top_p;
|
||||
|
||||
@@ -2255,10 +2195,10 @@ error:
|
||||
/* In most cases there is no context. */
|
||||
|
||||
ecma_fast_free_value (block_result);
|
||||
return last_completion_value;
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!ecma_is_value_error (last_completion_value))
|
||||
if (!ecma_is_value_error (result))
|
||||
{
|
||||
JERRY_ASSERT (frame_ctx_p->registers_p + register_end + frame_ctx_p->context_depth == stack_top_p);
|
||||
|
||||
@@ -2273,7 +2213,7 @@ error:
|
||||
JERRY_ASSERT (frame_ctx_p->registers_p + register_end + frame_ctx_p->context_depth == stack_top_p);
|
||||
|
||||
byte_code_p = frame_ctx_p->byte_code_p;
|
||||
stack_top_p[-2] = last_completion_value;
|
||||
stack_top_p[-2] = result;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -2286,7 +2226,6 @@ error:
|
||||
{
|
||||
JERRY_ASSERT (frame_ctx_p->registers_p + register_end + frame_ctx_p->context_depth == stack_top_p);
|
||||
|
||||
result = last_completion_value;
|
||||
byte_code_p = frame_ctx_p->byte_code_p;
|
||||
|
||||
if (VM_GET_CONTEXT_TYPE (stack_top_p[-1]) == VM_CONTEXT_CATCH)
|
||||
@@ -2326,7 +2265,7 @@ error:
|
||||
}
|
||||
|
||||
ecma_free_value (block_result);
|
||||
return last_completion_value;
|
||||
return result;
|
||||
}
|
||||
} /* vm_loop */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user