From: Etienne Kneuss Date: Thu, 6 Nov 2008 00:36:29 +0000 (+0000) Subject: Fix #45976 (Move SXE from SPL to SimpleXML) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~75 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e2845f377461654cca10964c2a0deaf27a2ec80;p=php Fix #45976 (Move SXE from SPL to SimpleXML) --- diff --git a/ext/simplexml/config.m4 b/ext/simplexml/config.m4 index 7bc864409e..2145e23d88 100644 --- a/ext/simplexml/config.m4 +++ b/ext/simplexml/config.m4 @@ -17,7 +17,7 @@ if test "$PHP_SIMPLEXML" != "no"; then PHP_SETUP_LIBXML(SIMPLEXML_SHARED_LIBADD, [ AC_DEFINE(HAVE_SIMPLEXML,1,[ ]) - PHP_NEW_EXTENSION(simplexml, simplexml.c, $ext_shared) + PHP_NEW_EXTENSION(simplexml, simplexml.c sxe.c, $ext_shared) PHP_SUBST(SIMPLEXML_SHARED_LIBADD) ], [ AC_MSG_ERROR([xml2-config not found. Please check your libxml2 installation.]) diff --git a/ext/simplexml/config.w32 b/ext/simplexml/config.w32 index 26a87f1c14..9ffb56cd01 100644 --- a/ext/simplexml/config.w32 +++ b/ext/simplexml/config.w32 @@ -4,7 +4,7 @@ ARG_WITH("simplexml", "Simple XML support", "yes"); if (PHP_SIMPLEXML == "yes" && PHP_LIBXML == "yes") { - EXTENSION("simplexml", "simplexml.c"); + EXTENSION("simplexml", "simplexml.c sxe.c"); AC_DEFINE("HAVE_SIMPLEXML", 1, "Simple XML support"); if (!PHP_SIMPLEXML_SHARED) { ADD_FLAG("CFLAGS_SIMPLEXML", "/D LIBXML_STATIC"); diff --git a/ext/simplexml/simplexml.c b/ext/simplexml/simplexml.c index 3f71bbdb82..f8df64a96e 100644 --- a/ext/simplexml/simplexml.c +++ b/ext/simplexml/simplexml.c @@ -25,8 +25,6 @@ #endif #include "php.h" -#if HAVE_LIBXML && HAVE_SIMPLEXML - #include "php_ini.h" #include "ext/standard/info.h" #include "ext/standard/php_string.h" @@ -35,9 +33,7 @@ #include "php_simplexml_exports.h" #include "zend_exceptions.h" #include "zend_interfaces.h" -#ifdef HAVE_SPL -#include "ext/spl/spl_sxe.h" -#endif +#include "sxe.h" #define SXE_ELEMENT_BY_NAME 0 @@ -2617,11 +2613,7 @@ PHP_MINIT_FUNCTION(simplexml) sxe_object_handlers.get_class_entry = zend_get_std_object_handlers()->get_class_entry; sxe_object_handlers.get_class_name = zend_get_std_object_handlers()->get_class_name; -#ifdef HAVE_SPL - if (zend_get_module_started("spl") == SUCCESS) { - PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU); - } -#endif /* HAVE_SPL */ + PHP_MINIT(sxe)(INIT_FUNC_ARGS_PASSTHRU); php_libxml_register_export(sxe_class_entry, simplexml_export_node); @@ -2655,8 +2647,6 @@ PHP_MINFO_FUNCTION(simplexml) } /* }}} */ -#endif - /** * Local Variables: * c-basic-offset: 4 diff --git a/ext/spl/spl_sxe.c b/ext/simplexml/sxe.c similarity index 67% rename from ext/spl/spl_sxe.c rename to ext/simplexml/sxe.c index 5423431538..267a4e2534 100755 --- a/ext/spl/spl_sxe.c +++ b/ext/simplexml/sxe.c @@ -27,34 +27,29 @@ #include "ext/standard/info.h" #include "zend_interfaces.h" -#include "php_spl.h" -#include "spl_functions.h" -#include "spl_engine.h" -#include "spl_iterators.h" -#include "spl_sxe.h" -#include "spl_array.h" +#include "ext/spl/php_spl.h" +#include "ext/spl/spl_iterators.h" +#include "sxe.h" -zend_class_entry *spl_ce_SimpleXMLIterator = NULL; -zend_class_entry *spl_ce_SimpleXMLElement; +zend_class_entry *ce_SimpleXMLIterator = NULL; +zend_class_entry *ce_SimpleXMLElement; -#if HAVE_LIBXML && HAVE_SIMPLEXML - -#include "ext/simplexml/php_simplexml_exports.h" +#include "php_simplexml_exports.h" /* {{{ proto void SimpleXMLIterator::rewind() U Rewind to first element */ -SPL_METHOD(SimpleXMLIterator, rewind) +PHP_METHOD(ce_SimpleXMLIterator, rewind) { php_sxe_iterator iter; iter.sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); - spl_ce_SimpleXMLElement->iterator_funcs.funcs->rewind((zend_object_iterator*)&iter TSRMLS_CC); + ce_SimpleXMLElement->iterator_funcs.funcs->rewind((zend_object_iterator*)&iter TSRMLS_CC); } /* }}} */ /* {{{ proto bool SimpleXMLIterator::valid() U Check whether iteration is valid */ -SPL_METHOD(SimpleXMLIterator, valid) +PHP_METHOD(ce_SimpleXMLIterator, valid) { php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); @@ -64,7 +59,7 @@ SPL_METHOD(SimpleXMLIterator, valid) /* {{{ proto SimpleXMLIterator SimpleXMLIterator::current() U Get current element */ -SPL_METHOD(SimpleXMLIterator, current) +PHP_METHOD(ce_SimpleXMLIterator, current) { php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); @@ -78,7 +73,7 @@ SPL_METHOD(SimpleXMLIterator, current) /* {{{ proto string SimpleXMLIterator::key() U Get name of current child element */ -SPL_METHOD(SimpleXMLIterator, key) +PHP_METHOD(ce_SimpleXMLIterator, key) { xmlNodePtr curnode; php_sxe_object *intern; @@ -100,18 +95,18 @@ SPL_METHOD(SimpleXMLIterator, key) /* {{{ proto void SimpleXMLIterator::next() U Move to next element */ -SPL_METHOD(SimpleXMLIterator, next) +PHP_METHOD(ce_SimpleXMLIterator, next) { php_sxe_iterator iter; iter.sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); - spl_ce_SimpleXMLElement->iterator_funcs.funcs->move_forward((zend_object_iterator*)&iter TSRMLS_CC); + ce_SimpleXMLElement->iterator_funcs.funcs->move_forward((zend_object_iterator*)&iter TSRMLS_CC); } /* }}} */ /* {{{ proto bool SimpleXMLIterator::hasChildren() U Check whether element has children (elements) */ -SPL_METHOD(SimpleXMLIterator, hasChildren) +PHP_METHOD(ce_SimpleXMLIterator, hasChildren) { php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); php_sxe_object *child; @@ -135,7 +130,7 @@ SPL_METHOD(SimpleXMLIterator, hasChildren) /* {{{ proto SimpleXMLIterator SimpleXMLIterator::getChildren() U Get child element iterator */ -SPL_METHOD(SimpleXMLIterator, getChildren) +PHP_METHOD(ce_SimpleXMLIterator, getChildren) { php_sxe_object *sxe = php_sxe_fetch_object(getThis() TSRMLS_CC); @@ -145,46 +140,41 @@ SPL_METHOD(SimpleXMLIterator, getChildren) RETURN_ZVAL(sxe->iter.data, 1, 0); } -static const zend_function_entry spl_funcs_SimpleXMLIterator[] = { - SPL_ME(SimpleXMLIterator, rewind, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, valid, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, current, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, key, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, next, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) - SPL_ME(SimpleXMLIterator, getChildren, NULL, ZEND_ACC_PUBLIC) +static const zend_function_entry funcs_SimpleXMLIterator[] = { + PHP_ME(ce_SimpleXMLIterator, rewind, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, valid, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, current, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, key, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, next, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, hasChildren, NULL, ZEND_ACC_PUBLIC) + PHP_ME(ce_SimpleXMLIterator, getChildren, NULL, ZEND_ACC_PUBLIC) {NULL, NULL, NULL} }; /* }}} */ -SPL_API PHP_MINIT_FUNCTION(spl_sxe) /* {{{ */ +PHP_MINIT_FUNCTION(sxe) /* {{{ */ { zend_class_entry **pce; + zend_class_entry sxi; if (zend_hash_find(CG(class_table), "simplexmlelement", sizeof("SimpleXMLElement"), (void **) &pce) == FAILURE) { - spl_ce_SimpleXMLElement = NULL; - spl_ce_SimpleXMLIterator = NULL; + ce_SimpleXMLElement = NULL; + ce_SimpleXMLIterator = NULL; return SUCCESS; /* SimpleXML must be initialized before */ } - spl_ce_SimpleXMLElement = *pce; - - REGISTER_SPL_SUB_CLASS_EX(SimpleXMLIterator, SimpleXMLElement, spl_ce_SimpleXMLElement->create_object, spl_funcs_SimpleXMLIterator); - REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, RecursiveIterator); - REGISTER_SPL_IMPLEMENTS(SimpleXMLIterator, Countable); + ce_SimpleXMLElement = *pce; - return SUCCESS; -} -/* }}} */ + INIT_CLASS_ENTRY_EX(sxi, "SimpleXMLIterator", strlen("SimpleXMLIterator"), funcs_SimpleXMLIterator); + ce_SimpleXMLIterator = zend_register_internal_class_ex(&sxi, ce_SimpleXMLElement, NULL TSRMLS_CC); + ce_SimpleXMLIterator->create_object = ce_SimpleXMLElement->create_object; -#else /* HAVE_LIBXML && HAVE_SIMPLEXML */ + zend_class_implements(ce_SimpleXMLIterator TSRMLS_CC, 1, spl_ce_RecursiveIterator); + zend_class_implements(ce_SimpleXMLIterator TSRMLS_CC, 1, spl_ce_Countable); -SPL_API PHP_MINIT_FUNCTION(spl_sxe) /* {{{ */ -{ return SUCCESS; } - -#endif /* HAVE_LIBXML && HAVE_SIMPLEXML */ +/* }}} */ /* * Local variables: diff --git a/ext/spl/spl_sxe.h b/ext/simplexml/sxe.h similarity index 88% rename from ext/spl/spl_sxe.h rename to ext/simplexml/sxe.h index eca993e4ae..439e451817 100755 --- a/ext/spl/spl_sxe.h +++ b/ext/simplexml/sxe.h @@ -18,17 +18,16 @@ /* $Id$ */ -#ifndef SPL_SXE_H -#define SPL_SXE_H +#ifndef SXE_H +#define SXE_H #include "php.h" -#include "php_spl.h" -extern zend_class_entry *spl_ce_SimpleXMLIterator; +extern zend_class_entry *ce_SimpleXMLIterator; -SPL_API PHP_MINIT_FUNCTION(spl_sxe); +PHP_MINIT_FUNCTION(sxe); -#endif /* SPL_SXE_H */ +#endif /* SXE_H */ /* * Local Variables: diff --git a/ext/spl/tests/bug42259.phpt b/ext/simplexml/tests/bug42259.phpt similarity index 100% rename from ext/spl/tests/bug42259.phpt rename to ext/simplexml/tests/bug42259.phpt diff --git a/ext/spl/tests/sxe_001.phpt b/ext/simplexml/tests/sxe_001.phpt similarity index 100% rename from ext/spl/tests/sxe_001.phpt rename to ext/simplexml/tests/sxe_001.phpt diff --git a/ext/spl/tests/sxe_002.phpt b/ext/simplexml/tests/sxe_002.phpt similarity index 100% rename from ext/spl/tests/sxe_002.phpt rename to ext/simplexml/tests/sxe_002.phpt diff --git a/ext/spl/tests/sxe_003.phpt b/ext/simplexml/tests/sxe_003.phpt similarity index 100% rename from ext/spl/tests/sxe_003.phpt rename to ext/simplexml/tests/sxe_003.phpt diff --git a/ext/spl/tests/sxe_004.phpt b/ext/simplexml/tests/sxe_004.phpt similarity index 100% rename from ext/spl/tests/sxe_004.phpt rename to ext/simplexml/tests/sxe_004.phpt diff --git a/ext/spl/tests/sxe_005.phpt b/ext/simplexml/tests/sxe_005.phpt similarity index 100% rename from ext/spl/tests/sxe_005.phpt rename to ext/simplexml/tests/sxe_005.phpt diff --git a/ext/spl/config.m4 b/ext/spl/config.m4 index b8b44f21ab..4ae5f8df4f 100755 --- a/ext/spl/config.m4 +++ b/ext/spl/config.m4 @@ -25,6 +25,6 @@ int main(int argc, char **argv) { PHP_INSTALL_HEADERS([ext/spl/]) AC_DEFINE_UNQUOTED(HAVE_PACKED_OBJECT_VALUE, $ac_result, [Whether struct _zend_object_value is packed]) AC_DEFINE(HAVE_SPL, 1, [Whether you want SPL (Standard PHP Library) support]) - PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c, no) - PHP_INSTALL_HEADERS([ext/spl], [php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_sxe.h spl_dllist.h spl_heap.h spl_fixedarray.h]) + PHP_NEW_EXTENSION(spl, php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c, no) + PHP_INSTALL_HEADERS([ext/spl], [php_spl.h spl_array.h spl_directory.h spl_engine.h spl_exceptions.h spl_functions.h spl_iterators.h spl_observer.h spl_dllist.h spl_heap.h spl_fixedarray.h]) PHP_ADD_EXTENSION_DEP(spl, pcre, true) diff --git a/ext/spl/config.w32 b/ext/spl/config.w32 index 5cef9cd354..ffa4d57541 100644 --- a/ext/spl/config.w32 +++ b/ext/spl/config.w32 @@ -1,6 +1,6 @@ // $Id$ // vim:ft=javascript -EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_sxe.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c", false /* never shared */); +EXTENSION("spl", "php_spl.c spl_functions.c spl_engine.c spl_iterators.c spl_array.c spl_directory.c spl_exceptions.c spl_observer.c spl_dllist.c spl_heap.c spl_fixedarray.c", false /* never shared */); AC_DEFINE('HAVE_SPL', 1); PHP_SPL="yes"; diff --git a/ext/spl/package.xml b/ext/spl/package.xml index f99cd7ce41..372aaecd9f 100755 --- a/ext/spl/package.xml +++ b/ext/spl/package.xml @@ -34,8 +34,6 @@ standard problems. - - diff --git a/ext/spl/php_spl.c b/ext/spl/php_spl.c index 8d4c1f7935..6d75c4b823 100755 --- a/ext/spl/php_spl.c +++ b/ext/spl/php_spl.c @@ -32,7 +32,6 @@ #include "spl_array.h" #include "spl_directory.h" #include "spl_iterators.h" -#include "spl_sxe.h" #include "spl_exceptions.h" #include "spl_observer.h" #include "spl_dllist.h" @@ -185,7 +184,6 @@ PHP_FUNCTION(class_implements) SPL_ADD_CLASS(RegexIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(RuntimeException, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SeekableIterator, z_list, sub, allow, ce_flags); \ - SPL_ADD_CLASS(SimpleXMLIterator, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SplDoublyLinkedList, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SplFileInfo, z_list, sub, allow, ce_flags); \ SPL_ADD_CLASS(SplFileObject, z_list, sub, allow, ce_flags); \ @@ -864,7 +862,6 @@ PHP_MINIT_FUNCTION(spl) PHP_MINIT(spl_iterators)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_array)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_directory)(INIT_FUNC_ARGS_PASSTHRU); - PHP_MINIT(spl_sxe)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_dllist)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_heap)(INIT_FUNC_ARGS_PASSTHRU); PHP_MINIT(spl_fixedarray)(INIT_FUNC_ARGS_PASSTHRU); @@ -897,23 +894,10 @@ PHP_RSHUTDOWN_FUNCTION(spl) /* {{{ */ return SUCCESS; } /* }}} */ -#ifdef HAVE_SIMPLEXML -static const zend_module_dep spl_deps[] = { - ZEND_MOD_REQUIRED("libxml") - ZEND_MOD_REQUIRED("simplexml") - {NULL, NULL, NULL} -}; -#endif - /* {{{ spl_module_entry */ zend_module_entry spl_module_entry = { -#ifdef HAVE_SIMPLEXML - STANDARD_MODULE_HEADER_EX, NULL, - spl_deps, -#else STANDARD_MODULE_HEADER, -#endif "SPL", spl_functions, PHP_MINIT(spl),