cvs: ZendEngine2 / zend_API.c zend_API.h zend_builtin_functions.c zend_object_handlers.c zend_object_handlers.h zend_operators.h

From: 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

« previous php.zend-engine.cvs (#91) next »