Fixing Function objects'[[Construct]] routine

This commit is contained in:
Ruben Ayrapetyan
2014-08-22 21:01:58 +04:00
parent a341fe044b
commit e6c10655c5
+9 -11
View File
@@ -502,29 +502,27 @@ ecma_op_function_construct (ecma_object_t *func_obj_p, /**< Function object */
ecma_deref_object (prototype_p); ecma_deref_object (prototype_p);
// 8. // 8.
ECMA_TRY_CATCH (call_completion, ECMA_FUNCTION_CALL (call_completion,
ecma_op_function_call (func_obj_p, ecma_op_function_call (func_obj_p,
ecma_make_object_value (obj_p), ecma_make_object_value (obj_p),
arguments_list_p, arguments_list_p,
arguments_list_len), arguments_list_len),
ret_value); ret_value);
// 9. // 9.
if (call_completion.type != ECMA_COMPLETION_TYPE_NORMAL if (call_completion.value.value_type == ECMA_TYPE_OBJECT)
|| call_completion.value.value_type == ECMA_TYPE_OBJECT)
{ {
ecma_deref_object (obj_p); ecma_deref_object (obj_p);
ret_value = call_completion; ret_value = ecma_copy_completion_value (call_completion);
} }
else else
{ {
// 10. // 10.
ecma_free_completion_value (call_completion);
ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL, ret_value = ecma_make_completion_value (ECMA_COMPLETION_TYPE_NORMAL,
ecma_make_object_value (obj_p), ecma_make_object_value (obj_p),
ECMA_TARGET_ID_RESERVED); ECMA_TARGET_ID_RESERVED);
} }
ECMA_FINALIZE (call_completion); ECMA_FINALIZE (call_completion);