Skip to content

Commit da857c9

Browse files
committed
Merge branch 'PHP-8.1'
* PHP-8.1: Fix get_function_or_method_name when included file is scoped
2 parents fc04a6e + 510061b commit da857c9

File tree

6 files changed

+41
-4
lines changed

6 files changed

+41
-4
lines changed

Zend/zend_execute_API.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,7 @@ ZEND_API zend_string *get_active_function_or_method_name(void) /* {{{ */
558558

559559
ZEND_API zend_string *get_function_or_method_name(const zend_function *func) /* {{{ */
560560
{
561-
if (func->common.scope) {
561+
if (func->common.scope && func->common.function_name) {
562562
return zend_create_member_string(func->common.scope->name, func->common.function_name);
563563
}
564564

ext/zend_test/test.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,15 @@ static ZEND_FUNCTION(zend_weakmap_dump)
291291
RETURN_ARR(zend_array_dup(&ZT_G(global_weakmap)));
292292
}
293293

294+
static ZEND_FUNCTION(zend_get_current_func_name)
295+
{
296+
ZEND_PARSE_PARAMETERS_NONE();
297+
298+
zend_string *function_name = get_function_or_method_name(EG(current_execute_data)->prev_execute_data->func);
299+
300+
RETURN_STR(function_name);
301+
}
302+
294303
/* TESTS Z_PARAM_ITERABLE and Z_PARAM_ITERABLE_OR_NULL */
295304
static ZEND_FUNCTION(zend_iterable)
296305
{

ext/zend_test/test.stub.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ function zend_weakmap_dump(): array {}
109109
function zend_get_unit_enum(): ZendTestUnitEnum {}
110110

111111
function zend_test_parameter_with_attribute(string $parameter): int {}
112+
113+
function zend_get_current_func_name(): string {}
112114
}
113115

114116
namespace ZendTestNS {

ext/zend_test/test_arginfo.h

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: bf10c37919483ac04bc1f788ac6e59b5edab295e */
2+
* Stub hash: 54adf746478423b7e7caa09d417fb97bb9621203 */
33

44
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_test_array_return, 0, 0, IS_ARRAY, 0)
55
ZEND_END_ARG_INFO()
@@ -75,14 +75,16 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_test_parameter_with_attribu
7575
ZEND_ARG_TYPE_INFO(0, parameter, IS_STRING, 0)
7676
ZEND_END_ARG_INFO()
7777

78+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_get_current_func_name, 0, 0, IS_STRING, 0)
79+
ZEND_END_ARG_INFO()
80+
7881
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ZendTestNS2_ZendSubNS_namespaced_func, 0, 0, _IS_BOOL, 0)
7982
ZEND_END_ARG_INFO()
8083

8184
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestClass_is_object, 0, 0, IS_LONG, 0)
8285
ZEND_END_ARG_INFO()
8386

84-
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestClass___toString, 0, 0, IS_STRING, 0)
85-
ZEND_END_ARG_INFO()
87+
#define arginfo_class__ZendTestClass___toString arginfo_zend_get_current_func_name
8688

8789
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_class__ZendTestClass_returnsStatic, 0, 0, IS_STATIC, 0)
8890
ZEND_END_ARG_INFO()
@@ -131,6 +133,7 @@ static ZEND_FUNCTION(zend_weakmap_remove);
131133
static ZEND_FUNCTION(zend_weakmap_dump);
132134
static ZEND_FUNCTION(zend_get_unit_enum);
133135
static ZEND_FUNCTION(zend_test_parameter_with_attribute);
136+
static ZEND_FUNCTION(zend_get_current_func_name);
134137
static ZEND_FUNCTION(namespaced_func);
135138
static ZEND_METHOD(_ZendTestClass, is_object);
136139
static ZEND_METHOD(_ZendTestClass, __toString);
@@ -167,6 +170,7 @@ static const zend_function_entry ext_functions[] = {
167170
ZEND_FE(zend_weakmap_dump, arginfo_zend_weakmap_dump)
168171
ZEND_FE(zend_get_unit_enum, arginfo_zend_get_unit_enum)
169172
ZEND_FE(zend_test_parameter_with_attribute, arginfo_zend_test_parameter_with_attribute)
173+
ZEND_FE(zend_get_current_func_name, arginfo_zend_get_current_func_name)
170174
ZEND_NS_FE("ZendTestNS2\\ZendSubNS", namespaced_func, arginfo_ZendTestNS2_ZendSubNS_namespaced_func)
171175
ZEND_FE_END
172176
};
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<?php
2+
3+
return zend_get_current_func_name();
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
get_function_or_method_name when included file is scoped
3+
--EXTENSIONS--
4+
zend_test
5+
--FILE--
6+
<?php
7+
8+
class Foo
9+
{
10+
public static function bar()
11+
{
12+
return require 'get_function_or_method_name_01.inc';
13+
}
14+
}
15+
16+
var_dump(Foo::bar());
17+
?>
18+
--EXPECT--
19+
string(4) "main"

0 commit comments

Comments
 (0)