cvs: ZendEngine2 / zend_API.c zend_API.h zend_builtin_functions.c zend_object_handlers.c zend_object_handlers.h zend_operators.h
| From: | Stanislav Malyshev | Date: | Tue, 30 Apr 2002 09:56:48 +0000 |
| Subject: | cvs: ZendEngine2 / zend_API.c zend_API.h zend_builtin_functions.c zend_object_handlers.c zend_object_handlers.h zend_operators.h | ||
| Groups: | php.zend-engine.cvs | ||
| Request: | Send a blank email to php-zend-engine-cvs+get-91@lists.php.net to get a copy of this message | ||
stas Tue Apr 30 05:56:48 2002 EDT
Modified files:
/ZendEngine2 zend_API.c zend_API.h zend_builtin_functions.c
zend_object_handlers.c zend_object_handlers.h
zend_operators.h
Log:
Make OBJCE return zend_class_entry*, also some cleanups
Index: ZendEngine2/zend_API.c
diff -u ZendEngine2/zend_API.c:1.127 ZendEngine2/zend_API.c:1.128
--- ZendEngine2/zend_API.c:1.127 Wed Apr 24 11:46:40 2002
+++ ZendEngine2/zend_API.c Tue Apr 30 05:56:47 2002
@@ -198,23 +198,15 @@
}
}
-ZEND_API zend_class_entry **zend_get_class_entry(zval *zobject)
+ZEND_API zend_class_entry *zend_get_class_entry(zval *zobject)
{
- zend_class_entry **ce;
-
if (Z_OBJ_HT_P(zobject)->get_class_entry) {
TSRMLS_FETCH();
- ce = Z_OBJ_HT_P(zobject)->get_class_entry(zobject TSRMLS_CC);
+ return Z_OBJ_HT_P(zobject)->get_class_entry(zobject TSRMLS_CC);
} else {
- if(!IS_ZEND_STD_OBJECT(*zobject)) {
- zend_error(E_ERROR, "Class entry required for an object without class");
- return NULL;
- }
-
- ce = &(Z_OBJ_P(zobject)->ce);
+ zend_error(E_ERROR, "Class entry requested for an object without PHP class");
+ return NULL;
}
-
- return ce;
}
static int zend_check_class(zval *obj, zend_class_entry *expected_ce)
@@ -615,12 +607,12 @@
ZEND_API int _object_init_ex(zval *arg, zend_class_entry *class_type ZEND_FILE_LINE_DC TSRMLS_DC)
{
- return _object_and_properties_init(arg, class_type, 0 ZEND_FILE_LINE_CC TSRMLS_CC);
+ return _object_and_properties_init(arg, class_type, 0 ZEND_FILE_LINE_RELAY_CC TSRMLS_CC);
}
ZEND_API int _object_init(zval *arg ZEND_FILE_LINE_DC TSRMLS_DC)
{
- return _object_init_ex(arg, zend_standard_class_def ZEND_FILE_LINE_CC TSRMLS_CC);
+ return _object_init_ex(arg, zend_standard_class_def ZEND_FILE_LINE_RELAY_CC TSRMLS_CC);
}
Index: ZendEngine2/zend_API.h
diff -u ZendEngine2/zend_API.h:1.116 ZendEngine2/zend_API.h:1.117
--- ZendEngine2/zend_API.h:1.116 Tue Apr 23 14:06:52 2002
+++ ZendEngine2/zend_API.h Tue Apr 30 05:56:48 2002
@@ -148,7 +148,7 @@
ZEND_API zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callable_name);
ZEND_API char *zend_get_module_version(char *module_name);
-ZEND_API zend_class_entry **zend_get_class_entry(zval *zobject);
+ZEND_API zend_class_entry *zend_get_class_entry(zval *zobject);
#define getThis() (this_ptr)
Index: ZendEngine2/zend_builtin_functions.c
diff -u ZendEngine2/zend_builtin_functions.c:1.117 ZendEngine2/zend_builtin_functions.c:1.118
--- ZendEngine2/zend_builtin_functions.c:1.117 Tue Apr 23 14:06:53 2002
+++ ZendEngine2/zend_builtin_functions.c Tue Apr 30 05:56:48 2002
@@ -502,10 +502,11 @@
}
if (Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
- Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_len, 0 TSRMLS_CC) != SUCCESS) {
- zend_class_entry *ce, **_ce;
+ Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_len, 0 TSRMLS_CC) != SUCCESS) {
+ zend_class_entry *ce;
- if (((_ce = zend_get_class_entry(*arg)) == NULL) || ((ce = *_ce) == NULL)) {
+ ce = zend_get_class_entry(*arg);
+ if (!ce) {
RETURN_FALSE;
}
@@ -532,19 +533,20 @@
if (Z_TYPE_PP(arg) == IS_OBJECT) {
char *name;
zend_uint name_length;
-
- if (Z_OBJ_HT_PP(arg)->get_class_name == NULL ||
- Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_length, 1 TSRMLS_CC) !=
SUCCESS) {
- zend_class_entry *ce, **_ce;
-
- if (!(_ce = zend_get_class_entry(*arg)) || !(ce = *_ce) || !(ce = ce->parent)) {
- RETURN_FALSE;
- }
+ /* first try asking handler for parent class name */
+ if (Z_OBJ_HT_PP(arg)->get_class_name != NULL &&
+ Z_OBJ_HT_PP(arg)->get_class_name(*arg, &name, &name_length, 1 TSRMLS_CC) == SUCCESS)
{
name = ce->name;
name_length = ce->name_length;
+
+ RETURN_STRINGL(name, name_length, 1);
+ }
+ /* then try getting the class entry
+ if successfull, will fall through to standard ce handling */
+ if(!Z_OBJ_HT_PP(arg)->get_class_entry || !(ce = zend_get_class_entry(*arg))) {
+ RETURN_FALSE;
}
- RETURN_STRINGL(name, name_length, 1);
} else if (Z_TYPE_PP(arg) == IS_STRING) {
zend_class_entry **pce;
Index: ZendEngine2/zend_object_handlers.c
diff -u ZendEngine2/zend_object_handlers.c:1.4 ZendEngine2/zend_object_handlers.c:1.5
--- ZendEngine2/zend_object_handlers.c:1.4 Mon Apr 22 10:22:27 2002
+++ ZendEngine2/zend_object_handlers.c Tue Apr 30 05:56:48 2002
@@ -215,6 +215,14 @@
return result;
}
+zend_class_entry *zend_std_object_get_class(zval *object TSRMLS_DC)
+{
+ zend_object *zobj;
+ zobj = Z_OBJ_P(object);
+
+ return zobj->ce;
+}
+
zend_object_handlers std_object_handlers = {
zend_objects_add_ref, /* add_ref */
zend_objects_del_ref, /* del_ref */
@@ -233,8 +241,8 @@
zend_std_get_method, /* get_method */
NULL, /* call_method */
zend_std_get_constructor, /* get_constructor */
- NULL, /* get_class_entry */
- NULL, /* get_class */
+ zend_std_object_get_class, /* get_class_entry */
+ NULL, /* get_class_name */
zend_std_compare_objects /* compare_objects */
};
Index: ZendEngine2/zend_object_handlers.h
diff -u ZendEngine2/zend_object_handlers.h:1.4 ZendEngine2/zend_object_handlers.h:1.5
--- ZendEngine2/zend_object_handlers.h:1.4 Mon Apr 22 10:22:27 2002
+++ ZendEngine2/zend_object_handlers.h Tue Apr 30 05:56:48 2002
@@ -43,7 +43,7 @@
typedef void (*zend_object_delete_obj_t)(zval *object TSRMLS_DC);
typedef zend_object_value (*zend_object_clone_obj_t)(zval *object TSRMLS_DC);
-typedef zend_class_entry **(*zend_object_get_class_entry_t)(zval *object TSRMLS_DC);
+typedef zend_class_entry *(*zend_object_get_class_entry_t)(zval *object TSRMLS_DC);
typedef int (*zend_object_get_class_name_t)(zval *object, char **class_name, zend_uint
*class_name_len, int parent TSRMLS_DC);
typedef int (*zend_object_compare_t)(zval *object1, zval *object2 TSRMLS_DC);
Index: ZendEngine2/zend_operators.h
diff -u ZendEngine2/zend_operators.h:1.55 ZendEngine2/zend_operators.h:1.56
--- ZendEngine2/zend_operators.h:1.55 Tue Apr 23 14:06:54 2002
+++ ZendEngine2/zend_operators.h Tue Apr 30 05:56:48 2002
@@ -235,7 +235,7 @@
#define Z_OBJ_HANDLE(zval) (zval).value.obj.handle
#define Z_OBJ_HT(zval) (zval).value.obj.handlers
#define Z_OBJ(zval) zend_objects_get_address(&(zval))
-#define Z_OBJCE(zval) (*zend_get_class_entry(&(zval)))
+#define Z_OBJCE(zval) zend_get_class_entry(&(zval))
#define Z_OBJPROP(zval) Z_OBJ(zval)->properties
#define Z_RESVAL(zval) (zval).value.lval