summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2021-01-28 10:04:17 +0100
committerNikita Popov <nikita.ppv@gmail.com>2021-01-28 10:05:51 +0100
commit6971c720b05623f0d10fa7c44e8fc175e89e0fa3 (patch)
tree07311b9158c7c5fefbaee8644c58b15fff5903be
parent23961ef382e1005db6f8c08f3ecc0002839388a7 (diff)
parent17142eab22152df8ef3ee6f0d369b87eb87a3f5f (diff)
downloadphp-git-6971c720b05623f0d10fa7c44e8fc175e89e0fa3.tar.gz
Merge branch 'PHP-8.0'
* PHP-8.0: Observe fake closures
-rw-r--r--Zend/zend_observer.c2
-rw-r--r--ext/zend_test/tests/observer_closure_02.phpt32
-rw-r--r--ext/zend_test/tests/observer_error_05.phpt2
3 files changed, 34 insertions, 2 deletions
diff --git a/Zend/zend_observer.c b/Zend/zend_observer.c
index a60428ee04..2bb7f9afa2 100644
--- a/Zend/zend_observer.c
+++ b/Zend/zend_observer.c
@@ -29,7 +29,7 @@
#define ZEND_OBSERVER_NOT_OBSERVED ((void *) 2)
#define ZEND_OBSERVABLE_FN(fn_flags) \
- (!(fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_FAKE_CLOSURE)))
+ (!(fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
typedef struct _zend_observer_fcall_data {
// points after the last handler
diff --git a/ext/zend_test/tests/observer_closure_02.phpt b/ext/zend_test/tests/observer_closure_02.phpt
new file mode 100644
index 0000000000..d2fbba5296
--- /dev/null
+++ b/ext/zend_test/tests/observer_closure_02.phpt
@@ -0,0 +1,32 @@
+--TEST--
+Observer: Observability of fake closures
+--SKIPIF--
+<?php if (!extension_loaded('zend_test')) die('skip: zend_test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+class Foo
+{
+ public function bar()
+ {
+ echo 'Called as fake closure.' . PHP_EOL;
+ }
+}
+
+$callable = [new Foo(), 'bar'];
+$closure = \Closure::fromCallable($callable);
+$closure();
+
+echo 'DONE' . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s%eobserver_closure_%d.php' -->
+<file '%s%eobserver_closure_%d.php'>
+ <!-- init Foo::bar() -->
+ <Foo::bar>
+Called as fake closure.
+ </Foo::bar>
+DONE
+</file '%s%eobserver_closure_%d.php'>
diff --git a/ext/zend_test/tests/observer_error_05.phpt b/ext/zend_test/tests/observer_error_05.phpt
index d3e5f67a4e..0a00d16ce7 100644
--- a/ext/zend_test/tests/observer_error_05.phpt
+++ b/ext/zend_test/tests/observer_error_05.phpt
@@ -1,7 +1,7 @@
--TEST--
Observer: End handlers fire after a userland fatal error
--SKIPIF--
-<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+<?php if (!extension_loaded('zend_test')) die('skip: zend_test extension required'); ?>
--INI--
zend_test.observer.enabled=1
zend_test.observer.observe_all=1