diff --git a/Zend/zend.c b/Zend/zend.c index c46c8e9ada86..6b0ffb73ad76 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -1082,7 +1082,6 @@ void zend_startup(zend_utility_functions *utility_functions) /* {{{ */ #endif zend_enum_startup(); - zend_closure_startup(); } /* }}} */ diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index 05b686204481..43eefbeff9da 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -878,8 +878,6 @@ ZEND_API void zend_create_fake_closure(zval *res, zend_function *func, zend_clas } /* }}} */ -static zend_arg_info trampoline_arg_info[1]; - void zend_closure_from_frame(zval *return_value, const zend_execute_data *call) { /* {{{ */ zval instance; zend_internal_function trampoline; @@ -904,9 +902,7 @@ void zend_closure_from_frame(zval *return_value, const zend_execute_data *call) trampoline.function_name = mptr->common.function_name; trampoline.scope = mptr->common.scope; trampoline.doc_comment = NULL; - if (trampoline.fn_flags & ZEND_ACC_VARIADIC) { - trampoline.arg_info = trampoline_arg_info; - } + trampoline.arg_info = mptr->common.arg_info; trampoline.attributes = mptr->common.attributes; zend_free_trampoline(mptr); @@ -943,11 +939,3 @@ void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val) /* { ZVAL_COPY_VALUE(var, val); } /* }}} */ - -void zend_closure_startup(void) -{ - /* __call and __callStatic name the arguments "$arguments" in the docs. */ - trampoline_arg_info[0].name = zend_string_init_interned("arguments", strlen("arguments"), true); - trampoline_arg_info[0].type = (zend_type)ZEND_TYPE_INIT_CODE(IS_MIXED, false, _ZEND_ARG_INFO_FLAGS(false, 1, 0)); - trampoline_arg_info[0].default_value = NULL; -} diff --git a/Zend/zend_closures.h b/Zend/zend_closures.h index a118044c6e24..8bea4ffb051e 100644 --- a/Zend/zend_closures.h +++ b/Zend/zend_closures.h @@ -28,7 +28,6 @@ BEGIN_EXTERN_C() #define ZEND_CLOSURE_OBJECT(op_array) \ ((zend_object*)((char*)(op_array) - sizeof(zend_object))) -void zend_closure_startup(void); void zend_register_closure_ce(void); void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval *var); void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val); diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c index 88b7b1112d7b..baa27fd9e420 100644 --- a/Zend/zend_object_handlers.c +++ b/Zend/zend_object_handlers.c @@ -1685,7 +1685,6 @@ ZEND_API ZEND_ATTRIBUTE_NONNULL zend_function *zend_get_call_trampoline_func( * The low bit must be zero, to not be interpreted as a MAP_PTR offset. */ static const void *dummy = (void*)(intptr_t)2; - static const zend_arg_info arg_info[1] = {{0}}; if (EXPECTED(EG(trampoline).common.function_name == NULL)) { func = &EG(trampoline).op_array; @@ -1732,7 +1731,7 @@ ZEND_API ZEND_ATTRIBUTE_NONNULL zend_function *zend_get_call_trampoline_func( func->prop_info = NULL; func->num_args = 0; func->required_num_args = 0; - func->arg_info = (zend_arg_info *) arg_info; + func->arg_info = zend_call_trampoline_arginfo; return (zend_function*)func; } @@ -2576,6 +2575,7 @@ ZEND_API const zend_object_handlers std_object_handlers = { }; void zend_object_handlers_startup(void) { - zend_call_trampoline_arginfo[0].name = ZSTR_KNOWN(ZEND_STR_ARGS); + zend_call_trampoline_arginfo[0].name = ZSTR_KNOWN(ZEND_STR_ARGUMENTS); + zend_call_trampoline_arginfo[0].type = (zend_type)ZEND_TYPE_INIT_CODE(IS_MIXED, false, _ZEND_ARG_INFO_FLAGS(false, 1, 0)); zend_property_hook_arginfo[0].name = ZSTR_KNOWN(ZEND_STR_VALUE); } diff --git a/Zend/zend_string.h b/Zend/zend_string.h index fc7705ff7865..97386ea6bad6 100644 --- a/Zend/zend_string.h +++ b/Zend/zend_string.h @@ -563,6 +563,7 @@ EMPTY_SWITCH_DEFAULT_CASE() _(ZEND_STR_OBJECT_OPERATOR, "->") \ _(ZEND_STR_PAAMAYIM_NEKUDOTAYIM, "::") \ _(ZEND_STR_ARGS, "args") \ + _(ZEND_STR_ARGUMENTS, "arguments") \ _(ZEND_STR_UNKNOWN, "unknown") \ _(ZEND_STR_UNKNOWN_CAPITALIZED, "Unknown") \ _(ZEND_STR_EXIT, "exit") \