diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 46f5efd173f..c914f1fd737 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -3001,8 +3001,10 @@ int zend_recv_handler(ZEND_OPCODE_HANDLER_ARGS) zend_uint arg_num = opline->op1.u.constant.value.lval; if (zend_ptr_stack_get_arg(arg_num, (void **) ¶m TSRMLS_CC)==FAILURE) { + char *space; + char *class_name = get_active_class_name(&space TSRMLS_CC); zend_verify_arg_type((zend_function *) EG(active_op_array), arg_num, NULL TSRMLS_CC); - zend_error(E_WARNING, "Missing argument %ld for %s()", opline->op1.u.constant.value.lval, get_active_function_name(TSRMLS_C)); + zend_error(E_WARNING, "Missing argument %ld for %s%s%s()", opline->op1.u.constant.value.lval, class_name, space, get_active_function_name(TSRMLS_C)); if (opline->result.op_type == IS_VAR) { PZVAL_UNLOCK(*EX_T(opline->result.u.var).var.ptr_ptr); } diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 70d6f15d03b..d4d02a49e70 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -142,6 +142,7 @@ void execute_new_code(TSRMLS_D); /* services */ +ZEND_API char *get_active_class_name(char **space TSRMLS_DC); ZEND_API char *get_active_function_name(TSRMLS_D); ZEND_API char *zend_get_executed_filename(TSRMLS_D); ZEND_API uint zend_get_executed_lineno(TSRMLS_D); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index c2ea664636a..7f4b1f7f334 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -297,6 +297,35 @@ void shutdown_executor(TSRMLS_D) } +/* return class name and "::" or "". */ +ZEND_API char *get_active_class_name(char **space TSRMLS_DC) +{ + if (!zend_is_executing(TSRMLS_C)) { + if (space) { + *space = ""; + } + return ""; + } + switch (EG(function_state_ptr)->function->type) { + case ZEND_USER_FUNCTION: + case ZEND_INTERNAL_FUNCTION: + { + zend_class_entry *ce = EG(function_state_ptr)->function->common.scope; + + if (space) { + *space = ce ? "::" : ""; + } + return ce ? ce->name : ""; + } + default: + if (space) { + *space = ""; + } + return ""; + } +} + + ZEND_API char *get_active_function_name(TSRMLS_D) { if (!zend_is_executing(TSRMLS_C)) { diff --git a/main/main.c b/main/main.c index 83c8633c690..680a7b49226 100644 --- a/main/main.c +++ b/main/main.c @@ -424,34 +424,6 @@ static int php_during_module_shutdown() } /* }}} */ -/* {{{ get_active_class_name */ -static char *get_active_class_name(char **space TSRMLS_DC) -{ - if (!zend_is_executing(TSRMLS_C)) { - if (space) { - *space = ""; - } - return ""; - } - switch (EG(function_state_ptr)->function->type) { - case ZEND_USER_FUNCTION: - case ZEND_INTERNAL_FUNCTION: - { - zend_class_entry *ce = EG(function_state_ptr)->function->common.scope; - - if (space) { - *space = ce ? "::" : ""; - } - return ce ? ce->name : ""; - } - default: - if (space) { - *space = ""; - } - return ""; - } -} -/* }}} */ /* }}} */ /* {{{ php_verror */