Skip to content

Commit 510061b

Browse files
committed
Merge branch 'PHP-8.0' into PHP-8.1
* PHP-8.0: Fix get_function_or_method_name when included file is scoped
2 parents 5927226 + 74924ad commit 510061b

6 files changed

+40
-2
lines changed

Zend/zend_execute_API.c

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

554554
ZEND_API zend_string *get_function_or_method_name(const zend_function *func) /* {{{ */
555555
{
556-
if (func->common.scope) {
556+
if (func->common.scope && func->common.function_name) {
557557
return zend_create_member_string(func->common.scope->name, func->common.function_name);
558558
}
559559

ext/zend_test/test.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,15 @@ static ZEND_FUNCTION(zend_weakmap_dump)
256256
RETURN_ARR(zend_array_dup(&ZT_G(global_weakmap)));
257257
}
258258

259+
static ZEND_FUNCTION(zend_get_current_func_name)
260+
{
261+
ZEND_PARSE_PARAMETERS_NONE();
262+
263+
zend_string *function_name = get_function_or_method_name(EG(current_execute_data)->prev_execute_data->func);
264+
265+
RETURN_STR(function_name);
266+
}
267+
259268
/* TESTS Z_PARAM_ITERABLE and Z_PARAM_ITERABLE_OR_NULL */
260269
static ZEND_FUNCTION(zend_iterable)
261270
{

ext/zend_test/test.stub.php

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

112112
function zend_test_parameter_with_attribute(string $parameter): int {}
113+
114+
function zend_get_current_func_name(): string {}
113115
}
114116

115117
namespace ZendTestNS {

ext/zend_test/test_arginfo.h

Lines changed: 6 additions & 1 deletion
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: 0a2826d081b33a542c1b2fc9a5812954fcc059f9 */
2+
* Stub hash: 7b0abebae0b0eeea0f45dccb04759fceec1096e3 */
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()
@@ -69,6 +69,9 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_test_parameter_with_attribu
6969
ZEND_ARG_TYPE_INFO(0, parameter, IS_STRING, 0)
7070
ZEND_END_ARG_INFO()
7171

72+
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_zend_get_current_func_name, 0, 0, IS_STRING, 0)
73+
ZEND_END_ARG_INFO()
74+
7275
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ZendTestNS2_ZendSubNS_namespaced_func, 0, 0, _IS_BOOL, 0)
7376
ZEND_END_ARG_INFO()
7477

@@ -124,6 +127,7 @@ static ZEND_FUNCTION(zend_weakmap_remove);
124127
static ZEND_FUNCTION(zend_weakmap_dump);
125128
static ZEND_FUNCTION(zend_get_unit_enum);
126129
static ZEND_FUNCTION(zend_test_parameter_with_attribute);
130+
static ZEND_FUNCTION(zend_get_current_func_name);
127131
static ZEND_FUNCTION(namespaced_func);
128132
static ZEND_METHOD(_ZendTestClass, is_object);
129133
static ZEND_METHOD(_ZendTestClass, __toString);
@@ -159,6 +163,7 @@ static const zend_function_entry ext_functions[] = {
159163
ZEND_FE(zend_weakmap_dump, arginfo_zend_weakmap_dump)
160164
ZEND_FE(zend_get_unit_enum, arginfo_zend_get_unit_enum)
161165
ZEND_FE(zend_test_parameter_with_attribute, arginfo_zend_test_parameter_with_attribute)
166+
ZEND_FE(zend_get_current_func_name, arginfo_zend_get_current_func_name)
162167
ZEND_NS_FE("ZendTestNS2\\ZendSubNS", namespaced_func, arginfo_ZendTestNS2_ZendSubNS_namespaced_func)
163168
ZEND_FE_END
164169
};
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)