summaryrefslogtreecommitdiff
path: root/ext/reflection/php_reflection.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/reflection/php_reflection.c')
-rw-r--r--ext/reflection/php_reflection.c41
1 files changed, 24 insertions, 17 deletions
diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c
index af2139bc0..de1a2f08d 100644
--- a/ext/reflection/php_reflection.c
+++ b/ext/reflection/php_reflection.c
@@ -20,7 +20,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.53 2009/02/01 15:06:19 cseiler Exp $ */
+/* $Id: php_reflection.c,v 1.164.2.33.2.45.2.58 2009/06/16 14:33:33 felipe Exp $ */
#ifdef HAVE_CONFIG_H
#include "config.h"
@@ -191,7 +191,7 @@ typedef enum {
REF_TYPE_OTHER, /* Must be 0 */
REF_TYPE_FUNCTION,
REF_TYPE_PARAMETER,
- REF_TYPE_PROPERTY,
+ REF_TYPE_PROPERTY
} reflection_type_t;
/* Struct for reflection objects */
@@ -218,6 +218,7 @@ static void _default_get_entry(zval *object, char *name, int name_len, zval *ret
INIT_PZVAL(return_value);
}
+#ifdef ilia_0
static void _default_lookup_entry(zval *object, char *name, int name_len, zval **return_value TSRMLS_DC) /* {{{ */
{
zval **value;
@@ -229,6 +230,7 @@ static void _default_lookup_entry(zval *object, char *name, int name_len, zval *
}
}
/* }}} */
+#endif
static void reflection_register_implement(zend_class_entry *class_entry, zend_class_entry *interface_entry TSRMLS_DC)
{
@@ -1236,7 +1238,7 @@ static void reflection_method_factory(zend_class_entry *ce, zend_function *metho
MAKE_STD_ZVAL(name);
MAKE_STD_ZVAL(classname);
ZVAL_STRING(name, method->common.function_name, 1);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+ ZVAL_STRINGL(classname, method->common.scope->name, method->common.scope->name_length, 1);
reflection_instantiate(reflection_method_ptr, object TSRMLS_CC);
intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
intern->ptr = method;
@@ -1279,7 +1281,7 @@ static void reflection_property_factory(zend_class_entry *ce, zend_property_info
MAKE_STD_ZVAL(name);
MAKE_STD_ZVAL(classname);
ZVAL_STRING(name, prop_name, 1);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
+ ZVAL_STRINGL(classname, prop->ce->name, prop->ce->name_length, 1);
reflection_instantiate(reflection_property_ptr, object TSRMLS_CC);
intern = (reflection_object *) zend_object_store_get_object(object TSRMLS_CC);
@@ -2480,11 +2482,6 @@ ZEND_METHOD(reflection_method, __construct)
zval_dtor(&ztmp);
}
- MAKE_STD_ZVAL(classname);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
-
- zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-
lcname = zend_str_tolower_dup(name_str, name_len);
if (ce == zend_ce_closure && orig_obj && (name_len == sizeof(ZEND_INVOKE_FUNC_NAME)-1)
@@ -2500,6 +2497,11 @@ ZEND_METHOD(reflection_method, __construct)
}
efree(lcname);
+ MAKE_STD_ZVAL(classname);
+ ZVAL_STRINGL(classname, mptr->common.scope->name, mptr->common.scope->name_length, 1);
+
+ zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
+
MAKE_STD_ZVAL(name);
ZVAL_STRING(name, mptr->common.function_name, 1);
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &name, sizeof(zval *), NULL);
@@ -4324,17 +4326,18 @@ ZEND_METHOD(reflection_property, __construct)
}
}
- MAKE_STD_ZVAL(classname);
- ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
- zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
-
+ MAKE_STD_ZVAL(classname);
MAKE_STD_ZVAL(propname);
+
if (dynam_prop == 0) {
zend_unmangle_property_name(property_info->name, property_info->name_length, &class_name, &prop_name);
+ ZVAL_STRINGL(classname, property_info->ce->name, property_info->ce->name_length, 1);
ZVAL_STRING(propname, prop_name, 1);
} else {
+ ZVAL_STRINGL(classname, ce->name, ce->name_length, 1);
ZVAL_STRINGL(propname, name_str, name_len, 1);
}
+ zend_hash_update(Z_OBJPROP_P(object), "class", sizeof("class"), (void **) &classname, sizeof(zval *), NULL);
zend_hash_update(Z_OBJPROP_P(object), "name", sizeof("name"), (void **) &propname, sizeof(zval *), NULL);
reference = (property_reference*) emalloc(sizeof(property_reference));
@@ -4489,7 +4492,7 @@ ZEND_METHOD(reflection_property, getValue)
return;
}
zend_unmangle_property_name(ref->prop.name, ref->prop.name_length, &class_name, &prop_name);
- member_p = zend_read_property(Z_OBJCE_P(object), object, prop_name, strlen(prop_name), 1 TSRMLS_CC);
+ member_p = zend_read_property(ref->ce, object, prop_name, strlen(prop_name), 1 TSRMLS_CC);
*return_value= *member_p;
zval_copy_ctor(return_value);
INIT_PZVAL(return_value);
@@ -4567,7 +4570,7 @@ ZEND_METHOD(reflection_property, setValue)
return;
}
zend_unmangle_property_name(ref->prop.name, ref->prop.name_length, &class_name, &prop_name);
- zend_update_property(Z_OBJCE_P(object), object, prop_name, strlen(prop_name), value TSRMLS_CC);
+ zend_update_property(ref->ce, object, prop_name, strlen(prop_name), value TSRMLS_CC);
}
}
/* }}} */
@@ -4600,6 +4603,10 @@ ZEND_METHOD(reflection_property, getDeclaringClass)
break;
}
ce = tmp_ce;
+ if (tmp_ce == tmp_info->ce) {
+ /* declared in this class, done */
+ break;
+ }
tmp_ce = tmp_ce->parent;
}
@@ -5435,7 +5442,7 @@ PHP_MINFO_FUNCTION(reflection) /* {{{ */
php_info_print_table_start();
php_info_print_table_header(2, "Reflection", "enabled");
- php_info_print_table_row(2, "Version", "$Revision: 1.164.2.33.2.45.2.53 $");
+ php_info_print_table_row(2, "Version", "$Revision: 1.164.2.33.2.45.2.58 $");
php_info_print_table_end();
} /* }}} */
@@ -5449,7 +5456,7 @@ zend_module_entry reflection_module_entry = { /* {{{ */
NULL,
NULL,
PHP_MINFO(reflection),
- "$Revision: 1.164.2.33.2.45.2.53 $",
+ "$Revision: 1.164.2.33.2.45.2.58 $",
STANDARD_MODULE_PROPERTIES
}; /* }}} */