mirror of
https://github.com/php/php-src.git
synced 2025-08-16 05:58:45 +02:00
Eliminate uses of _default_load_name()
Instead fetch the name from the function/class/property, as appropriate. This makes us independent of the property, and eliminates error conditions related to it.
This commit is contained in:
parent
425c6f5815
commit
ab73d142c9
2 changed files with 69 additions and 92 deletions
|
@ -170,24 +170,13 @@ static inline zend_bool is_closure_invoke(zend_class_entry *ce, zend_string *lcn
|
||||||
&& zend_string_equals_literal(lcname, ZEND_INVOKE_FUNC_NAME);
|
&& zend_string_equals_literal(lcname, ZEND_INVOKE_FUNC_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
static zval *_default_load_name(zval *object) /* {{{ */
|
static void _default_get_name(zval *object, zval *return_value) /* {{{ */
|
||||||
{
|
{
|
||||||
zval *name = reflection_prop_name(object);
|
zval *name = reflection_prop_name(object);
|
||||||
if (Z_ISUNDEF_P(name)) {
|
if (Z_ISUNDEF_P(name)) {
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
/* }}} */
|
|
||||||
|
|
||||||
static void _default_get_name(zval *object, zval *return_value) /* {{{ */
|
|
||||||
{
|
|
||||||
zval *value;
|
|
||||||
|
|
||||||
if ((value = _default_load_name(object)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
RETURN_FALSE;
|
||||||
}
|
}
|
||||||
ZVAL_COPY(return_value, value);
|
ZVAL_COPY(return_value, name);
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -3243,22 +3232,18 @@ ZEND_METHOD(reflection_function, isVariadic)
|
||||||
Returns whether this function is defined in namespace */
|
Returns whether this function is defined in namespace */
|
||||||
ZEND_METHOD(reflection_function, inNamespace)
|
ZEND_METHOD(reflection_function, inNamespace)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_function *fptr;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(fptr);
|
||||||
}
|
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
zend_string *name = fptr->common.function_name;
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
&& backslash > Z_STRVAL_P(name))
|
RETURN_BOOL(backslash && backslash > ZSTR_VAL(name));
|
||||||
{
|
|
||||||
RETURN_TRUE;
|
|
||||||
}
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -3266,20 +3251,19 @@ ZEND_METHOD(reflection_function, inNamespace)
|
||||||
Returns the name of namespace where this function is defined */
|
Returns the name of namespace where this function is defined */
|
||||||
ZEND_METHOD(reflection_function, getNamespaceName)
|
ZEND_METHOD(reflection_function, getNamespaceName)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_function *fptr;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(fptr);
|
||||||
}
|
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
zend_string *name = fptr->common.function_name;
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
&& backslash > Z_STRVAL_P(name))
|
if (backslash && backslash > ZSTR_VAL(name)) {
|
||||||
{
|
RETURN_STRINGL(ZSTR_VAL(name), backslash - ZSTR_VAL(name));
|
||||||
RETURN_STRINGL(Z_STRVAL_P(name), backslash - Z_STRVAL_P(name));
|
|
||||||
}
|
}
|
||||||
RETURN_EMPTY_STRING();
|
RETURN_EMPTY_STRING();
|
||||||
}
|
}
|
||||||
|
@ -3289,22 +3273,21 @@ ZEND_METHOD(reflection_function, getNamespaceName)
|
||||||
Returns the short name of the function (without namespace part) */
|
Returns the short name of the function (without namespace part) */
|
||||||
ZEND_METHOD(reflection_function, getShortName)
|
ZEND_METHOD(reflection_function, getShortName)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_function *fptr;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(fptr);
|
||||||
|
|
||||||
|
zend_string *name = fptr->common.function_name;
|
||||||
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
|
if (backslash && backslash > ZSTR_VAL(name)) {
|
||||||
|
RETURN_STRINGL(backslash + 1, ZSTR_LEN(name) - (backslash - ZSTR_VAL(name) + 1));
|
||||||
}
|
}
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
RETURN_STR_COPY(name);
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
|
||||||
&& backslash > Z_STRVAL_P(name))
|
|
||||||
{
|
|
||||||
RETURN_STRINGL(backslash + 1, Z_STRLEN_P(name) - (backslash - Z_STRVAL_P(name) + 1));
|
|
||||||
}
|
|
||||||
ZVAL_COPY_DEREF(return_value, name);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -5074,22 +5057,18 @@ ZEND_METHOD(reflection_class, getExtensionName)
|
||||||
Returns whether this class is defined in namespace */
|
Returns whether this class is defined in namespace */
|
||||||
ZEND_METHOD(reflection_class, inNamespace)
|
ZEND_METHOD(reflection_class, inNamespace)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_class_entry *ce;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(ce);
|
||||||
}
|
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
zend_string *name = ce->name;
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
&& backslash > Z_STRVAL_P(name))
|
RETURN_BOOL(backslash && backslash > ZSTR_VAL(name));
|
||||||
{
|
|
||||||
RETURN_TRUE;
|
|
||||||
}
|
|
||||||
RETURN_FALSE;
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -5097,20 +5076,19 @@ ZEND_METHOD(reflection_class, inNamespace)
|
||||||
Returns the name of namespace where this class is defined */
|
Returns the name of namespace where this class is defined */
|
||||||
ZEND_METHOD(reflection_class, getNamespaceName)
|
ZEND_METHOD(reflection_class, getNamespaceName)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_class_entry *ce;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(ce);
|
||||||
}
|
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
zend_string *name = ce->name;
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
&& backslash > Z_STRVAL_P(name))
|
if (backslash && backslash > ZSTR_VAL(name)) {
|
||||||
{
|
RETURN_STRINGL(ZSTR_VAL(name), backslash - ZSTR_VAL(name));
|
||||||
RETURN_STRINGL(Z_STRVAL_P(name), backslash - Z_STRVAL_P(name));
|
|
||||||
}
|
}
|
||||||
RETURN_EMPTY_STRING();
|
RETURN_EMPTY_STRING();
|
||||||
}
|
}
|
||||||
|
@ -5120,22 +5098,21 @@ ZEND_METHOD(reflection_class, getNamespaceName)
|
||||||
Returns the short name of the class (without namespace part) */
|
Returns the short name of the class (without namespace part) */
|
||||||
ZEND_METHOD(reflection_class, getShortName)
|
ZEND_METHOD(reflection_class, getShortName)
|
||||||
{
|
{
|
||||||
zval *name;
|
reflection_object *intern;
|
||||||
const char *backslash;
|
zend_class_entry *ce;
|
||||||
|
|
||||||
if (zend_parse_parameters_none() == FAILURE) {
|
if (zend_parse_parameters_none() == FAILURE) {
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
if ((name = _default_load_name(ZEND_THIS)) == NULL) {
|
|
||||||
RETURN_FALSE;
|
GET_REFLECTION_OBJECT_PTR(ce);
|
||||||
|
|
||||||
|
zend_string *name = ce->name;
|
||||||
|
const char *backslash = zend_memrchr(ZSTR_VAL(name), '\\', ZSTR_LEN(name));
|
||||||
|
if (backslash && backslash > ZSTR_VAL(name)) {
|
||||||
|
RETURN_STRINGL(backslash + 1, ZSTR_LEN(name) - (backslash - ZSTR_VAL(name) + 1));
|
||||||
}
|
}
|
||||||
if (Z_TYPE_P(name) == IS_STRING
|
RETURN_STR_COPY(name);
|
||||||
&& (backslash = zend_memrchr(Z_STRVAL_P(name), '\\', Z_STRLEN_P(name)))
|
|
||||||
&& backslash > Z_STRVAL_P(name))
|
|
||||||
{
|
|
||||||
RETURN_STRINGL(backslash + 1, Z_STRLEN_P(name) - (backslash - Z_STRVAL_P(name) + 1));
|
|
||||||
}
|
|
||||||
ZVAL_COPY_DEREF(return_value, name);
|
|
||||||
}
|
}
|
||||||
/* }}} */
|
/* }}} */
|
||||||
|
|
||||||
|
@ -5330,7 +5307,7 @@ ZEND_METHOD(reflection_property, getValue)
|
||||||
{
|
{
|
||||||
reflection_object *intern;
|
reflection_object *intern;
|
||||||
property_reference *ref;
|
property_reference *ref;
|
||||||
zval *object = NULL, *name;
|
zval *object = NULL;
|
||||||
zval *member_p = NULL;
|
zval *member_p = NULL;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) {
|
||||||
|
@ -5340,9 +5317,9 @@ ZEND_METHOD(reflection_property, getValue)
|
||||||
GET_REFLECTION_OBJECT_PTR(ref);
|
GET_REFLECTION_OBJECT_PTR(ref);
|
||||||
|
|
||||||
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
||||||
name = _default_load_name(ZEND_THIS);
|
|
||||||
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
||||||
"Cannot access non-public member %s::$%s", ZSTR_VAL(intern->ce->name), Z_STRVAL_P(name));
|
"Cannot access non-public member %s::$%s",
|
||||||
|
ZSTR_VAL(intern->ce->name), ZSTR_VAL(ref->unmangled_name));
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5384,16 +5361,16 @@ ZEND_METHOD(reflection_property, setValue)
|
||||||
{
|
{
|
||||||
reflection_object *intern;
|
reflection_object *intern;
|
||||||
property_reference *ref;
|
property_reference *ref;
|
||||||
zval *object, *name;
|
zval *object;
|
||||||
zval *value;
|
zval *value;
|
||||||
zval *tmp;
|
zval *tmp;
|
||||||
|
|
||||||
GET_REFLECTION_OBJECT_PTR(ref);
|
GET_REFLECTION_OBJECT_PTR(ref);
|
||||||
|
|
||||||
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
||||||
name = _default_load_name(ZEND_THIS);
|
|
||||||
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
||||||
"Cannot access non-public member %s::$%s", ZSTR_VAL(intern->ce->name), Z_STRVAL_P(name));
|
"Cannot access non-public member %s::$%s",
|
||||||
|
ZSTR_VAL(intern->ce->name), ZSTR_VAL(ref->unmangled_name));
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5421,7 +5398,7 @@ ZEND_METHOD(reflection_property, isInitialized)
|
||||||
{
|
{
|
||||||
reflection_object *intern;
|
reflection_object *intern;
|
||||||
property_reference *ref;
|
property_reference *ref;
|
||||||
zval *object = NULL, *name;
|
zval *object = NULL;
|
||||||
zval *member_p = NULL;
|
zval *member_p = NULL;
|
||||||
|
|
||||||
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) {
|
if (zend_parse_parameters(ZEND_NUM_ARGS(), "|o!", &object) == FAILURE) {
|
||||||
|
@ -5431,9 +5408,9 @@ ZEND_METHOD(reflection_property, isInitialized)
|
||||||
GET_REFLECTION_OBJECT_PTR(ref);
|
GET_REFLECTION_OBJECT_PTR(ref);
|
||||||
|
|
||||||
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
if (!(prop_get_flags(ref) & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
|
||||||
name = _default_load_name(getThis());
|
|
||||||
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
zend_throw_exception_ex(reflection_exception_ptr, 0,
|
||||||
"Cannot access non-public member %s::$%s", ZSTR_VAL(intern->ce->name), Z_STRVAL_P(name));
|
"Cannot access non-public member %s::$%s",
|
||||||
|
ZSTR_VAL(intern->ce->name), ZSTR_VAL(ref->unmangled_name));
|
||||||
RETURN_THROWS();
|
RETURN_THROWS();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@ abstract class ReflectionFunctionAbstract implements Reflector
|
||||||
/** @return string|false */
|
/** @return string|false */
|
||||||
public function getName() {}
|
public function getName() {}
|
||||||
|
|
||||||
/** @return string|false */
|
/** @return string */
|
||||||
public function getNamespaceName() {}
|
public function getNamespaceName() {}
|
||||||
|
|
||||||
/** @return int */
|
/** @return int */
|
||||||
|
@ -75,7 +75,7 @@ abstract class ReflectionFunctionAbstract implements Reflector
|
||||||
/** @return ReflectionParameter[] */
|
/** @return ReflectionParameter[] */
|
||||||
public function getParameters() {}
|
public function getParameters() {}
|
||||||
|
|
||||||
/** @return string|false */
|
/** @return string */
|
||||||
public function getShortName() {}
|
public function getShortName() {}
|
||||||
|
|
||||||
/** @return int|false */
|
/** @return int|false */
|
||||||
|
@ -349,10 +349,10 @@ class ReflectionClass implements Reflector
|
||||||
/** @return bool */
|
/** @return bool */
|
||||||
public function inNamespace() {}
|
public function inNamespace() {}
|
||||||
|
|
||||||
/** @return string|false */
|
/** @return string */
|
||||||
public function getNamespaceName() {}
|
public function getNamespaceName() {}
|
||||||
|
|
||||||
/** @return string|false */
|
/** @return string */
|
||||||
public function getShortName() {}
|
public function getShortName() {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue