summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSammy Kaye Powers <sammyk@php.net>2021-01-15 10:07:40 -0800
committerNikita Popov <nikita.ppv@gmail.com>2021-01-28 10:03:41 +0100
commit17142eab22152df8ef3ee6f0d369b87eb87a3f5f (patch)
tree265311b4d02c409e24a1958a756d82ce6e795517
parente9b8b085a7f83f5b4d3007a1f606366631621426 (diff)
downloadphp-git-17142eab22152df8ef3ee6f0d369b87eb87a3f5f.tar.gz
Observe fake closures
Closes GH-6607.
-rw-r--r--Zend/zend_observer.c2
-rw-r--r--ext/zend_test/tests/observer_closure_02.phpt32
2 files changed, 33 insertions, 1 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..9d6cc900e3
--- /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'>