]> granicus.if.org Git - php/commitdiff
MFH: Fix #45976 (Move SXE from SPL to SimpleXML)
authorEtienne Kneuss <colder@php.net>
Thu, 6 Nov 2008 00:37:13 +0000 (00:37 +0000)
committerEtienne Kneuss <colder@php.net>
Thu, 6 Nov 2008 00:37:13 +0000 (00:37 +0000)
15 files changed:
ext/simplexml/config.m4
ext/simplexml/config.w32
ext/simplexml/simplexml.c
ext/simplexml/sxe.c [moved from ext/spl/spl_sxe.c with 66% similarity]
ext/simplexml/sxe.h [moved from ext/spl/spl_sxe.h with 88% similarity]
ext/simplexml/tests/bug42259.phpt [moved from ext/spl/tests/bug42259.phpt with 100% similarity]
ext/simplexml/tests/sxe_001.phpt [moved from ext/spl/tests/sxe_001.phpt with 100% similarity]
ext/simplexml/tests/sxe_002.phpt [moved from ext/spl/tests/sxe_002.phpt with 100% similarity]
ext/simplexml/tests/sxe_003.phpt [moved from ext/spl/tests/sxe_003.phpt with 100% similarity]
ext/simplexml/tests/sxe_004.phpt [moved from ext/spl/tests/sxe_004.phpt with 100% similarity]
ext/simplexml/tests/sxe_005.phpt [moved from ext/spl/tests/sxe_005.phpt with 100% similarity]
ext/spl/config.m4
ext/spl/config.w32
ext/spl/package.xml
ext/spl/php_spl.c

index 7bc864409e58109838476ed188506f2b5450de54..2145e23d887534ccf73c25e644db303e5a97a51b 100644 (file)
@@ -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.])
index a16b842787edb1bf321a1734ebc919d6ab71e19a..52eeb0c6d4d8e323b133ca47acf15d832c05bae5 100644 (file)
@@ -5,7 +5,7 @@ ARG_WITH("simplexml", "Simple XML support", "yes");
 
 if (PHP_SIMPLEXML == "yes" && PHP_LIBXML == "yes"
        &&      ADD_EXTENSION_DEP('simplexml', 'libxml')) {
-       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");
index 0820b0ea2ffbd0aa914a68cfc380fc5555c65a3b..d1912204c8d2dd4ba4b5ff26c21fba11dd8ae998 100644 (file)
@@ -34,9 +34,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
 
@@ -2535,14 +2533,11 @@ 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_libxml_register_export(sxe_class_entry, simplexml_export_node);
 
+       PHP_MINIT(sxe)(INIT_FUNC_ARGS_PASSTHRU);
+
        return SUCCESS;
 }
 /* }}} */
similarity index 66%
rename from ext/spl/spl_sxe.c
rename to ext/simplexml/sxe.c
index 5670ab61380176ceb48d851da42b8926799719de..491185350cd40a47d324d877b561a6a766b75ffc 100755 (executable)
 #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()
  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()
  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()
  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()
  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()
  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()
  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()
  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:
similarity index 88%
rename from ext/spl/spl_sxe.h
rename to ext/simplexml/sxe.h
index eca993e4aebc70c991626d796e342fc652e8e10e..439e451817fd065d3d00f3ffecf9ae25cc171194 100755 (executable)
 
 /* $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:
index f4e9b5ba5bbab1d2dab0f6ef9ad630f6454e6275..a0f0d1a06d0129e17e184084feefe701f40dcf96 100755 (executable)
@@ -22,6 +22,6 @@ int main(int argc, char **argv) {
   CPPFLAGS=$old_CPPFLAGS
   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)
index eeaec58bf6c552c337846aeab48be2a9b5581d1d..e594b0eb485bcc455035ab45dd7874e597ac9b5f 100644 (file)
@@ -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";
index f99cd7ce41aef4a5b8329e4ef214ee271373f244..372aaecd9fe26a15297af7d1e3f25e4df0aea16b 100755 (executable)
@@ -34,8 +34,6 @@ standard problems.
    <file role="src" name="spl_functions.h"/>
    <file role="src" name="spl_iterators.c"/>
    <file role="src" name="spl_iterators.h"/>
-   <file role="src" name="spl_sxe.c"/>
-   <file role="src" name="spl_sxe.h"/>
    <file role="doc" name="CREDITS"/>
    <file role="doc" name="README"/>
    <file role="doc" name="TODO"/>
index 22a264bde7f749293b4d5b2b512e2bb4c71129b3..8039ed1a47327eca5627ad02c663621aa7725a97 100755 (executable)
@@ -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"
@@ -191,7 +190,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); \
@@ -844,7 +842,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);
@@ -877,23 +874,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),