Fixing ecma_builtin_jerry_dispatch_routine: returning 'undefined' instead of 'empty' completion value.

This commit is contained in:
Ruben Ayrapetyan
2015-04-02 15:06:29 +03:00
parent a32b149a1a
commit 3da56908aa
2 changed files with 73 additions and 64 deletions
@@ -260,7 +260,7 @@ ecma_builtin_jerry_dispatch_routine (uint16_t builtin_routine_id, /**< built-in
} }
else else
{ {
return ecma_make_empty_completion_value (); return ecma_make_simple_completion_value (ECMA_SIMPLE_VALUE_UNDEFINED);
} }
} /* ecma_builtin_jerry_dispatch_routine */ } /* ecma_builtin_jerry_dispatch_routine */
@@ -465,17 +465,20 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
JERRY_ASSERT(ecma_op_is_callable (ecma_make_object_value (func_obj_p))); JERRY_ASSERT(ecma_op_is_callable (ecma_make_object_value (func_obj_p)));
JERRY_ASSERT(arguments_list_len == 0 || arguments_list_p != NULL); JERRY_ASSERT(arguments_list_len == 0 || arguments_list_p != NULL);
ecma_completion_value_t ret_value;
if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION) if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_FUNCTION)
{ {
if (unlikely (ecma_get_object_is_builtin (func_obj_p))) if (unlikely (ecma_get_object_is_builtin (func_obj_p)))
{ {
return ecma_builtin_dispatch_call (func_obj_p, this_arg_value, arguments_list_p, arguments_list_len); ret_value = ecma_builtin_dispatch_call (func_obj_p,
this_arg_value,
arguments_list_p,
arguments_list_len);
} }
else
ecma_completion_value_t ret_value; {
/* Entering Function Code (ECMA-262 v5, 10.4.3) */ /* Entering Function Code (ECMA-262 v5, 10.4.3) */
ecma_property_t *scope_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_SCOPE); ecma_property_t *scope_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_SCOPE);
ecma_property_t *code_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_CODE); ecma_property_t *code_prop_p = ecma_get_internal_property (func_obj_p, ECMA_INTERNAL_PROPERTY_CODE);
@@ -538,12 +541,14 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
ecma_deref_object (local_env_p); ecma_deref_object (local_env_p);
ecma_free_value (this_binding, true); ecma_free_value (this_binding, true);
}
return ret_value;
} }
else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION)
{ {
return ecma_builtin_dispatch_call (func_obj_p, this_arg_value, arguments_list_p, arguments_list_len); ret_value = ecma_builtin_dispatch_call (func_obj_p,
this_arg_value,
arguments_list_p,
arguments_list_len);
} }
else else
{ {
@@ -551,6 +556,10 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */
JERRY_UNIMPLEMENTED ("Bound functions are not implemented."); JERRY_UNIMPLEMENTED ("Bound functions are not implemented.");
} }
JERRY_ASSERT (!ecma_is_completion_value_empty (ret_value));
return ret_value;
} /* ecma_op_function_call */ } /* ecma_op_function_call */
/** /**