Commit 8776c7ead17 for php.net
commit 8776c7ead1758850aa3d1c9fcfd00062262dd8ee
Author: ndossche <niels.dossche@ugent.be>
Date: Tue Jan 20 14:13:33 2026 +0100
Extend zend_test internal function handler to also print leave (with return info if requested) and exception state
diff --git a/Zend/tests/attributes/nodiscard/007.phpt b/Zend/tests/attributes/nodiscard/007.phpt
index 1b72de8c22a..de4604e15e4 100644
--- a/Zend/tests/attributes/nodiscard/007.phpt
+++ b/Zend/tests/attributes/nodiscard/007.phpt
@@ -12,6 +12,8 @@
?>
--EXPECTF--
<!-- internal enter NoDiscard::__construct() -->
+<!-- internal leave NoDiscard::__construct() -->
Warning: The return value of function zend_test_nodiscard() should either be used or intentionally ignored by casting it as (void), custom message in %s on line %d
<!-- internal enter zend_test_nodiscard() -->
+<!-- internal leave zend_test_nodiscard() -->
diff --git a/ext/zend_test/observer.c b/ext/zend_test/observer.c
index a6b43912a14..9c6bf6b674c 100644
--- a/ext/zend_test/observer.c
+++ b/ext/zend_test/observer.c
@@ -303,6 +303,21 @@ static void zend_test_execute_internal(zend_execute_data *execute_data, zval *re
} else {
fbc->internal_function.handler(execute_data, return_value);
}
+
+ if (fbc->common.function_name) {
+ if (EG(exception)) {
+ php_printf("%*s<!-- Exception: %s -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(EG(exception)->ce->name));
+ }
+
+ smart_str retval_info = {0};
+ get_retval_info(return_value, &retval_info);
+ if (fbc->common.scope) {
+ php_printf("%*s<!-- internal leave %s::%s()%s -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name), retval_info.s ? ZSTR_VAL(retval_info.s) : "");
+ } else {
+ php_printf("%*s<!-- internal leave %s()%s -->\n", 2 * ZT_G(observer_nesting_depth), "", ZSTR_VAL(fbc->common.function_name), retval_info.s ? ZSTR_VAL(retval_info.s) : "");
+ }
+ smart_str_free(&retval_info);
+ }
}
static ZEND_INI_MH(zend_test_observer_OnUpdateCommaList)
diff --git a/ext/zend_test/tests/execute_internal.phpt b/ext/zend_test/tests/execute_internal.phpt
index ce6cb851aed..3983e6f2b8d 100644
--- a/ext/zend_test/tests/execute_internal.phpt
+++ b/ext/zend_test/tests/execute_internal.phpt
@@ -4,6 +4,7 @@
zend_test
--INI--
zend_test.observer.execute_internal=1
+zend_test.observer.show_return_value=1
--FILE--
<?php
@@ -14,8 +15,11 @@ function f($a) {
f(time() > 0 ? [1, 2, 3] : []);
?>
---EXPECT--
+--EXPECTF--
<!-- internal enter time() -->
+<!-- internal leave time():%d -->
<!-- internal enter array_sum() -->
+<!-- internal leave array_sum():6 -->
<!-- internal enter var_dump() -->
int(6)
+<!-- internal leave var_dump():NULL -->