#define reflection_update_property(object, name, value) do { \
zval member; \
- ZVAL_STRINGL(&member, name, sizeof(name)-1); \
+ ZVAL_STR(&member, name); \
zend_std_write_property(object, &member, value, NULL); \
if (Z_REFCOUNTED_P(value)) Z_DELREF_P(value); \
zval_ptr_dtor(&member); \
} while (0)
+#define reflection_update_property_name(object, value) \
+ reflection_update_property(object, ZSTR_KNOWN(ZEND_STR_NAME), value)
+
+#define reflection_update_property_class(object, value) \
+ reflection_update_property(object, ZSTR_KNOWN(ZEND_STR_CLASS), value)
+
/* Class entry pointers */
PHPAPI zend_class_entry *reflector_ptr;
PHPAPI zend_class_entry *reflection_exception_ptr;
static zend_object_handlers reflection_object_handlers;
-static zval *_default_load_entry(zval *object, char *name, size_t name_len) /* {{{ */
+static zval *_default_load_name(zval *object) /* {{{ */
{
- zval *value;
-
- if ((value = zend_hash_str_find_ind(Z_OBJPROP_P(object), name, name_len)) == NULL) {
- return NULL;
- }
- return value;
+ return zend_hash_find_ind(Z_OBJPROP_P(object), ZSTR_KNOWN(ZEND_STR_NAME));
}
/* }}} */
-static void _default_get_entry(zval *object, char *name, int name_len, zval *return_value) /* {{{ */
+static void _default_get_name(zval *object, zval *return_value) /* {{{ */
{
zval *value;
- if ((value = _default_load_entry(object, name, name_len)) == NULL) {
+ if ((value = _default_load_name(object)) == NULL) {
RETURN_FALSE;
}
ZVAL_COPY(return_value, value);
intern->ptr = ce;
intern->ref_type = REF_TYPE_OTHER;
intern->ce = ce;
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
}
/* }}} */
intern->ptr = module;
intern->ref_type = REF_TYPE_OTHER;
intern->ce = NULL;
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
}
/* }}} */
Z_ADDREF_P(closure_object);
ZVAL_COPY_VALUE(&intern->obj, closure_object);
}
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
}
/* }}} */
Z_ADDREF_P(closure_object);
ZVAL_COPY_VALUE(&intern->obj, closure_object);
}
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
}
/* }}} */
Z_ADDREF_P(closure_object);
ZVAL_COPY_VALUE(&intern->obj, closure_object);
}
- reflection_update_property(object, "name", &name);
- reflection_update_property(object, "class", &classname);
+ reflection_update_property_name(object, &name);
+ reflection_update_property_class(object, &classname);
}
/* }}} */
intern->ref_type = REF_TYPE_PROPERTY;
intern->ce = ce;
intern->ignore_visibility = 0;
- reflection_update_property(object, "name", &name);
- reflection_update_property(object, "class", &classname);
+ reflection_update_property_name(object, &name);
+ reflection_update_property_class(object, &classname);
}
/* }}} */
intern->ref_type = REF_TYPE_CLASS_CONSTANT;
intern->ce = constant->ce;
intern->ignore_visibility = 0;
- reflection_update_property(object, "name", &name);
- reflection_update_property(object, "class", &classname);
+ reflection_update_property_name(object, &name);
+ reflection_update_property_class(object, &classname);
}
/* }}} */
}
ZVAL_STR_COPY(&name, fptr->common.function_name);
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
intern->ptr = fptr;
intern->ref_type = REF_TYPE_FUNCTION;
if (closure) {
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
} else {
ZVAL_NULL(&name);
}
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
ref = (parameter_reference*) emalloc(sizeof(parameter_reference));
ref->arg_info = &arg_info[position];
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
efree(lcname);
ZVAL_STR_COPY(&name, mptr->common.scope->name);
- reflection_update_property(object, "class", &name);
+ reflection_update_property_class(object, &name);
ZVAL_STR_COPY(&name, mptr->common.function_name);
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
intern->ptr = mptr;
intern->ref_type = REF_TYPE_FUNCTION;
intern->ce = ce;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
intern->ref_type = REF_TYPE_CLASS_CONSTANT;
intern->ce = constant->ce;
intern->ignore_visibility = 0;
- reflection_update_property(object, "name", &name);
- reflection_update_property(object, "class", &cname);
+ reflection_update_property_name(object, &name);
+ reflection_update_property_class(object, &cname);
}
/* }}} */
return;
}
GET_REFLECTION_OBJECT_PTR(ref);
- _default_get_entry(getThis(), "name", sizeof("name")-1, &name);
+ _default_get_name(getThis(), &name);
_class_const_string(&str, Z_STRVAL(name), ref, "");
zval_ptr_dtor(&name);
RETURN_STR(smart_str_extract(&str));
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
return;
}
} else {
- if (zend_parse_parameters(ZEND_NUM_ARGS(), "z/", &argument) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "z", &argument) == FAILURE) {
return;
}
}
if (Z_TYPE_P(argument) == IS_OBJECT) {
ZVAL_STR_COPY(&classname, Z_OBJCE_P(argument)->name);
- reflection_update_property(object, "name", &classname);
+ reflection_update_property_name(object, &classname);
intern->ptr = Z_OBJCE_P(argument);
if (is_object) {
- ZVAL_COPY_VALUE(&intern->obj, argument);
- zval_add_ref(argument);
+ ZVAL_COPY(&intern->obj, argument);
}
} else {
convert_to_string_ex(argument);
}
ZVAL_STR_COPY(&classname, ce->name);
- reflection_update_property(object, "name", &classname);
+ reflection_update_property_name(object, &classname);
intern->ptr = ce;
}
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- if ((name = _default_load_entry(getThis(), "name", sizeof("name")-1)) == NULL) {
+ if ((name = _default_load_name(getThis())) == NULL) {
RETURN_FALSE;
}
if (Z_TYPE_P(name) == IS_STRING
ZVAL_STR_COPY(&cname, ce->name);
ZVAL_STRINGL(&propname, name_str, name_len);
}
- reflection_update_property(object, "class", &cname);
- reflection_update_property(object, "name", &propname);
+ reflection_update_property_class(object, &cname);
+ reflection_update_property_name(object, &propname);
reference = (property_reference*) emalloc(sizeof(property_reference));
if (dynam_prop) {
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
GET_REFLECTION_OBJECT_PTR(ref);
if (!(ref->prop.flags & (ZEND_ACC_PUBLIC | ZEND_ACC_IMPLICIT_PUBLIC)) && intern->ignore_visibility == 0) {
- name = _default_load_entry(getThis(), "name", sizeof("name")-1);
+ name = _default_load_name(getThis());
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Cannot access non-public member %s::%s", ZSTR_VAL(intern->ce->name), Z_STRVAL_P(name));
return;
GET_REFLECTION_OBJECT_PTR(ref);
if (!(ref->prop.flags & ZEND_ACC_PUBLIC) && intern->ignore_visibility == 0) {
- name = _default_load_entry(getThis(), "name", sizeof("name")-1);
+ name = _default_load_name(getThis());
zend_throw_exception_ex(reflection_exception_ptr, 0,
"Cannot access non-public member %s::%s", ZSTR_VAL(intern->ce->name), Z_STRVAL_P(name));
return;
}
free_alloca(lcname, use_heap);
ZVAL_STRING(&name, module->name);
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
intern->ptr = module;
intern->ref_type = REF_TYPE_OTHER;
intern->ce = NULL;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- _default_get_entry(getThis(), "name", sizeof("name")-1, return_value);
+ _default_get_name(getThis(), return_value);
}
/* }}} */
return;
}
ZVAL_STRING(&name, extension->name);
- reflection_update_property(object, "name", &name);
+ reflection_update_property_name(object, &name);
intern->ptr = extension;
intern->ref_type = REF_TYPE_OTHER;
intern->ce = NULL;