helly Mon Oct 3 12:04:51 2005 EDT Modified files: /php-src/ext/spl spl_sxe.c /php-src/ext/simplexml php_simplexml_exports.h simplexml.c Log: - Really allow SXE being shared by not using anything from it directly in SPL http://cvs.php.net/diff.php/php-src/ext/spl/spl_sxe.c?r1=1.12&r2=1.13&ty=u Index: php-src/ext/spl/spl_sxe.c diff -u php-src/ext/spl/spl_sxe.c:1.12 php-src/ext/spl/spl_sxe.c:1.13 --- php-src/ext/spl/spl_sxe.c:1.12 Sat Oct 1 11:55:27 2005 +++ php-src/ext/spl/spl_sxe.c Mon Oct 3 12:04:50 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: spl_sxe.c,v 1.12 2005/10/01 15:55:27 helly Exp $ */ +/* $Id: spl_sxe.c,v 1.13 2005/10/03 16:04:50 helly Exp $ */ #ifdef HAVE_CONFIG_H # include "config.h" @@ -34,6 +34,7 @@ #include "spl_sxe.h" zend_class_entry *spl_ce_SimpleXMLIterator = NULL; +zend_class_entry *spl_ce_SimpleXMLElement; #if HAVE_LIBXML && HAVE_SIMPLEXML @@ -41,9 +42,10 @@ SPL_METHOD(SimpleXMLIterator, rewind) /* {{{ */ { - php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); + php_sxe_iterator iter; - php_sxe_reset_iterator(sxe TSRMLS_CC); + iter.sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); + spl_ce_SimpleXMLElement->iterator_funcs.funcs->rewind((zend_object_iterator*)&iter TSRMLS_CC); } /* }}} */ @@ -89,9 +91,10 @@ SPL_METHOD(SimpleXMLIterator, next) /* {{{ */ { - php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); + php_sxe_iterator iter; - php_sxe_move_forward_iterator(sxe TSRMLS_CC); + iter.sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); + spl_ce_SimpleXMLElement->iterator_funcs.funcs->move_forward((zend_object_iterator*)&iter TSRMLS_CC); } /* }}} */ @@ -146,16 +149,17 @@ SPL_API PHP_MINIT_FUNCTION(spl_sxe) /* {{{ */ { - zend_class_entry **pce, *spl_ce_SimpleXMLElement; + zend_class_entry **pce; if (zend_hash_find(CG(class_table), "simplexmlelement", sizeof("SimpleXMLElement"), (void **) &pce) == FAILURE) { + spl_ce_SimpleXMLElement = NULL; spl_ce_SimpleXMLIterator = NULL; return SUCCESS; /* SimpleXML must be initialized before */ } spl_ce_SimpleXMLElement = *pce; - REGISTER_SPL_SUB_CLASS_EX(SimpleXMLIterator, SimpleXMLElement, sxe_object_new, spl_funcs_SimpleXMLIterator); + REGISTER_SPL_SUB_CLASS_EX(SimpleXMLIterator, SimpleXMLElement, spl_ce_SimpleXMLElement->create_object, spl_funcs_SimpleXMLIterator); REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, RecursiveIterator); return SUCCESS; http://cvs.php.net/diff.php/php-src/ext/simplexml/php_simplexml_exports.h?r1=1.3&r2=1.4&ty=u Index: php-src/ext/simplexml/php_simplexml_exports.h diff -u php-src/ext/simplexml/php_simplexml_exports.h:1.3 php-src/ext/simplexml/php_simplexml_exports.h:1.4 --- php-src/ext/simplexml/php_simplexml_exports.h:1.3 Wed Aug 3 10:07:45 2005 +++ php-src/ext/simplexml/php_simplexml_exports.h Mon Oct 3 12:04:50 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_simplexml_exports.h,v 1.3 2005/08/03 14:07:45 sniper Exp $ */ +/* $Id: php_simplexml_exports.h,v 1.4 2005/10/03 16:04:50 helly Exp $ */ #ifndef PHP_SIMPLEXML_EXPORTS_H #define PHP_SIMPLEXML_EXPORTS_H @@ -52,6 +52,11 @@ ZEND_API void php_sxe_reset_iterator(php_sxe_object *sxe TSRMLS_DC); ZEND_API void php_sxe_move_forward_iterator(php_sxe_object *sxe TSRMLS_DC); +typedef struct { + zend_object_iterator intern; + php_sxe_object *sxe; +} php_sxe_iterator; + #endif /* PHP_SIMPLEXML_EXPORTS_H */ /** http://cvs.php.net/diff.php/php-src/ext/simplexml/simplexml.c?r1=1.160&r2=1.161&ty=u Index: php-src/ext/simplexml/simplexml.c diff -u php-src/ext/simplexml/simplexml.c:1.160 php-src/ext/simplexml/simplexml.c:1.161 --- php-src/ext/simplexml/simplexml.c:1.160 Thu Sep 15 12:19:45 2005 +++ php-src/ext/simplexml/simplexml.c Mon Oct 3 12:04:50 2005 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: simplexml.c,v 1.160 2005/09/15 16:19:45 derick Exp $ */ +/* $Id: simplexml.c,v 1.161 2005/10/03 16:04:50 helly Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -1401,11 +1401,6 @@ /* }}} */ -typedef struct { - zend_object_iterator intern; - php_sxe_object *sxe; -} php_sxe_iterator; - static void php_sxe_iterator_dtor(zend_object_iterator *iter TSRMLS_DC); static int php_sxe_iterator_valid(zend_object_iterator *iter TSRMLS_DC); static void php_sxe_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC); @@ -1731,6 +1726,7 @@ sxe.create_object = sxe_object_new; sxe_class_entry = zend_register_internal_class(&sxe TSRMLS_CC); sxe_class_entry->get_iterator = php_sxe_get_iterator; + sxe_class_entry->iterator_funcs.funcs = &php_sxe_iterator_funcs; zend_class_implements(sxe_class_entry TSRMLS_CC, 1, zend_ce_traversable); sxe_object_handlers.get_method = zend_get_std_object_handlers()->get_method; sxe_object_handlers.get_constructor = zend_get_std_object_handlers()->get_constructor; @@ -1769,7 +1765,7 @@ { php_info_print_table_start(); php_info_print_table_header(2, "Simplexml support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.160 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.161 $"); php_info_print_table_row(2, "Schema support", #ifdef LIBXML_SCHEMAS_ENABLED "enabled");
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php