cvs: ZendEngine2 / zend_compile.c zend_interfaces.c
[email protected] ("Etienne Kneuss")
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvscolder1219602005@cvsserver> |
colder Sun Aug 24 18:20:05 2008 UTC
Modified files:
/ZendEngine2 zend_compile.c zend_interfaces.c
Log:
- Fix the order, and avoid overwriting when implementing Serializable
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.839&r2=1.840&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.839 ZendEngine2/zend_compile.c:1.840
--- ZendEngine2/zend_compile.c:1.839 Sun Aug 24 17:01:21 2008
+++ ZendEngine2/zend_compile.c Sun Aug 24 18:20:03 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_compile.c,v 1.839 2008/08/24 17:01:21 colder Exp $ */
+/* $Id: zend_compile.c,v 1.840 2008/08/24 18:20:03 colder Exp $ */
#include <zend_language_parser.h>
#include "zend.h"
@@ -2888,13 +2888,16 @@
}
ce->parent = parent_ce;
+ /* Transfer parent custom callbacks, if any */
+ if (!ce->serialize) {
+ ce->serialize = parent_ce->serialize;
+ }
+ if (!ce->unserialize) {
+ ce->unserialize = parent_ce->unserialize;
+ }
/* Inherit interfaces */
zend_do_inherit_interfaces(ce, parent_ce TSRMLS_CC);
- /* Copy serialize/unserialize callbacks */
- ce->serialize = parent_ce->serialize;
- ce->unserialize = parent_ce->unserialize;
-
/* Inherit properties */
zend_hash_merge(&ce->default_properties, &parent_ce->default_properties, (void (*)(void *)) zval_add_ref, NULL, sizeof(zval *), 0);
if (parent_ce->type != ce->type) {
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_interfaces.c?r1=1.69&r2=1.70&diff_format=u
Index: ZendEngine2/zend_interfaces.c
diff -u ZendEngine2/zend_interfaces.c:1.69 ZendEngine2/zend_interfaces.c:1.70
--- ZendEngine2/zend_interfaces.c:1.69 Sun Aug 24 17:01:22 2008
+++ ZendEngine2/zend_interfaces.c Sun Aug 24 18:20:03 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_interfaces.c,v 1.69 2008/08/24 17:01:22 colder Exp $ */
+/* $Id: zend_interfaces.c,v 1.70 2008/08/24 18:20:03 colder Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -474,13 +474,17 @@
/* {{{ zend_implement_serializable */
static int zend_implement_serializable(zend_class_entry *interface, zend_class_entry *class_type TSRMLS_DC)
{
- if ((class_type->serialize && class_type->serialize != zend_user_serialize)
- || (class_type->unserialize && class_type->unserialize != zend_user_unserialize)
- ) {
+ if (class_type->parent
+ && (class_type->parent->serialize || class_type->parent->unserialize)
+ && !instanceof_function_ex(class_type->parent, zend_ce_serializable, 1 TSRMLS_CC)) {
return FAILURE;
}
- class_type->serialize = zend_user_serialize;
- class_type->unserialize = zend_user_unserialize;
+ if (!class_type->serialize) {
+ class_type->serialize = zend_user_serialize;
+ }
+ if (!class_type->unserialize) {
+ class_type->unserialize = zend_user_unserialize;
+ }
return SUCCESS;
}
/* }}}*/