cvs: ZendEngine2(PHP_5_3) / zend_compile.c zend_interfaces.c zend_interfaces.h
[email protected] ("Etienne Kneuss")
| Newsgroups | php.zend-engine.cvs |
|---|---|
| Message-ID | <cvscolder1219602153@cvsserver> |
colder Sun Aug 24 18:22:33 2008 UTC
Modified files: (Branch: PHP_5_3)
/ZendEngine2 zend_compile.c zend_interfaces.c zend_interfaces.h
Log:
MFH:
- Copy custom callback to the child class if any
- Prevent overwriting valid parent callbacks when implementing Serializable
- Export zend_user_(un)serialize to be available for custom callbacks
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_compile.c?r1=1.647.2.27.2.41.2.83&r2=1.647.2.27.2.41.2.84&diff_format=u
Index: ZendEngine2/zend_compile.c
diff -u ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.83 ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.84
--- ZendEngine2/zend_compile.c:1.647.2.27.2.41.2.83 Fri Aug 22 15:54:20 2008
+++ ZendEngine2/zend_compile.c Sun Aug 24 18:22:33 2008
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.83 2008/08/22 15:54:20 felipe Exp $ */
+/* $Id: zend_compile.c,v 1.647.2.27.2.41.2.84 2008/08/24 18:22:33 colder Exp $ */
#include <zend_language_parser.h>
#include "zend.h"
@@ -2780,6 +2780,14 @@
}
ce->parent = parent_ce;
+ /* Copy serialize/unserialize callbacks */
+ 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);
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_interfaces.c?r1=1.33.2.4.2.6.2.5&r2=1.33.2.4.2.6.2.6&diff_format=u
Index: ZendEngine2/zend_interfaces.c
diff -u ZendEngine2/zend_interfaces.c:1.33.2.4.2.6.2.5 ZendEngine2/zend_interfaces.c:1.33.2.4.2.6.2.6
--- ZendEngine2/zend_interfaces.c:1.33.2.4.2.6.2.5 Thu Jul 24 09:42:15 2008
+++ ZendEngine2/zend_interfaces.c Sun Aug 24 18:22:33 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_interfaces.c,v 1.33.2.4.2.6.2.5 2008/07/24 09:42:15 dmitry Exp $ */
+/* $Id: zend_interfaces.c,v 1.33.2.4.2.6.2.6 2008/08/24 18:22:33 colder Exp $ */
#include "zend.h"
#include "zend_API.h"
@@ -405,7 +405,7 @@
/* }}}*/
/* {{{ zend_user_serialize */
-int zend_user_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC)
+ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC)
{
zend_class_entry * ce = Z_OBJCE_P(object);
zval *retval;
@@ -442,7 +442,7 @@
/* }}} */
/* {{{ zend_user_unserialize */
-int zend_user_unserialize(zval **object, zend_class_entry *ce, const unsigned char *buf, zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC)
+ZEND_API int zend_user_unserialize(zval **object, zend_class_entry *ce, const unsigned char *buf, zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC)
{
zval * zdata;
@@ -466,13 +466,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;
}
/* }}}*/
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_interfaces.h?r1=1.11.2.1.2.2.2.1&r2=1.11.2.1.2.2.2.2&diff_format=u
Index: ZendEngine2/zend_interfaces.h
diff -u ZendEngine2/zend_interfaces.h:1.11.2.1.2.2.2.1 ZendEngine2/zend_interfaces.h:1.11.2.1.2.2.2.2
--- ZendEngine2/zend_interfaces.h:1.11.2.1.2.2.2.1 Mon Dec 31 07:17:04 2007
+++ ZendEngine2/zend_interfaces.h Sun Aug 24 18:22:33 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_interfaces.h,v 1.11.2.1.2.2.2.1 2007/12/31 07:17:04 sebastian Exp $ */
+/* $Id: zend_interfaces.h,v 1.11.2.1.2.2.2.2 2008/08/24 18:22:33 colder Exp $ */
#ifndef ZEND_INTERFACES_H
#define ZEND_INTERFACES_H
@@ -61,6 +61,9 @@
ZEND_API void zend_register_interfaces(TSRMLS_D);
+ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len, zend_serialize_data *data TSRMLS_DC);
+ZEND_API int zend_user_unserialize(zval **object, zend_class_entry *ce, const unsigned char *buf, zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC);
+
END_EXTERN_C()
#endif /* ZEND_INTERFACES_H */