diff --git a/src/libecmabuiltins/ecma-builtin-global-object.c b/src/libecmabuiltins/ecma-builtin-global-object.c index 6ed7a975b..8ffe43df4 100644 --- a/src/libecmabuiltins/ecma-builtin-global-object.c +++ b/src/libecmabuiltins/ecma-builtin-global-object.c @@ -285,6 +285,7 @@ ecma_builtin_global_get_routine_parameters_number (ecma_magic_string_id_t builti ecma_completion_value_t ecma_builtin_global_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, /**< Global object's built-in routine's name */ + ecma_value_t this_arg_value __unused, /**< 'this' argument value */ ecma_value_t arguments_list [], /**< list of arguments passed to routine */ ecma_length_t arguments_number) /**< length of arguments' list */ { diff --git a/src/libecmabuiltins/ecma-builtin-math-object.c b/src/libecmabuiltins/ecma-builtin-math-object.c index ba1a8d40f..d4cc35a27 100644 --- a/src/libecmabuiltins/ecma-builtin-math-object.c +++ b/src/libecmabuiltins/ecma-builtin-math-object.c @@ -1310,6 +1310,7 @@ ecma_builtin_math_try_to_instantiate_property (ecma_object_t *obj_p, /**< object ecma_completion_value_t ecma_builtin_math_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, /**< Object object's built-in routine's name */ + ecma_value_t this_arg_value __unused, /**< 'this' argument value */ ecma_value_t arguments_list [], /**< list of arguments passed to routine */ ecma_length_t arguments_number) /**< length of arguments' list */ { diff --git a/src/libecmabuiltins/ecma-builtin-object-object.c b/src/libecmabuiltins/ecma-builtin-object-object.c index b9f20a4f2..3ee95f372 100644 --- a/src/libecmabuiltins/ecma-builtin-object-object.c +++ b/src/libecmabuiltins/ecma-builtin-object-object.c @@ -414,6 +414,7 @@ ecma_builtin_object_object_define_property (ecma_value_t arg1, /**< routine's fi ecma_completion_value_t ecma_builtin_object_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, /**< Object object's built-in routine's name */ + ecma_value_t this_arg_value __unused, /**< 'this' argument value */ ecma_value_t arguments_list [], /**< list of arguments passed to routine */ ecma_length_t arguments_number) /**< length of arguments' list */ { diff --git a/src/libecmabuiltins/ecma-builtin-string-object.c b/src/libecmabuiltins/ecma-builtin-string-object.c index ff20fa186..480aa3f33 100644 --- a/src/libecmabuiltins/ecma-builtin-string-object.c +++ b/src/libecmabuiltins/ecma-builtin-string-object.c @@ -270,6 +270,7 @@ ecma_builtin_string_try_to_instantiate_property (ecma_object_t *obj_p, /**< obje ecma_completion_value_t ecma_builtin_string_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, /**< String object's built-in routine's name */ + ecma_value_t this_arg_value __unused, /**< 'this' argument value */ ecma_value_t arguments_list [], /**< list of arguments passed to routine */ ecma_length_t arguments_number) /**< length of arguments' list */ { diff --git a/src/libecmabuiltins/ecma-builtins-internal.h b/src/libecmabuiltins/ecma-builtins-internal.h index 905a602a3..c63e7c5c0 100644 --- a/src/libecmabuiltins/ecma-builtins-internal.h +++ b/src/libecmabuiltins/ecma-builtins-internal.h @@ -55,6 +55,7 @@ extern ecma_length_t ecma_builtin_global_get_routine_parameters_number (ecma_magic_string_id_t routine_id); extern ecma_completion_value_t ecma_builtin_global_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, + ecma_value_t this_arg_value, ecma_value_t arguments_list [], ecma_length_t arguments_number); extern ecma_property_t* @@ -68,6 +69,7 @@ extern ecma_length_t ecma_builtin_object_get_routine_parameters_number (ecma_magic_string_id_t routine_id); extern ecma_completion_value_t ecma_builtin_object_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, + ecma_value_t this_arg_value, ecma_value_t arguments_list [], ecma_length_t arguments_number); extern ecma_property_t* @@ -94,6 +96,7 @@ extern ecma_length_t ecma_builtin_math_get_routine_parameters_number (ecma_magic_string_id_t routine_id); extern ecma_completion_value_t ecma_builtin_math_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, + ecma_value_t this_arg_value, ecma_value_t arguments_list [], ecma_length_t arguments_number); extern ecma_property_t* @@ -105,6 +108,7 @@ extern ecma_length_t ecma_builtin_string_get_routine_parameters_number (ecma_magic_string_id_t routine_id); extern ecma_completion_value_t ecma_builtin_string_dispatch_routine (ecma_magic_string_id_t builtin_routine_id, + ecma_value_t this_arg_value, ecma_value_t arguments_list [], ecma_length_t arguments_number); extern ecma_property_t* diff --git a/src/libecmabuiltins/ecma-builtins.c b/src/libecmabuiltins/ecma-builtins.c index d14fa3e89..5e43ce04c 100644 --- a/src/libecmabuiltins/ecma-builtins.c +++ b/src/libecmabuiltins/ecma-builtins.c @@ -37,6 +37,7 @@ ecma_builtin_get_routine_parameters_number (ecma_builtin_id_t builtin_id, static ecma_completion_value_t ecma_builtin_dispatch_routine (ecma_builtin_id_t builtin_object_id, ecma_magic_string_id_t builtin_routine_id, + ecma_value_t this_arg_value, ecma_value_t arguments_list [], ecma_length_t arguments_number); @@ -307,6 +308,7 @@ ecma_builtin_make_function_object_for_routine (ecma_builtin_id_t builtin_id, /** */ ecma_completion_value_t ecma_builtin_dispatch_call (ecma_object_t *obj_p, /**< built-in object */ + ecma_value_t this_arg_value, /**< 'this' argument value */ ecma_value_t *arguments_list_p, /**< arguments list */ ecma_length_t arguments_list_len) /**< length of the arguments list */ { @@ -334,6 +336,7 @@ ecma_builtin_dispatch_call (ecma_object_t *obj_p, /**< built-in object */ return ecma_builtin_dispatch_routine (built_in_id, routine_id, + this_arg_value, arguments_list_p, arguments_list_len); } @@ -550,6 +553,7 @@ static ecma_completion_value_t ecma_builtin_dispatch_routine (ecma_builtin_id_t builtin_object_id, /**< built-in object' identifier */ ecma_magic_string_id_t builtin_routine_id, /**< name of the built-in object's routine property */ + ecma_value_t this_arg_value, /**< 'this' argument value */ ecma_value_t arguments_list [], /**< list of arguments passed to routine */ ecma_length_t arguments_number) /**< length of arguments' list */ { @@ -558,24 +562,28 @@ ecma_builtin_dispatch_routine (ecma_builtin_id_t builtin_object_id, /**< built-i case ECMA_BUILTIN_ID_GLOBAL: { return ecma_builtin_global_dispatch_routine (builtin_routine_id, + this_arg_value, arguments_list, arguments_number); } case ECMA_BUILTIN_ID_OBJECT: { return ecma_builtin_object_dispatch_routine (builtin_routine_id, + this_arg_value, arguments_list, arguments_number); } case ECMA_BUILTIN_ID_STRING: { return ecma_builtin_string_dispatch_routine (builtin_routine_id, + this_arg_value, arguments_list, arguments_number); } case ECMA_BUILTIN_ID_MATH: { return ecma_builtin_math_dispatch_routine (builtin_routine_id, + this_arg_value, arguments_list, arguments_number); } @@ -603,6 +611,7 @@ ecma_builtin_dispatch_routine (ecma_builtin_id_t builtin_object_id, /**< built-i case ECMA_BUILTIN_ID_JSON: { JERRY_UNIMPLEMENTED_REF_UNUSED_VARS (builtin_routine_id, + this_arg_value, arguments_list, arguments_number); } diff --git a/src/libecmabuiltins/ecma-builtins.h b/src/libecmabuiltins/ecma-builtins.h index 9eb015757..a1f0451c6 100644 --- a/src/libecmabuiltins/ecma-builtins.h +++ b/src/libecmabuiltins/ecma-builtins.h @@ -58,6 +58,7 @@ extern void ecma_finalize_builtins (void); extern ecma_completion_value_t ecma_builtin_dispatch_call (ecma_object_t *obj_p, + ecma_value_t this_arg, ecma_value_t *arguments_list_p, ecma_length_t arguments_list_len); extern ecma_completion_value_t diff --git a/src/libecmaoperations/ecma-function-object.c b/src/libecmaoperations/ecma-function-object.c index f5e2d996a..1186f5b8d 100644 --- a/src/libecmaoperations/ecma-function-object.c +++ b/src/libecmaoperations/ecma-function-object.c @@ -477,7 +477,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */ { if (unlikely (ecma_get_object_is_builtin (func_obj_p))) { - return ecma_builtin_dispatch_call (func_obj_p, arguments_list_p, arguments_list_len); + return ecma_builtin_dispatch_call (func_obj_p, this_arg_value, arguments_list_p, arguments_list_len); } ecma_completion_value_t ret_value; @@ -550,7 +550,7 @@ ecma_op_function_call (ecma_object_t *func_obj_p, /**< Function object */ } else if (ecma_get_object_type (func_obj_p) == ECMA_OBJECT_TYPE_BUILT_IN_FUNCTION) { - return ecma_builtin_dispatch_call (func_obj_p, arguments_list_p, arguments_list_len); + return ecma_builtin_dispatch_call (func_obj_p, this_arg_value, arguments_list_p, arguments_list_len); } else {