MFH: Use a better function name for closure related errors and debug_backtrace()

This commit is contained in:
Johannes Schlüter 2008-11-03 19:28:32 +00:00
parent d4e4cebd65
commit 850f9567b8
3 changed files with 68 additions and 3 deletions

View File

@ -25,7 +25,7 @@ NULL
Notice: Undefined variable: y in %s on line %d
Warning: Missing argument 1 for (), called in %s on line %d and defined in %s on line %d
Warning: Missing argument 1 for {closure}(), called in %s on line %d and defined in %s on line %d
NULL
Catchable fatal error: Argument 1 passed to test() must be an instance of Closure, instance of stdClass given, called in %s on line %d and defined in %s on line %d

View File

@ -0,0 +1,65 @@
--TEST--
Closure 032: Testing Closure and debug_backtrace
--FILE--
<?php
function test(closure $a) {
$a(23);
}
$c = function($param) { print_r(debug_backtrace()); debug_print_backtrace(); };
$c(23);
test($c);
?>
--EXPECTF--
Array
(
[0] => Array
(
[file] => %s
[line] => %d
[function] => {closure}
[args] => Array
(
[0] => 23
)
)
)
#0 {closure}(23) called at [%s:%d]
Array
(
[0] => Array
(
[file] => %s
[line] => %d
[function] => {closure}
[args] => Array
(
[0] => 23
)
)
[1] => Array
(
[file] => %s
[line] => %d
[function] => test
[args] => Array
(
[0] => Closure Object
(
)
)
)
)
#0 {closure}(23) called at [%s:%d]
#1 test(Closure Object ()) called at [%s:%d]

View File

@ -1387,7 +1387,7 @@ void zend_do_begin_lambda_function_declaration(znode *result, znode *function_to
zend_op *current_op;
function_name.op_type = IS_CONST;
ZVAL_STRINGL(&function_name.u.constant, "", sizeof("")-1, 1);
ZVAL_STRINGL(&function_name.u.constant, "{closure}", sizeof("{closure}")-1, 1);
zend_do_begin_function_declaration(function_token, &function_name, 0, return_reference, NULL TSRMLS_CC);
@ -1402,7 +1402,7 @@ void zend_do_begin_lambda_function_declaration(znode *result, znode *function_to
if (is_static) {
CG(active_op_array)->fn_flags |= ZEND_ACC_STATIC;
}
CG(active_op_array)->fn_flags |= ZEND_ACC_CLOSURE;
CG(active_op_array)->fn_flags |= ZEND_ACC_CLOSURE;
}