Skip to content

Commit e4d79ce

Browse files
authored
Declare ext/reflection constants in stubs (#9111)
1 parent c854816 commit e4d79ce

File tree

3 files changed

+242
-35
lines changed

3 files changed

+242
-35
lines changed

ext/reflection/php_reflection.c

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@
4545
#include "zend_smart_str.h"
4646
#include "zend_enum.h"
4747
#include "zend_fibers.h"
48+
49+
#define REFLECTION_ATTRIBUTE_IS_INSTANCEOF (1 << 1)
50+
4851
#include "php_reflection_arginfo.h"
4952

5053
/* Key used to avoid leaking addresses in ReflectionProperty::getId() */
@@ -115,12 +118,6 @@ PHPAPI zend_class_entry *reflection_fiber_ptr;
115118
target = intern->ptr; \
116119
} while (0)
117120

118-
/* Class constants */
119-
#define REGISTER_REFLECTION_CLASS_CONST_LONG(class_name, const_name, value) \
120-
zend_declare_class_constant_long(reflection_ ## class_name ## _ptr, const_name, sizeof(const_name)-1, (zend_long)value);
121-
122-
#define REFLECTION_ATTRIBUTE_IS_INSTANCEOF (1 << 1)
123-
124121
/* {{{ Object structure */
125122

126123
/* Struct for properties */
@@ -7135,8 +7132,6 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
71357132
reflection_function_ptr = register_class_ReflectionFunction(reflection_function_abstract_ptr);
71367133
reflection_function_ptr->create_object = reflection_objects_new;
71377134

7138-
REGISTER_REFLECTION_CLASS_CONST_LONG(function, "IS_DEPRECATED", ZEND_ACC_DEPRECATED);
7139-
71407135
reflection_generator_ptr = register_class_ReflectionGenerator();
71417136
reflection_generator_ptr->create_object = reflection_objects_new;
71427137

@@ -7158,42 +7153,18 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
71587153
reflection_method_ptr = register_class_ReflectionMethod(reflection_function_abstract_ptr);
71597154
reflection_method_ptr->create_object = reflection_objects_new;
71607155

7161-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_STATIC", ZEND_ACC_STATIC);
7162-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_PUBLIC", ZEND_ACC_PUBLIC);
7163-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_PROTECTED", ZEND_ACC_PROTECTED);
7164-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_PRIVATE", ZEND_ACC_PRIVATE);
7165-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_ABSTRACT", ZEND_ACC_ABSTRACT);
7166-
REGISTER_REFLECTION_CLASS_CONST_LONG(method, "IS_FINAL", ZEND_ACC_FINAL);
7167-
71687156
reflection_class_ptr = register_class_ReflectionClass(reflector_ptr);
71697157
reflection_class_ptr->create_object = reflection_objects_new;
71707158

7171-
/* IS_IMPLICIT_ABSTRACT is not longer used */
7172-
REGISTER_REFLECTION_CLASS_CONST_LONG(class, "IS_IMPLICIT_ABSTRACT", ZEND_ACC_IMPLICIT_ABSTRACT_CLASS);
7173-
REGISTER_REFLECTION_CLASS_CONST_LONG(class, "IS_EXPLICIT_ABSTRACT", ZEND_ACC_EXPLICIT_ABSTRACT_CLASS);
7174-
REGISTER_REFLECTION_CLASS_CONST_LONG(class, "IS_FINAL", ZEND_ACC_FINAL);
7175-
REGISTER_REFLECTION_CLASS_CONST_LONG(class, "IS_READONLY", ZEND_ACC_READONLY_CLASS);
7176-
71777159
reflection_object_ptr = register_class_ReflectionObject(reflection_class_ptr);
71787160
reflection_object_ptr->create_object = reflection_objects_new;
71797161

71807162
reflection_property_ptr = register_class_ReflectionProperty(reflector_ptr);
71817163
reflection_property_ptr->create_object = reflection_objects_new;
71827164

7183-
REGISTER_REFLECTION_CLASS_CONST_LONG(property, "IS_STATIC", ZEND_ACC_STATIC);
7184-
REGISTER_REFLECTION_CLASS_CONST_LONG(property, "IS_READONLY", ZEND_ACC_READONLY);
7185-
REGISTER_REFLECTION_CLASS_CONST_LONG(property, "IS_PUBLIC", ZEND_ACC_PUBLIC);
7186-
REGISTER_REFLECTION_CLASS_CONST_LONG(property, "IS_PROTECTED", ZEND_ACC_PROTECTED);
7187-
REGISTER_REFLECTION_CLASS_CONST_LONG(property, "IS_PRIVATE", ZEND_ACC_PRIVATE);
7188-
71897165
reflection_class_constant_ptr = register_class_ReflectionClassConstant(reflector_ptr);
71907166
reflection_class_constant_ptr->create_object = reflection_objects_new;
71917167

7192-
REGISTER_REFLECTION_CLASS_CONST_LONG(class_constant, "IS_PUBLIC", ZEND_ACC_PUBLIC);
7193-
REGISTER_REFLECTION_CLASS_CONST_LONG(class_constant, "IS_PROTECTED", ZEND_ACC_PROTECTED);
7194-
REGISTER_REFLECTION_CLASS_CONST_LONG(class_constant, "IS_PRIVATE", ZEND_ACC_PRIVATE);
7195-
REGISTER_REFLECTION_CLASS_CONST_LONG(class_constant, "IS_FINAL", ZEND_ACC_FINAL);
7196-
71977168
reflection_extension_ptr = register_class_ReflectionExtension(reflector_ptr);
71987169
reflection_extension_ptr->create_object = reflection_objects_new;
71997170

@@ -7218,8 +7189,6 @@ PHP_MINIT_FUNCTION(reflection) /* {{{ */
72187189
reflection_fiber_ptr = register_class_ReflectionFiber();
72197190
reflection_fiber_ptr->create_object = reflection_objects_new;
72207191

7221-
REGISTER_REFLECTION_CLASS_CONST_LONG(attribute, "IS_INSTANCEOF", REFLECTION_ATTRIBUTE_IS_INSTANCEOF);
7222-
72237192
REFLECTION_G(key_initialized) = 0;
72247193

72257194
return SUCCESS;

ext/reflection/php_reflection.stub.php

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,12 @@ public function getAttributes(?string $name = null, int $flags = 0): array {}
113113

114114
class ReflectionFunction extends ReflectionFunctionAbstract
115115
{
116+
/**
117+
* @var int
118+
* @cvalue ZEND_ACC_DEPRECATED
119+
*/
120+
public const IS_DEPRECATED = UNKNOWN;
121+
116122
public function __construct(Closure|string $function) {}
117123

118124
public function __toString(): string {}
@@ -161,6 +167,37 @@ public function getExecutingGenerator(): Generator {}
161167

162168
class ReflectionMethod extends ReflectionFunctionAbstract
163169
{
170+
/**
171+
* @var int
172+
* @cvalue ZEND_ACC_STATIC
173+
*/
174+
public const IS_STATIC = UNKNOWN;
175+
/**
176+
* @var int
177+
* @cvalue ZEND_ACC_PUBLIC
178+
*/
179+
public const IS_PUBLIC = UNKNOWN;
180+
/**
181+
* @var int
182+
* @cvalue ZEND_ACC_PROTECTED
183+
*/
184+
public const IS_PROTECTED = UNKNOWN;
185+
/**
186+
* @var int
187+
* @cvalue ZEND_ACC_PRIVATE
188+
*/
189+
public const IS_PRIVATE = UNKNOWN;
190+
/**
191+
* @var int
192+
* @cvalue ZEND_ACC_ABSTRACT
193+
*/
194+
public const IS_ABSTRACT = UNKNOWN;
195+
/**
196+
* @var int
197+
* @cvalue ZEND_ACC_FINAL
198+
*/
199+
public const IS_FINAL = UNKNOWN;
200+
164201
public string $class;
165202

166203
public function __construct(object|string $objectOrMethod, ?string $method = null) {}
@@ -215,6 +252,28 @@ public function setAccessible(bool $accessible): void {}
215252
/** @not-serializable */
216253
class ReflectionClass implements Reflector
217254
{
255+
/**
256+
* @var int
257+
* @cvalue ZEND_ACC_IMPLICIT_ABSTRACT_CLASS
258+
* @todo deprecate
259+
*/
260+
public const IS_IMPLICIT_ABSTRACT = UNKNOWN;
261+
/**
262+
* @var int
263+
* @cvalue ZEND_ACC_EXPLICIT_ABSTRACT_CLASS
264+
*/
265+
public const IS_EXPLICIT_ABSTRACT = UNKNOWN;
266+
/**
267+
* @var int
268+
* @cvalue ZEND_ACC_FINAL
269+
*/
270+
public const IS_FINAL = UNKNOWN;
271+
/**
272+
* @var int
273+
* @cvalue ZEND_ACC_READONLY_CLASS
274+
*/
275+
public const IS_READONLY = UNKNOWN;
276+
218277
public string $name;
219278

220279
private function __clone(): void {}
@@ -391,6 +450,32 @@ public function __construct(object $object) {}
391450
/** @not-serializable */
392451
class ReflectionProperty implements Reflector
393452
{
453+
/**
454+
* @var int
455+
* @cvalue ZEND_ACC_STATIC
456+
*/
457+
public const IS_STATIC = UNKNOWN;
458+
/**
459+
* @var int
460+
* @cvalue ZEND_ACC_READONLY
461+
*/
462+
public const IS_READONLY = UNKNOWN;
463+
/**
464+
* @var int
465+
* @cvalue ZEND_ACC_PUBLIC
466+
*/
467+
public const IS_PUBLIC = UNKNOWN;
468+
/**
469+
* @var int
470+
* @cvalue ZEND_ACC_PROTECTED
471+
*/
472+
public const IS_PROTECTED = UNKNOWN;
473+
/**
474+
* @var int
475+
* @cvalue ZEND_ACC_PRIVATE
476+
*/
477+
public const IS_PRIVATE = UNKNOWN;
478+
394479
public string $name;
395480
public string $class;
396481

@@ -461,6 +546,27 @@ public function getAttributes(?string $name = null, int $flags = 0): array {}
461546
/** @not-serializable */
462547
class ReflectionClassConstant implements Reflector
463548
{
549+
/**
550+
* @var int
551+
* @cvalue ZEND_ACC_PUBLIC
552+
*/
553+
public const IS_PUBLIC = UNKNOWN;
554+
/**
555+
* @var int
556+
* @cvalue ZEND_ACC_PROTECTED
557+
*/
558+
public const IS_PROTECTED = UNKNOWN;
559+
/**
560+
* @var int
561+
* @cvalue ZEND_ACC_PRIVATE
562+
*/
563+
public const IS_PRIVATE = UNKNOWN;
564+
/**
565+
* @var int
566+
* @cvalue ZEND_ACC_FINAL
567+
*/
568+
public const IS_FINAL = UNKNOWN;
569+
464570
public string $name;
465571
public string $class;
466572

@@ -704,6 +810,12 @@ private function __construct() {}
704810
/** @not-serializable */
705811
class ReflectionAttribute implements Reflector
706812
{
813+
/**
814+
* @var int
815+
* @cvalue REFLECTION_ATTRIBUTE_IS_INSTANCEOF
816+
*/
817+
public const IS_INSTANCEOF = UNKNOWN;
818+
707819
public function getName(): string {}
708820
public function getTarget(): int {}
709821
public function isRepeated(): bool {}

0 commit comments

Comments
 (0)