]> granicus.if.org Git - php/commitdiff
Fix #45976 (Move SXE from SPL to SimpleXML)
authorEtienne Kneuss <colder@php.net>
Thu, 6 Nov 2008 00:36:29 +0000 (00:36 +0000)
committerEtienne Kneuss <colder@php.net>
Thu, 6 Nov 2008 00:36:29 +0000 (00:36 +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 67% 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 26a87f1c145f96d9d82cf063eed33c5b4be8ca8d..9ffb56cd01573aabd1d5b301f522324cf8530d97 100644 (file)
@@ -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");
index 3f71bbdb82c6d31b2a9d6a65d587f3d2c2948814..f8df64a96e8759eaa57d8a46d06c9c5e5a1e95c0 100644 (file)
@@ -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
similarity index 67%
rename from ext/spl/spl_sxe.c
rename to ext/simplexml/sxe.c
index 54234315389ef39c0ec321043debcf04637632be..267a4e25341fae31132765479c0cc16584836924 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() 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:
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 b8b44f21ab436c96f8801b541758274c15267836..4ae5f8df4fb919b2e665b4d9dd0fca9a6f9e5180 100755 (executable)
@@ -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)
index 5cef9cd35470bba8abe5c5c4d73a68dd4dc3cfbb..ffa4d57541b548866541d69f6eeae51fe35139bf 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 8d4c1f79350152aa122c99036566eb326dfa6aa6..6d75c4b823afe47669f514480e3d6d9954d2e59e 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"
@@ -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),