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;
 }
 /* }}}*/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.