Make ReflectionClassConstant->class the declaring class, not the
class on which the constant was fetched. This matches the behavior
for properties and methods.
This commit is contained in:
Nikita Popov 2020-02-28 17:19:37 +01:00
parent 30c2388738
commit 0d06a63ee3
3 changed files with 36 additions and 5 deletions

View file

@ -1245,7 +1245,7 @@ static void reflection_property_factory_str(zend_class_entry *ce, const char *na
}
/* {{{ reflection_class_constant_factory */
static void reflection_class_constant_factory(zend_class_entry *ce, zend_string *name_str, zend_class_constant *constant, zval *object)
static void reflection_class_constant_factory(zend_string *name_str, zend_class_constant *constant, zval *object)
{
reflection_object *intern;
@ -1257,7 +1257,7 @@ static void reflection_class_constant_factory(zend_class_entry *ce, zend_string
intern->ignore_visibility = 0;
ZVAL_STR_COPY(reflection_prop_name(object), name_str);
ZVAL_STR_COPY(reflection_prop_class(object), ce->name);
ZVAL_STR_COPY(reflection_prop_class(object), constant->ce->name);
}
/* }}} */
@ -3473,7 +3473,7 @@ ZEND_METHOD(reflection_class_constant, __construct)
intern->ce = constant->ce;
intern->ignore_visibility = 0;
ZVAL_STR_COPY(reflection_prop_name(object), constname);
ZVAL_STR_COPY(reflection_prop_class(object), ce->name);
ZVAL_STR_COPY(reflection_prop_class(object), constant->ce->name);
}
/* }}} */
@ -4346,7 +4346,7 @@ ZEND_METHOD(reflection_class, getReflectionConstants)
array_init(return_value);
ZEND_HASH_FOREACH_STR_KEY_PTR(&ce->constants_table, name, constant) {
zval class_const;
reflection_class_constant_factory(ce, name, constant, &class_const);
reflection_class_constant_factory(name, constant, &class_const);
zend_hash_next_index_insert(Z_ARRVAL_P(return_value), &class_const);
} ZEND_HASH_FOREACH_END();
}
@ -4395,7 +4395,7 @@ ZEND_METHOD(reflection_class, getReflectionConstant)
if ((constant = zend_hash_find_ptr(&ce->constants_table, name)) == NULL) {
RETURN_FALSE;
}
reflection_class_constant_factory(ce, name, constant, return_value);
reflection_class_constant_factory(name, constant, return_value);
}
/* }}} */