]> granicus.if.org Git - php/commitdiff
Make DOM compile
authorNikita Popov <nikic@php.net>
Tue, 15 Apr 2014 18:30:41 +0000 (20:30 +0200)
committerNikita Popov <nikic@php.net>
Tue, 15 Apr 2014 18:32:47 +0000 (20:32 +0200)
Just make it compile, not work yet...

23 files changed:
ext/dom/cdatasection.c
ext/dom/characterdata.c
ext/dom/comment.c
ext/dom/document.c
ext/dom/documentfragment.c
ext/dom/documenttype.c
ext/dom/dom_iterators.c
ext/dom/domerror.c
ext/dom/domimplementationlist.c
ext/dom/domlocator.c
ext/dom/domstringlist.c
ext/dom/element.c
ext/dom/entity.c
ext/dom/entityreference.c
ext/dom/namednodemap.c
ext/dom/node.c
ext/dom/nodelist.c
ext/dom/notation.c
ext/dom/php_dom.c
ext/dom/processinginstruction.c
ext/dom/text.c
ext/dom/typeinfo.c
ext/dom/xpath.c

index 6ca1ffcf0c3f33d0861444b71ead68d0cf8cbc39..a2f058946482b3834566b71289d97e6a38511987 100644 (file)
@@ -71,14 +71,12 @@ PHP_METHOD(domcdatasection, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-       if (intern != NULL) {
-               oldnode = dom_object_get_node(intern);
-               if (oldnode != NULL) {
-                       php_libxml_node_free_resource(oldnode  TSRMLS_CC);
-               }
-               php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
+       oldnode = dom_object_get_node(intern);
+       if (oldnode != NULL) {
+               php_libxml_node_free_resource(oldnode  TSRMLS_CC);
        }
+       php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
 }
 /* }}} end DOMCdataSection::__construct */
 
index 92eb2801593577515d46a92b0b79577e7470168f..b1b5d76d26e3377dae72351c3d1af9157f3418fc 100644 (file)
@@ -76,25 +76,21 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-72AB8359
 Since: 
 */
-int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_characterdata_data_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNodePtr nodep;
+       xmlNodePtr nodep = dom_object_get_node(obj);
        xmlChar *content;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       
        if ((content = xmlNodeGetContent(nodep)) != NULL) {
-               ZVAL_STRING(*retval, content, 1);
+               ZVAL_STRING(retval, content);
                xmlFree(content);
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
@@ -102,31 +98,19 @@ int dom_characterdata_data_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 int dom_characterdata_data_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       xmlNode *nodep;
-
-       nodep = dom_object_get_node(obj);
+       xmlNode *nodep = dom_object_get_node(obj);
+       zend_string *str;
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       if (newval->type != IS_STRING) {
-               if(Z_REFCOUNT_P(newval) > 1) {
-                       value_copy = *newval;
-                       zval_copy_ctor(&value_copy);
-                       newval = &value_copy;
-               }
-               convert_to_string(newval);
-       }
+       str = zval_get_string(newval TSRMLS_CC);
 
-       xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
-       }
+       xmlNodeSetContentLen(nodep, str->val, str->len + 1);
 
+       STR_RELEASE(str);
        return SUCCESS;
 }
 
@@ -137,21 +121,17 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7D61178C
 Since: 
 */
-int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_characterdata_length_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNodePtr nodep;
+       xmlNodePtr nodep = dom_object_get_node(obj);
        xmlChar *content;
        long length = 0;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       
        content = xmlNodeGetContent(nodep);
 
        if (content) {
@@ -159,7 +139,7 @@ int dom_characterdata_length_read(dom_object *obj, zval **retval TSRMLS_DC)
                xmlFree(content);
        }
 
-       ZVAL_LONG(*retval, length);
+       ZVAL_LONG(retval, length);
 
        return SUCCESS;
 }
@@ -207,7 +187,7 @@ PHP_FUNCTION(dom_characterdata_substring_data)
        xmlFree(cur);
 
        if (substring) {
-               RETVAL_STRING(substring, 1);
+               RETVAL_STRING(substring);
                xmlFree(substring);
        } else {
                RETVAL_EMPTY_STRING();
index eb181ec454b93f54ffac0a25fb44ff26e21bba4f..0670337651294fea1b626d70c4565692839792d9 100644 (file)
@@ -71,7 +71,7 @@ PHP_METHOD(domcomment, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
        if (intern != NULL) {
                oldnode = dom_object_get_node(intern);
                if (oldnode != NULL) {
index 73ca6a95b3b262fa4712c5eb6a56f1051a78c9df..c27d7663936f0558e7933ba499293a72dd09a23c 100644 (file)
@@ -280,7 +280,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-87CD092
 Since: 
 */
-int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_document_element_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
        xmlNode *root;
@@ -306,7 +306,7 @@ int dom_document_document_element_read(dom_object *obj, zval **retval TSRMLS_DC)
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-encoding
 Since: DOM Level 3
 */
-int dom_document_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
        char *encoding;
@@ -338,7 +338,7 @@ int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
                return FAILURE;
        }
 
-       str = zval_get_string(newval TSMLRS_CC);
+       str = zval_get_string(newval TSRMLS_CC);
 
        handler = xmlFindCharEncodingHandler(Z_STRVAL_P(newval));
 
@@ -347,7 +347,7 @@ int dom_document_encoding_write(dom_object *obj, zval *newval TSRMLS_DC)
                if (docp->encoding != NULL) {
                        xmlFree((xmlChar *)docp->encoding);
                }
-               docp->encoding = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
+               docp->encoding = xmlStrdup((const xmlChar *) str->val);
     } else {
                php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Document Encoding");
     }
@@ -363,10 +363,9 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-standalone
 Since: DOM Level 3
 */
-int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_standalone_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlDoc *docp;
-       int standalone;
 
        docp = (xmlDocPtr) dom_object_get_node(obj);
 
@@ -375,47 +374,22 @@ int dom_document_standalone_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       standalone = docp->standalone;
-       ZVAL_BOOL(*retval, standalone);
-
+       ZVAL_BOOL(retval, docp->standalone);
        return SUCCESS;
 }
 
 int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       xmlDoc *docp;
+       xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
        int standalone;
 
-       docp = (xmlDocPtr) dom_object_get_node(obj);
-
        if (docp == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_long(newval);
-
-       standalone = Z_LVAL_P(newval);
-    if (standalone > 0) {
-        docp->standalone = 1;
-    }
-    else if (standalone < 0) {
-        docp->standalone = -1;
-    }
-    else {
-        docp->standalone = 0;
-    }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
-       }
+       standalone = zval_get_long(newval TSRMLS_CC);
+       docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
 
        return SUCCESS;
 }
@@ -427,25 +401,22 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-version
 Since: DOM Level 3
 */
-int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_version_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDoc *docp;
+       xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
        char *version;
 
-       docp = (xmlDocPtr) dom_object_get_node(obj);
-
        if (docp == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
        version = (char *) docp->version;
-       ALLOC_ZVAL(*retval);
 
        if (version != NULL) {
-               ZVAL_STRING(*retval, version, 1);
+               ZVAL_STRING(retval, version);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -453,10 +424,8 @@ int dom_document_version_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       xmlDoc *docp;
-
-       docp = (xmlDocPtr) dom_object_get_node(obj);
+       xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
+       zend_string *str;
 
        if (docp == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -467,21 +436,11 @@ int dom_document_version_write(dom_object *obj, zval *newval TSRMLS_DC)
                xmlFree((xmlChar *) docp->version );
        }
 
-       if (newval->type != IS_STRING) {
-               if(Z_REFCOUNT_P(newval) > 1) {
-                       value_copy = *newval;
-                       zval_copy_ctor(&value_copy);
-                       newval = &value_copy;
-               }
-               convert_to_string(newval);
-       }
-
-       docp->version = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
+       str = zval_get_string(newval TSRMLS_CC);
 
-       if (newval == &value_copy) {
-               zval_dtor(newval);
-       }
+       docp->version = xmlStrdup((const xmlChar *) str->val);
 
+       STR_RELEASE(str);
        return SUCCESS;
 }
 
@@ -492,39 +451,23 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-strictErrorChecking
 Since: DOM Level 3
 */
-int dom_document_strict_error_checking_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_strict_error_checking_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->stricterror);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->stricterror);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
 
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->stricterror = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->stricterror = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -535,39 +478,22 @@ int dom_document_strict_error_checking_write(dom_object *obj, zval *newval TSRML
 /* {{{ formatOutput    boolean 
 readonly=no
 */
-int dom_document_format_output_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_format_output_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->formatoutput);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->formatoutput);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->formatoutput = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->formatoutput = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -577,39 +503,22 @@ int dom_document_format_output_write(dom_object *obj, zval *newval TSRMLS_DC)
 /* {{{ validateOnParse boolean 
 readonly=no
 */
-int    dom_document_validate_on_parse_read(dom_object *obj, zval **retval TSRMLS_DC)
+int    dom_document_validate_on_parse_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->validateonparse);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->validateonparse);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->validateonparse = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->validateonparse = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -619,39 +528,22 @@ int dom_document_validate_on_parse_write(dom_object *obj, zval *newval TSRMLS_DC
 /* {{{ resolveExternals        boolean 
 readonly=no
 */
-int dom_document_resolve_externals_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_resolve_externals_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->resolveexternals);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->resolveexternals);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->resolveexternals = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->resolveexternals = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -661,39 +553,22 @@ int dom_document_resolve_externals_write(dom_object *obj, zval *newval TSRMLS_DC
 /* {{{ preserveWhiteSpace      boolean 
 readonly=no
 */
-int dom_document_preserve_whitespace_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_preserve_whitespace_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->preservewhitespace);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->preservewhitespace);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->preservewhitespace = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->preservewhitespace = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -703,39 +578,22 @@ int dom_document_preserve_whitespace_write(dom_object *obj, zval *newval TSRMLS_
 /* {{{ recover boolean 
 readonly=no
 */
-int dom_document_recover_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_recover_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->recover);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->recover);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->recover = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->recover = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -745,39 +603,22 @@ int dom_document_recover_write(dom_object *obj, zval *newval TSRMLS_DC)
 /* {{{ substituteEntities      boolean 
 readonly=no
 */
-int dom_document_substitue_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_substitue_entities_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       dom_doc_propsptr doc_prop;
-
-       ALLOC_ZVAL(*retval);
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               ZVAL_BOOL(*retval, doc_prop->substituteentities);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               ZVAL_BOOL(retval, doc_prop->substituteentities);
        } else {
-               ZVAL_FALSE(*retval);
+               ZVAL_FALSE(retval);
        }
        return SUCCESS;
 }
 
 int dom_document_substitue_entities_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       dom_doc_propsptr doc_prop;
-
-       if(Z_REFCOUNT_P(newval) > 1) {
-               value_copy = *newval;
-               zval_copy_ctor(&value_copy);
-               newval = &value_copy;
-       }
-       convert_to_boolean(newval);
-
        if (obj->document) {
-               doc_prop = dom_get_doc_props(obj->document);
-               doc_prop->substituteentities = Z_LVAL_P(newval);
-       }
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
+               dom_doc_propsptr doc_prop = dom_get_doc_props(obj->document);
+               doc_prop->substituteentities = zend_is_true(newval TSRMLS_CC);
        }
 
        return SUCCESS;
@@ -789,24 +630,21 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-documentURI
 Since: DOM Level 3
 */
-int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_document_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDoc *docp;
+       xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
        char *url;
 
-       docp = (xmlDocPtr) dom_object_get_node(obj);
-
        if (docp == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        url = (char *) docp->URL;
        if (url != NULL) {
-               ZVAL_STRING(*retval, url, 1);
+               ZVAL_STRING(retval, url);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -814,10 +652,8 @@ int dom_document_document_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       xmlDoc *docp;
-
-       docp = (xmlDocPtr) dom_object_get_node(obj);
+       xmlDoc *docp = (xmlDocPtr) dom_object_get_node(obj);
+       zend_string *str;
 
        if (docp == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -828,21 +664,11 @@ int dom_document_document_uri_write(dom_object *obj, zval *newval TSRMLS_DC)
                xmlFree((xmlChar *) docp->URL);
        }
 
-       if (newval->type != IS_STRING) {
-               if(Z_REFCOUNT_P(newval) > 1) {
-                       value_copy = *newval;
-                       zval_copy_ctor(&value_copy);
-                       newval = &value_copy;
-               }
-               convert_to_string(newval);
-       }
+       str = zval_get_string(newval TSRMLS_CC);
 
-       docp->URL = xmlStrdup((const xmlChar *) Z_STRVAL_P(newval));
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
-       }
+       docp->URL = xmlStrdup((const xmlChar *) str->val);
 
+       STR_RELEASE(str);
        return SUCCESS;
 }
 
@@ -853,10 +679,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-config
 Since: DOM Level 3
 */
-int dom_document_config_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_document_config_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
@@ -1128,7 +953,7 @@ PHP_FUNCTION(dom_document_get_elements_by_tag_name)
        DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
 
        php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
-       namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
+       namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
 }
@@ -1337,7 +1162,7 @@ PHP_FUNCTION(dom_document_get_elements_by_tag_name_ns)
        DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
 
        php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
-       namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
+       namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
        nsuri = xmlCharStrndup(uri, uri_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);
@@ -1443,7 +1268,7 @@ PHP_METHOD(domdocument, __construct)
                docp->encoding = (const xmlChar*)xmlStrdup(encoding);
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
        if (intern != NULL) {
                olddoc = (xmlDocPtr) dom_object_get_node(intern);
                if (olddoc != NULL) {
@@ -1523,7 +1348,7 @@ static xmlDocPtr dom_document_parser(zval *id, int mode, char *source, int sourc
        char *directory=NULL, resolved_path[MAXPATHLEN];
 
        if (id != NULL) {
-               intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
                document = intern->document;
        }
 
@@ -1656,7 +1481,7 @@ static void dom_parse_document(INTERNAL_FUNCTION_PARAMETERS, int mode) {
                RETURN_FALSE;
 
        if (id != NULL) {
-               intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
                if (intern != NULL) {
                        docp = (xmlDocPtr) dom_object_get_node(intern);
                        doc_prop = NULL;
@@ -1798,7 +1623,7 @@ PHP_FUNCTION(dom_document_savexml)
                        xmlBufferFree(buf);
                        RETURN_FALSE;
                }
-               RETVAL_STRING(mem, 1);
+               RETVAL_STRING(mem);
                xmlBufferFree(buf);
        } else {
                if (options & LIBXML_SAVE_NOEMPTYTAG) {
@@ -1813,7 +1638,7 @@ PHP_FUNCTION(dom_document_savexml)
                if (!size) {
                        RETURN_FALSE;
                }
-               RETVAL_STRINGL(mem, size, 1);
+               RETVAL_STRINGL(mem, size);
                xmlFree(mem);
        }
 }
@@ -2175,7 +2000,7 @@ static void dom_load_html(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{ */
                RETURN_FALSE;
 
        if (id != NULL && instanceof_function(Z_OBJCE_P(id), dom_document_class_entry TSRMLS_CC)) {
-               intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
                if (intern != NULL) {
                        docp = (xmlDocPtr) dom_object_get_node(intern);
                        doc_prop = NULL;
@@ -2320,7 +2145,7 @@ PHP_FUNCTION(dom_document_save_html)
                        if (!mem) {
                                RETVAL_FALSE;
                        } else {
-                               RETVAL_STRINGL((const char*) mem, size, 1);
+                               RETVAL_STRINGL((const char*) mem, size);
                        }
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error dumping HTML node");
@@ -2336,7 +2161,7 @@ PHP_FUNCTION(dom_document_save_html)
                if (!size) {
                        RETVAL_FALSE;
                } else {
-                       RETVAL_STRINGL((const char*) mem, size, 1);
+                       RETVAL_STRINGL((const char*) mem, size);
                }
                if (mem)
                        xmlFree(mem);
@@ -2353,47 +2178,22 @@ PHP_METHOD(domdocument, registerNodeClass)
 {
        zval *id;
        xmlDoc *docp;
-       char *baseclass = NULL, *extendedclass = NULL;
-       int baseclass_len = 0, extendedclass_len = 0;
-       zend_class_entry *basece = NULL, *ce = NULL;
+       zend_class_entry *basece = dom_node_class_entry, *ce = NULL;
        dom_object *intern;
 
-       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss!", &id, dom_document_class_entry, &baseclass, &baseclass_len, &extendedclass, &extendedclass_len) == FAILURE) {
+       if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OCs!", &id, dom_document_class_entry, &basece, &ce) == FAILURE) {
                return;
        }
 
-       if (baseclass_len) {
-               zend_class_entry **pce;
-               if (zend_lookup_class(baseclass, baseclass_len, &pce TSRMLS_CC) == FAILURE) {
-                       php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", baseclass);
-                       return;
-               }
-               basece = *pce;
-       }
-
-       if (basece == NULL || ! instanceof_function(basece, dom_node_class_entry TSRMLS_CC)) {
-               php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from DOMNode.", baseclass);
-               return;
-       }
-
-       if (extendedclass_len) {
-               zend_class_entry **pce;
-               if (zend_lookup_class(extendedclass, extendedclass_len, &pce TSRMLS_CC) == FAILURE) {
-                       php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s does not exist", extendedclass);
-               }
-               ce = *pce;
-       }
-
        if (ce == NULL || instanceof_function(ce, basece TSRMLS_CC)) {
-
                DOM_GET_OBJ(docp, id, xmlDocPtr, intern);
 
                if (dom_set_doc_classmap(intern->document, basece, ce TSRMLS_CC) == FAILURE) {
-                       php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s could not be registered.", extendedclass);
+                       php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s could not be registered.", ce->name->val);
                }
                RETURN_TRUE;
        } else {
-               php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from %s.", extendedclass, baseclass);
+               php_error_docref(NULL TSRMLS_CC, E_ERROR, "Class %s is not derived from %s.", ce->name->val, basece->name->val);
        }
 
        RETURN_FALSE;
index e99f57151fee4d03b766d2b6160915d24befcdfc..f20ada3db4a81d76a6530b4f3b9d4b5af90f669c 100644 (file)
@@ -72,15 +72,13 @@ PHP_METHOD(domdocumentfragment, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-       if (intern != NULL) {
-               oldnode = dom_object_get_node(intern);
-               if (oldnode != NULL) {
-                       php_libxml_node_free_resource(oldnode  TSRMLS_CC);
-               }
-               /* php_dom_set_object(intern, nodep TSRMLS_CC); */
-               php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
+       oldnode = dom_object_get_node(intern);
+       if (oldnode != NULL) {
+               php_libxml_node_free_resource(oldnode  TSRMLS_CC);
        }
+       /* php_dom_set_object(intern, nodep TSRMLS_CC); */
+       php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
 }
 /* }}} end DOMDocumentFragment::__construct */
 
index a94cc31d74c7a357953b9d99e04d796eeb8484f7..6f2c1e8e0c1e1ed3efef76c9c4c631b885645889 100644 (file)
@@ -43,19 +43,16 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1844763134
 Since: 
 */
-int dom_documenttype_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDtdPtr dtdptr;
-
-       dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+       xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
 
        if (dtdptr == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, (char *) (dtdptr->name), 1);
+       ZVAL_STRING(retval, (char *) (dtdptr->name));
 
        return SUCCESS;
 }
@@ -67,25 +64,22 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1788794630
 Since: 
 */
-int dom_documenttype_entities_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_entities_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDtdPtr doctypep;
+       xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
        xmlHashTable *entityht;
        dom_object *intern;
 
-       doctypep = (xmlDtdPtr) dom_object_get_node(obj);
-
        if (doctypep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       MAKE_STD_ZVAL(*retval);
-       php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+       php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
 
        entityht = (xmlHashTable *) doctypep->entities;
 
-       intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+       intern = Z_DOMOBJ_P(retval);
        dom_namednode_iter(obj, XML_ENTITY_NODE, intern, entityht, NULL, NULL TSRMLS_CC);
 
        return SUCCESS;
@@ -98,25 +92,22 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D46829EF
 Since: 
 */
-int dom_documenttype_notations_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_notations_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDtdPtr doctypep;
+       xmlDtdPtr doctypep = (xmlDtdPtr) dom_object_get_node(obj);
        xmlHashTable *notationht;
        dom_object *intern;
 
-       doctypep = (xmlDtdPtr) dom_object_get_node(obj);
-
        if (doctypep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       MAKE_STD_ZVAL(*retval);
-       php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+       php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
 
        notationht = (xmlHashTable *) doctypep->notations;
 
-       intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+       intern = Z_DOMOBJ_P(retval);
        dom_namednode_iter(obj, XML_NOTATION_NODE, intern, notationht, NULL, NULL TSRMLS_CC);
 
        return SUCCESS;
@@ -129,22 +120,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-publicId
 Since: DOM Level 2
 */
-int dom_documenttype_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDtdPtr dtdptr;
-
-       dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+       xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
 
        if (dtdptr == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (dtdptr->ExternalID) {
-               ZVAL_STRING(*retval, (char *) (dtdptr->ExternalID), 1);
+               ZVAL_STRING(retval, (char *) (dtdptr->ExternalID));
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
        return SUCCESS;
 
@@ -157,22 +145,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-systemId
 Since: DOM Level 2
 */
-int dom_documenttype_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlDtdPtr dtdptr;
-
-       dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
+       xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
 
        if (dtdptr == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (dtdptr->SystemID) {
-               ZVAL_STRING(*retval, (char *) (dtdptr->SystemID), 1);
+               ZVAL_STRING(retval, (char *) (dtdptr->SystemID));
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
        return SUCCESS;
 }
@@ -184,38 +169,33 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-Core-DocType-internalSubset
 Since: DOM Level 2
 */
-int dom_documenttype_internal_subset_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_documenttype_internal_subset_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-
-       xmlDtdPtr dtdptr;
+       xmlDtdPtr dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
        xmlDtd *intsubset;
        xmlOutputBuffer *buff = NULL;
 
-       dtdptr = (xmlDtdPtr) dom_object_get_node(obj);
-
        if (dtdptr == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
                buff = xmlAllocOutputBuffer(NULL);
                if (buff != NULL) {
                        xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
                        xmlOutputBufferFlush(buff);
 #ifdef LIBXML2_NEW_BUFFER
-                       ZVAL_STRINGL(*retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff), 1);
+                       ZVAL_STRINGL(retval, xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
 #else
-                       ZVAL_STRINGL(*retval, buff->buffer->content, buff->buffer->use, 1);
+                       ZVAL_STRINGL(retval, buff->buffer->content, buff->buffer->use);
 #endif
                        (void)xmlOutputBufferClose(buff);
                        return SUCCESS;
                }
        }
 
-       ZVAL_EMPTY_STRING(*retval);
+       ZVAL_EMPTY_STRING(retval);
 
        return SUCCESS;
 
index 987d54de258280bd036be363f86fb1afb1022e99..c977280b76888c1a8fd0b0ebca4c87080a527f1a 100644 (file)
@@ -126,10 +126,10 @@ static void php_dom_iterator_dtor(zend_object_iterator *iter TSRMLS_DC) /* {{{ *
 {
        php_dom_iterator *iterator = (php_dom_iterator *)iter;
 
-       zval_ptr_dtor((zval**)&iterator->intern.data);
+       zval_ptr_dtor(&iterator->intern.data);
 
        if (iterator->curobj) {
-               zval_ptr_dtor((zval**)&iterator->curobj);
+               zval_ptr_dtor(&iterator->curobj);
        }
 
        efree(iterator);
@@ -149,27 +149,27 @@ static int php_dom_iterator_valid(zend_object_iterator *iter TSRMLS_DC) /* {{{ *
 }
 /* }}} */
 
-static void php_dom_iterator_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) /* {{{ */
+zval *php_dom_iterator_current_data(zend_object_iterator *iter TSRMLS_DC) /* {{{ */
 {
        php_dom_iterator *iterator = (php_dom_iterator *)iter;
 
-       *data = &iterator->curobj;
+       return iterator->curobj;
 }
 /* }}} */
 
 static void php_dom_iterator_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) /* {{{ */
 {
        php_dom_iterator *iterator = (php_dom_iterator *)iter;
-       zval *object = (zval *)iterator->intern.data;
+       zval *object = &iterator->intern.data;
 
        if (instanceof_function(Z_OBJCE_P(object), dom_nodelist_class_entry TSRMLS_CC)) {
                ZVAL_LONG(key, iter->index);
        } else {
-               dom_object *intern = (dom_object *)zend_object_store_get_object(iterator->curobj TSRMLS_CC);
+               dom_object *intern = Z_DOMOBJ_P(iterator->curobj);
 
                if (intern != NULL && intern->ptr != NULL) {
                        xmlNodePtr curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
-                       ZVAL_STRINGL(key, (char *) curnode->name, xmlStrlen(curnode->name), 1);
+                       ZVAL_STRINGL(key, (char *) curnode->name, xmlStrlen(curnode->name));
                } else {
                        ZVAL_NULL(key);
                }
@@ -185,27 +185,28 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
        dom_object *intern;
        dom_object *nnmap;
        dom_nnodemap_object *objmap;
-       int ret, previndex=0;
+       int previndex=0;
        HashTable *nodeht;
-       zval **entry;
+       zval *entry;
 
        php_dom_iterator *iterator = (php_dom_iterator *)iter;
 
-       object = (zval *)iterator->intern.data;
-       nnmap = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
+       object = &iterator->intern.data;
+       nnmap = Z_DOMOBJ_P(object);
        objmap = (dom_nnodemap_object *)nnmap->ptr;
 
        curobj = iterator->curobj;
-       intern = (dom_object *)zend_object_store_get_object(curobj TSRMLS_CC);
+       intern = Z_DOMOBJ_P(curobj);
        if (intern != NULL && intern->ptr != NULL) {
                if (objmap->nodetype != XML_ENTITY_NODE && 
                        objmap->nodetype != XML_NOTATION_NODE) {
                        if (objmap->nodetype == DOM_NODESET) {
                                nodeht = HASH_OF(objmap->baseobjptr);
                                zend_hash_move_forward(nodeht);
-                               if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
-                                       curattr = *entry;
-                                       Z_ADDREF_P(curattr);
+                               if ((entry = zend_hash_get_current_data(nodeht))) {
+                                       //???
+                                       curattr = entry;
+                                       if (Z_REFCOUNTED_P(curattr)) Z_ADDREF_P(curattr);
                                }
                        } else {
                                curnode = (xmlNodePtr)((php_libxml_node_ptr *)intern->ptr)->node;
@@ -235,10 +236,9 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC)
                }
        }
 err:
-       zval_ptr_dtor((zval**)&curobj);
+       zval_ptr_dtor(curobj);
        if (curnode) {
-               MAKE_STD_ZVAL(curattr);
-               curattr = php_dom_create_object(curnode, &ret, curattr, objmap->baseobj TSRMLS_CC);
+               php_dom_create_object(curnode, curattr, objmap->baseobj TSRMLS_CC);
        }
 
        iterator->curobj = curattr;
@@ -260,9 +260,9 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
        dom_nnodemap_object *objmap;
        xmlNodePtr nodep, curnode=NULL;
        zval *curattr = NULL;
-       int ret, curindex = 0;
+       int curindex = 0;
        HashTable *nodeht;
-       zval **entry;
+       zval *entry;
        php_dom_iterator *iterator;
 
        if (by_ref) {
@@ -270,11 +270,10 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
        }
        iterator = emalloc(sizeof(php_dom_iterator));
 
-       Z_ADDREF_P(object);
-       iterator->intern.data = (void*)object;
+       ZVAL_COPY(&iterator->intern.data, object);
        iterator->intern.funcs = &php_dom_iterator_funcs;
 
-       intern = (dom_object *)zend_object_store_get_object(object TSRMLS_CC);
+       intern = Z_DOMOBJ_P(object);
        objmap = (dom_nnodemap_object *)intern->ptr;
        if (objmap != NULL) {
                if (objmap->nodetype != XML_ENTITY_NODE && 
@@ -282,9 +281,9 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
                        if (objmap->nodetype == DOM_NODESET) {
                                nodeht = HASH_OF(objmap->baseobjptr);
                                zend_hash_internal_pointer_reset(nodeht);
-                               if (zend_hash_get_current_data(nodeht, (void **) &entry)==SUCCESS) {
-                                       curattr = *entry;
-                                       Z_ADDREF_P(curattr);
+                               if ((entry = zend_hash_get_current_data(nodeht))) {
+                                       curattr = entry;
+                                       if (Z_REFCOUNTED_P(curattr)) Z_ADDREF_P(curattr);
                                }
                        } else {
                                nodep = (xmlNode *)dom_object_get_node(objmap->baseobj);
@@ -316,8 +315,7 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
        }
 err:
        if (curnode) {
-               MAKE_STD_ZVAL(curattr);
-               curattr = php_dom_create_object(curnode, &ret, curattr, objmap->baseobj TSRMLS_CC);
+               php_dom_create_object(curnode, curattr, objmap->baseobj TSRMLS_CC);
        }
 
        iterator->curobj = curattr;
index cf0eb8da69653044f8fabdd9454e35d708925fac..cd35b326b740a7296db009624a7bc29fadbf0928 100644 (file)
@@ -46,10 +46,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-severity
 Since: 
 */
-int dom_domerror_severity_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_severity_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -60,10 +59,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-message
 Since: 
 */
-int dom_domerror_message_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_message_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -74,10 +72,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-type
 Since: 
 */
-int dom_domerror_type_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_type_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -88,10 +85,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedException
 Since: 
 */
-int dom_domerror_related_exception_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_related_exception_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -102,10 +98,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-relatedData
 Since: 
 */
-int dom_domerror_related_data_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_related_data_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -116,10 +111,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ERROR-DOMError-location
 Since: 
 */
-int dom_domerror_location_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domerror_location_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
index fde89b7d94efed5630f88268a3eb5f025075a95c..07479f52eb4a046a5b0c8e40c93ea0fd32aa3a91 100644 (file)
@@ -52,10 +52,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-length
 Since: 
 */
-int dom_domimplementationlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domimplementationlist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
index 93cd580a01592641898d8d06f62a7671a9e2076b..4e01b3a443fe021a38abcc893058d28ff9072486 100644 (file)
@@ -46,10 +46,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-line-number
 Since: 
 */
-int dom_domlocator_line_number_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domlocator_line_number_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -60,10 +59,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-column-number
 Since: 
 */
-int dom_domlocator_column_number_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domlocator_column_number_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -74,10 +72,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-offset
 Since: 
 */
-int dom_domlocator_offset_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domlocator_offset_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -88,10 +85,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-node
 Since: 
 */
-int dom_domlocator_related_node_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domlocator_related_node_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
@@ -102,10 +98,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMLocator-uri
 Since: 
 */
-int dom_domlocator_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domlocator_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
index f036fbbdd6662e3259ca26798bd125e78a1df785..a12d8633acac4b5a722304818266e3cbd50c4568 100644 (file)
@@ -52,10 +52,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-length
 Since: 
 */
-int dom_domstringlist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_domstringlist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, "TEST", 1);
+       ZVAL_STRING(retval, "TEST");
        return SUCCESS;
 }
 
index b570471b7d99873a80cc9582795fe429c463f1cf..5ecf031c4c9842107e1a8a8e1ecddb4112610ea5 100644 (file)
@@ -219,14 +219,12 @@ PHP_METHOD(domelement, __construct)
                xmlNodeSetContentLen(nodep, (xmlChar *) value, value_len);
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-       if (intern != NULL) {
-               oldnode = dom_object_get_node(intern);
-               if (oldnode != NULL) {
-                       php_libxml_node_free_resource(oldnode  TSRMLS_CC);
-               }
-               php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
+       oldnode = dom_object_get_node(intern);
+       if (oldnode != NULL) {
+               php_libxml_node_free_resource(oldnode  TSRMLS_CC);
        }
+       php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
 }
 /* }}} end DOMElement::__construct */
 
@@ -235,7 +233,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-104682815
 Since: 
 */
-int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_element_tag_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNodePtr nodep;
        xmlNsPtr ns;
@@ -248,16 +246,15 @@ int dom_element_tag_name_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        ns = nodep->ns;
        if (ns != NULL && ns->prefix) {
                qname = xmlStrdup(ns->prefix);
                qname = xmlStrcat(qname, (xmlChar *)":");
                qname = xmlStrcat(qname, nodep->name);
-               ZVAL_STRING(*retval, (char *)qname, 1);
+               ZVAL_STRING(retval, (char *)qname);
                xmlFree(qname);
        } else {
-               ZVAL_STRING(*retval, (char *) nodep->name, 1);
+               ZVAL_STRING(retval, (char *) nodep->name);
        }
 
        return SUCCESS;
@@ -270,10 +267,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Element-schemaTypeInfo
 Since: DOM Level 3
 */
-int dom_element_schema_type_info_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_element_schema_type_info_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
@@ -359,7 +355,7 @@ PHP_FUNCTION(dom_element_get_attribute)
        if (value == NULL) {
                RETURN_EMPTY_STRING();
        } else {
-               RETVAL_STRING((char *)value, 1);
+               RETVAL_STRING((char *)value);
                xmlFree(value);
        }
 }
@@ -648,7 +644,7 @@ PHP_FUNCTION(dom_element_get_elements_by_tag_name)
        DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
 
        php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
-       namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
+       namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, NULL TSRMLS_CC);
 }
@@ -677,13 +673,13 @@ PHP_FUNCTION(dom_element_get_attribute_ns)
        strattr = xmlGetNsProp(elemp, (xmlChar *) name, (xmlChar *) uri);
 
        if (strattr != NULL) {
-               RETVAL_STRING((char *)strattr, 1);
+               RETVAL_STRING((char *)strattr);
                xmlFree(strattr);
        } else {
                if (xmlStrEqual((xmlChar *) uri, (xmlChar *)DOM_XMLNS_NAMESPACE)) {
                        nsptr = dom_get_nsdecl(elemp, (xmlChar *)name);
                        if (nsptr != NULL) {
-                               RETVAL_STRING((char *) nsptr->href, 1);
+                               RETVAL_STRING((char *) nsptr->href);
                        } else {
                                RETVAL_EMPTY_STRING();
                        }
@@ -1042,7 +1038,7 @@ PHP_FUNCTION(dom_element_get_elements_by_tag_name_ns)
        DOM_GET_OBJ(elemp, id, xmlNodePtr, intern);
 
        php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
-       namednode = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
+       namednode = Z_DOMOBJ_P(return_value);
        local = xmlCharStrndup(name, name_len);
        nsuri = xmlCharStrndup(uri, uri_len);
        dom_namednode_iter(intern, 0, namednode, NULL, local, nsuri TSRMLS_CC);
index 803bb70eec922423b583effbe375e1eec50a1f32..264683e28be9ca3862b91dcdb8e946375a18fe6e 100644 (file)
@@ -44,22 +44,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7303025
 Since: 
 */
-int dom_entity_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlEntity *nodep;
-
-       nodep = (xmlEntity *) dom_object_get_node(obj);
+       xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        } else {
-               ZVAL_STRING(*retval, (char *) (nodep->ExternalID), 1);
+               ZVAL_STRING(retval, (char *) (nodep->ExternalID));
        }
 
        return SUCCESS;
@@ -72,22 +69,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-D7C29F3E
 Since: 
 */
-int dom_entity_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlEntity *nodep;
-
-       nodep = (xmlEntity *) dom_object_get_node(obj);
+       xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        } else {
-               ZVAL_STRING(*retval, (char *) (nodep->SystemID), 1);
+               ZVAL_STRING(retval, (char *) (nodep->SystemID));
        }
 
        return SUCCESS;
@@ -100,24 +94,21 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-6ABAEB38
 Since: 
 */
-int dom_entity_notation_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_notation_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlEntity *nodep;
+       xmlEntity *nodep = (xmlEntity *) dom_object_get_node(obj);
        char *content;
 
-       nodep = (xmlEntity *) dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (nodep->etype != XML_EXTERNAL_GENERAL_UNPARSED_ENTITY) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        } else {
                content = xmlNodeGetContent((xmlNodePtr) nodep);
-               ZVAL_STRING(*retval, content, 1);
+               ZVAL_STRING(retval, content);
                xmlFree(content);
        }
 
@@ -131,10 +122,9 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-actualEncoding
 Since: DOM Level 3
 */
-int dom_entity_actual_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_actual_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
@@ -150,10 +140,9 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-encoding
 Since: DOM Level 3
 */
-int dom_entity_encoding_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_encoding_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
@@ -169,10 +158,9 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Entity3-version
 Since: DOM Level 3
 */
-int dom_entity_version_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_entity_version_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
index f2fe3945da98e9726e247f9c65af56421dabe610..bc03385116fe1aa035dbaa4f94c2f9db1eb8356f 100644 (file)
@@ -77,7 +77,7 @@ PHP_METHOD(domentityreference, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
        if (intern != NULL) {
                oldnode = dom_object_get_node(intern);
                if (oldnode != NULL) {
index d3c8cee5589800fb3a182ae95e602bbf56bd210c..13acf5cbcedac7ea5a2a43ad0ce0a173f4bd8966 100644 (file)
@@ -83,7 +83,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D0FB19E
 Since: 
 */
-int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_namednodemap_length_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        dom_nnodemap_object *objmap;
        xmlAttrPtr curnode;
@@ -113,8 +113,7 @@ int dom_namednodemap_length_read(dom_object *obj, zval **retval TSRMLS_DC)
                }
        }
 
-       MAKE_STD_ZVAL(*retval);
-       ZVAL_LONG(*retval, count);
+       ZVAL_LONG(retval, count);
        return SUCCESS;
 }
 
@@ -140,7 +139,7 @@ PHP_FUNCTION(dom_namednodemap_get_named_item)
                return;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
 
        objmap = (dom_nnodemap_object *)intern->ptr;
 
@@ -214,7 +213,7 @@ PHP_FUNCTION(dom_namednodemap_item)
                return;
        }
        if (index >= 0) {
-               intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
 
                objmap = (dom_nnodemap_object *)intern->ptr;
 
@@ -272,7 +271,7 @@ PHP_FUNCTION(dom_namednodemap_get_named_item_ns)
                return;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
 
        objmap = (dom_nnodemap_object *)intern->ptr;
 
index ae74ea04cffc8b7c19e187b6baf69db9f4ba46eb..920581423eb2440fea4bda5e401a41ee3c8e7a75 100644 (file)
@@ -196,7 +196,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D095
 Since: 
 */
-int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep;
        xmlNsPtr ns;
@@ -262,12 +262,10 @@ int dom_node_node_name_read(dom_object *obj, zval **retval TSRMLS_DC)
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid Node Type");
        }
 
-       ALLOC_ZVAL(*retval);
-
-       if(str != NULL) {
-               ZVAL_STRING(*retval, str, 1);
+       if (str != NULL) {
+               ZVAL_STRING(retval, str);
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
        
        if (qname != NULL) {
@@ -285,13 +283,11 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68D080
 Since: 
 */
-int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_value_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        char *str = NULL;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
@@ -315,26 +311,20 @@ int dom_node_node_value_read(dom_object *obj, zval **retval TSRMLS_DC)
                        break;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if(str != NULL) {
-               ZVAL_STRING(*retval, str, 1);
+               ZVAL_STRING(retval, str);
                xmlFree(str);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
-
        return SUCCESS;
 
 }
 
 int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       xmlNode *nodep;
-       zval value_copy;
-
-       nodep = dom_object_get_node(obj);
+       xmlNode *nodep = dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -352,19 +342,12 @@ int dom_node_node_value_write(dom_object *obj, zval *newval TSRMLS_DC)
                case XML_COMMENT_NODE:
                case XML_CDATA_SECTION_NODE:
                case XML_PI_NODE:
-                       if (newval->type != IS_STRING) {
-                               if(Z_REFCOUNT_P(newval) > 1) {
-                                       value_copy = *newval;
-                                       zval_copy_ctor(&value_copy);
-                                       newval = &value_copy;
-                               }
-                               convert_to_string(newval);
-                       }
-                       xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-                       if (newval == &value_copy) {
-                               zval_dtor(newval);
+                       {
+                               zend_string *str = zval_get_string(newval TSRMLS_CC);
+                               xmlNodeSetContentLen(nodep, str->val, str->len + 1);
+                               STR_RELEASE(str);
+                               break;
                        }
-                       break;
                default:
                        break;
        }
@@ -379,7 +362,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-111237558
 Since:
 */
-int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_node_type_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep;
 
@@ -390,13 +373,11 @@ int dom_node_node_type_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        /* Specs dictate that they are both type XML_DOCUMENT_TYPE_NODE */
        if (nodep->type == XML_DTD_NODE) {
-               ZVAL_LONG(*retval, XML_DOCUMENT_TYPE_NODE);
+               ZVAL_LONG(retval, XML_DOCUMENT_TYPE_NODE);
        } else {
-               ZVAL_LONG(*retval, nodep->type);
+               ZVAL_LONG(retval, nodep->type);
        }
 
        return SUCCESS;
@@ -409,10 +390,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1060184317
 Since: 
 */
-int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_parent_node_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep, *nodeparent;
-       int ret;
 
        nodep = dom_object_get_node(obj);
 
@@ -421,18 +401,13 @@ int dom_node_parent_node_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        nodeparent = nodep->parent;
        if (!nodeparent) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
                return SUCCESS;
        }
 
-       if (NULL == (*retval = php_dom_create_object(nodeparent, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object(nodeparent, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -443,25 +418,21 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1451460987
 Since: 
 */
-int dom_node_child_nodes_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_child_nodes_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        dom_object *intern;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       
        if (dom_node_children_valid(nodep) == FAILURE) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        } else {
-               php_dom_create_interator(*retval, DOM_NODELIST TSRMLS_CC);
-               intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+               php_dom_create_interator(retval, DOM_NODELIST TSRMLS_CC);
+               intern = Z_DOMOBJ_P(retval);
                dom_namednode_iter(obj, XML_ELEMENT_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
        }
 
@@ -475,10 +446,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-169727388
 Since: 
 */
-int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_first_child_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep, *first = NULL;
-       int ret;
 
        nodep = dom_object_get_node(obj);
 
@@ -491,17 +461,12 @@ int dom_node_first_child_read(dom_object *obj, zval **retval TSRMLS_DC)
                first = nodep->children;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (!first) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
                return SUCCESS;
        }
 
-       if (NULL == (*retval = php_dom_create_object(first, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object(first, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -512,10 +477,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-61AD09FB
 Since: 
 */
-int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_last_child_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep, *last = NULL;
-       int ret;
 
        nodep = dom_object_get_node(obj);
 
@@ -528,17 +492,12 @@ int dom_node_last_child_read(dom_object *obj, zval **retval TSRMLS_DC)
                last = nodep->last;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (!last) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
                return SUCCESS;
        }
 
-       if (NULL == (*retval = php_dom_create_object(last, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object(last, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -549,10 +508,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-640FB3C8
 Since: 
 */
-int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_previous_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep, *prevsib;
-       int ret;
 
        nodep = dom_object_get_node(obj);
 
@@ -561,18 +519,13 @@ int dom_node_previous_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        prevsib = nodep->prev;
        if (!prevsib) {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
                return SUCCESS;
        }
 
-       if (NULL == (*retval = php_dom_create_object(prevsib, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object(prevsib, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -583,10 +536,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6AC54C2F
 Since:
 */
-int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_next_sibling_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNode *nodep, *nextsib;
-       int ret;
 
        nodep = dom_object_get_node(obj);
 
@@ -600,12 +552,7 @@ int dom_node_next_sibling_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
-       if (NULL == (*retval = php_dom_create_object(nextsib, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object(nextsib, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -616,26 +563,22 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-84CF096
 Since: 
 */
-int dom_node_attributes_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_attributes_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        dom_object *intern;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (nodep->type == XML_ELEMENT_NODE) {
-               php_dom_create_interator(*retval, DOM_NAMEDNODEMAP TSRMLS_CC);
-               intern = (dom_object *)zend_objects_get_address(*retval TSRMLS_CC);
+               php_dom_create_interator(retval, DOM_NAMEDNODEMAP TSRMLS_CC);
+               intern = Z_DOMOBJ_P(retval);
                dom_namednode_iter(obj, XML_ATTRIBUTE_NODE, intern, NULL, NULL, NULL TSRMLS_CC);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -648,13 +591,10 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-node-ownerDoc
 Since: 
 */
-int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_owner_document_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        xmlDocPtr docp;
-       int ret;
-
-       nodep = dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
@@ -662,8 +602,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
        }
 
        if (nodep->type == XML_DOCUMENT_NODE || nodep->type == XML_HTML_DOCUMENT_NODE) {
-               ALLOC_ZVAL(*retval);
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
                return SUCCESS;
        }
 
@@ -672,12 +611,7 @@ int dom_node_owner_document_read(dom_object *obj, zval **retval TSRMLS_DC)
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
-       if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, *retval, obj TSRMLS_CC))) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
+       php_dom_create_object((xmlNodePtr) docp, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 
@@ -688,13 +622,11 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSname
 Since: DOM Level 2
 */
-int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_namespace_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        char *str = NULL;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
@@ -713,12 +645,10 @@ int dom_node_namespace_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
                        break;
        }
 
-       ALLOC_ZVAL(*retval);
-
-       if(str != NULL) {
-               ZVAL_STRING(*retval, str, 1);
+       if (str != NULL) {
+               ZVAL_STRING(retval, str);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -731,14 +661,12 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSPrefix
 Since: DOM Level 2
 */
-int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_prefix_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        xmlNsPtr ns;
        char *str = NULL;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
@@ -758,12 +686,10 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
                        break;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (str == NULL) {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        } else {
-               ZVAL_STRING(*retval, str, 1);
+               ZVAL_STRING(retval, str);
        }
        return SUCCESS;
 
@@ -771,7 +697,7 @@ int dom_node_prefix_read(dom_object *obj, zval **retval TSRMLS_DC)
 
 int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
+       zend_string *str;
        xmlNode *nodep, *nsnode = NULL;
        xmlNsPtr ns = NULL, curns;
        char *strURI;
@@ -794,15 +720,8 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
                                        nsnode = xmlDocGetRootElement(nodep->doc);
                                }
                        }
-                       if (newval->type != IS_STRING) {
-                               if(Z_REFCOUNT_P(newval) > 1) {
-                                       value_copy = *newval;
-                                       zval_copy_ctor(&value_copy);
-                                       newval = &value_copy;
-                               }
-                               convert_to_string(newval);
-                       }
-                       prefix = Z_STRVAL_P(newval);
+                       str = zval_get_string(newval TSRMLS_CC);
+                       prefix = str->val;
                        if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
                                strURI = (char *) nodep->ns->href;
                                if (strURI == NULL || 
@@ -826,18 +745,14 @@ int dom_node_prefix_write(dom_object *obj, zval *newval TSRMLS_DC)
                                }
 
                                if (ns == NULL) {
-                                       if (newval == &value_copy) {
-                                               zval_dtor(newval);
-                                       }
+                                       STR_RELEASE(str);
                                        php_dom_throw_error(NAMESPACE_ERR, dom_get_strict_error(obj->document) TSRMLS_CC);
                                        return FAILURE;
                                }
 
                                xmlSetNs(nodep, ns);
                        }
-                       if (newval == &value_copy) {
-                               zval_dtor(newval);
-                       }
+                       STR_RELEASE(str);
                        break;
                default:
                        break;
@@ -853,23 +768,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeNSLocalN
 Since: DOM Level 2
 */
-int dom_node_local_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_local_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
-
-       nodep = dom_object_get_node(obj);
+       xmlNode *nodep = dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        if (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE || nodep->type == XML_NAMESPACE_DECL) {
-               ZVAL_STRING(*retval, (char *) (nodep->name), 1);
+               ZVAL_STRING(retval, (char *) (nodep->name));
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -882,26 +793,22 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-baseURI
 Since: DOM Level 3
 */
-int dom_node_base_uri_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_base_uri_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        xmlChar *baseuri;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
        baseuri = xmlNodeGetBase(nodep->doc, nodep);
        if (baseuri) {
-               ZVAL_STRING(*retval, (char *) (baseuri), 1);
+               ZVAL_STRING(retval, (char *) (baseuri));
                xmlFree(baseuri);
        } else {
-               ZVAL_NULL(*retval);
+               ZVAL_NULL(retval);
        }
 
        return SUCCESS;
@@ -914,13 +821,11 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-textContent
 Since: DOM Level 3
 */
-int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_node_text_content_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNode *nodep;
+       xmlNode *nodep = dom_object_get_node(obj);
        char *str = NULL;
 
-       nodep = dom_object_get_node(obj);
-
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
@@ -928,13 +833,11 @@ int dom_node_text_content_read(dom_object *obj, zval **retval TSRMLS_DC)
 
        str = xmlNodeGetContent(nodep);
 
-       ALLOC_ZVAL(*retval);
-
-       if(str != NULL) {
-               ZVAL_STRING(*retval, str, 1);
+       if (str != NULL) {
+               ZVAL_STRING(retval, str);
                xmlFree(str);
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
@@ -1629,7 +1532,7 @@ PHP_FUNCTION(dom_node_lookup_prefix)
 
                if (lookupp != NULL && (nsptr = xmlSearchNsByHref(lookupp->doc, lookupp, uri))) {
                        if (nsptr->prefix != NULL) {
-                               RETURN_STRING((char *) nsptr->prefix, 1);
+                               RETURN_STRING((char *) nsptr->prefix);
                        }
                }
        }
@@ -1698,7 +1601,7 @@ PHP_FUNCTION(dom_node_lookup_namespace_uri)
 
        nsptr = xmlSearchNs(nodep->doc, nodep, prefix);
        if (nsptr && nsptr->href != NULL) {
-               RETURN_STRING((char *) nsptr->href, 1);
+               RETURN_STRING((char *) nsptr->href);
        }
 
        RETURN_NULL();
@@ -1804,12 +1707,12 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
        } else {
                /*xpath query from xpath_array */
                HashTable *ht = Z_ARRVAL_P(xpath_array);
-               zval **tmp;
+               zval *tmp;
                char *xquery;
 
-               if (zend_hash_find(ht, "query", sizeof("query"), (void**)&tmp) == SUCCESS &&
-                   Z_TYPE_PP(tmp) == IS_STRING) {
-                       xquery = Z_STRVAL_PP(tmp);
+               tmp = zend_hash_str_find(ht, "query", sizeof("query")-1);
+               if (tmp && Z_TYPE_P(tmp) == IS_STRING) {
+                       xquery = Z_STRVAL_P(tmp);
                } else {
                        php_error_docref(NULL TSRMLS_CC, E_WARNING, "'query' missing from xpath array or is not a string");
                        RETURN_FALSE;
@@ -1818,21 +1721,20 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
                ctxp = xmlXPathNewContext(docp);
                ctxp->node = nodep;
 
-               if (zend_hash_find(ht, "namespaces", sizeof("namespaces"), (void**)&tmp) == SUCCESS &&
-                   Z_TYPE_PP(tmp) == IS_ARRAY) {
-                       zval **tmpns;
-                       while (zend_hash_get_current_data(Z_ARRVAL_PP(tmp), (void **)&tmpns) == SUCCESS) {
-                               if (Z_TYPE_PP(tmpns) == IS_STRING) {
-                                       char *prefix;
+               tmp = zend_hash_str_find(ht, "namespaces", sizeof("namespaces")-1);
+               if (tmp && Z_TYPE_P(tmp) == IS_ARRAY) {
+                       zval *tmpns;
+                       while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(tmp)))) {
+                               if (Z_TYPE_P(tmpns) == IS_STRING) {
+                                       zend_string *prefix;
                                        ulong idx;
-                                       uint prefix_key_len;
 
-                                       if (zend_hash_get_current_key_ex(Z_ARRVAL_PP(tmp), 
-                                               &prefix, &prefix_key_len, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
-                                               xmlXPathRegisterNs(ctxp, prefix, Z_STRVAL_PP(tmpns));
+                                       if (zend_hash_get_current_key_ex(Z_ARRVAL_P(tmp), 
+                                               &prefix, &idx, 0, NULL) == HASH_KEY_IS_STRING) {
+                                               xmlXPathRegisterNs(ctxp, prefix->val, Z_STRVAL_P(tmpns));
                                        }
                                }
-                               zend_hash_move_forward(Z_ARRVAL_PP(tmp));
+                               zend_hash_move_forward(Z_ARRVAL_P(tmp));
                        }
                }
 
@@ -1852,14 +1754,14 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
 
        if (ns_prefixes != NULL) {
                if (exclusive) {
-                       zval **tmpns;
+                       zval *tmpns;
                        int nscount = 0;
 
                        inclusive_ns_prefixes = safe_emalloc(zend_hash_num_elements(Z_ARRVAL_P(ns_prefixes)) + 1,
                                sizeof(xmlChar *), 0);
-                       while (zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes), (void **)&tmpns) == SUCCESS) {
-                               if (Z_TYPE_PP(tmpns) == IS_STRING) {
-                                       inclusive_ns_prefixes[nscount++] = Z_STRVAL_PP(tmpns);
+                       while ((tmpns = zend_hash_get_current_data(Z_ARRVAL_P(ns_prefixes)))) {
+                               if (Z_TYPE_P(tmpns) == IS_STRING) {
+                                       inclusive_ns_prefixes[nscount++] = Z_STRVAL_P(tmpns);
                                }
                                zend_hash_move_forward(Z_ARRVAL_P(ns_prefixes));
                        }
@@ -1902,9 +1804,9 @@ static void dom_canonicalization(INTERNAL_FUNCTION_PARAMETERS, int mode) /* {{{
 #endif
                        if (ret > 0) {
 #ifdef LIBXML2_NEW_BUFFER
-                               RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1);
+                               RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret);
 #else
-                               RETVAL_STRINGL((char *) buf->buffer->content, ret, 1);
+                               RETVAL_STRINGL((char *) buf->buffer->content, ret);
 #endif
                        } else {
                                RETVAL_EMPTY_STRING();
@@ -1954,7 +1856,7 @@ PHP_METHOD(domnode, getNodePath)
        if (value == NULL) {
                RETURN_NULL();
        } else {
-               RETVAL_STRING(value, 1);
+               RETVAL_STRING(value);
                xmlFree(value);
        }
 }
index 1a0c8111853bf880192c6626ed7fb26e84d1fcdf..86330c83487a9c41f11d7432882344543778ae19 100644 (file)
@@ -51,7 +51,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-203510337
 Since: 
 */
-int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_nodelist_length_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        dom_nnodemap_object *objmap;
        xmlNodePtr nodep, curnode;
@@ -91,8 +91,7 @@ int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC)
                }
        }
 
-       MAKE_STD_ZVAL(*retval);
-       ZVAL_LONG(*retval, count);
+       ZVAL_LONG(retval, count);
        return SUCCESS;
 }
 
@@ -113,15 +112,13 @@ PHP_FUNCTION(dom_nodelist_item)
        dom_nnodemap_object *objmap;
        xmlNodePtr nodep, curnode;
        int count = 0;
-       HashTable *nodeht;
-       zval **entry;
 
        if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &id, dom_nodelist_class_entry, &index) == FAILURE) {
                return;
        }
 
        if (index >= 0) {
-               intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
 
                objmap = (dom_nnodemap_object *)intern->ptr;
                if (objmap != NULL) {
@@ -133,10 +130,10 @@ PHP_FUNCTION(dom_nodelist_item)
                                }
                        } else {
                                if (objmap->nodetype == DOM_NODESET) {
-                                       nodeht = HASH_OF(objmap->baseobjptr);
-                                       if (zend_hash_index_find(nodeht, index, (void **) &entry)==SUCCESS) {
-                                               *return_value = **entry;
-                                               zval_copy_ctor(return_value);
+                                       HashTable *nodeht = HASH_OF(objmap->baseobjptr);
+                                       zval *entry = zend_hash_index_find(nodeht, index);
+                                       if (entry) {
+                                               ZVAL_COPY(return_value, entry);
                                                return;
                                        }
                                } else if (objmap->baseobj) {
index 4c0258cc1f2e886ffd10d5f7fff41ab4d634318c..dc63f1516d4fa176b1a3fde511347d42404a7186 100644 (file)
@@ -45,22 +45,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-54F2B4D0
 Since: 
 */
-int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_notation_public_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlEntityPtr nodep;
-
-       nodep = (xmlEntityPtr) dom_object_get_node(obj);
+       xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (nodep->ExternalID) {
-               ZVAL_STRING(*retval, (char *) (nodep->ExternalID), 1);
+               ZVAL_STRING(retval, (char *) (nodep->ExternalID));
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
@@ -73,22 +70,19 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-E8AAB1D0
 Since: 
 */
-int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_notation_system_id_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlEntityPtr nodep;
-
-       nodep = (xmlEntityPtr) dom_object_get_node(obj);
+       xmlEntityPtr nodep = (xmlEntityPtr) dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
        if (nodep->SystemID) {
-               ZVAL_STRING(*retval, (char *) (nodep->SystemID), 1);
+               ZVAL_STRING(retval, (char *) (nodep->SystemID));
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
index ab5a7d7844b50e87dc038f115b8a1b62827e4e62..cc6c970377df2d8eefc3a0cf3fff9625d71e47d8 100644 (file)
@@ -469,8 +469,8 @@ void *php_dom_export_node(zval *object TSRMLS_DC) /* {{{ */
        php_libxml_node_object *intern;
        xmlNodePtr nodep = NULL;
 
-       intern = (php_libxml_node_object *)zend_object_store_get_object(object TSRMLS_CC);
-       if (intern && intern->node) {
+       intern = Z_DOMOBJ_P(object);
+       if (intern->node) {
                nodep = intern->node->node;
        }
 
@@ -491,7 +491,7 @@ PHP_FUNCTION(dom_import_simplexml)
                return;
        }
 
-       nodeobj = (php_libxml_node_object *)zend_object_store_get_object(node TSRMLS_CC);
+       nodeobj = Z_DOMOBJ_P(node);
        nodep = php_libxml_import_node(node TSRMLS_CC);
 
        if (nodep && nodeobj && (nodep->type == XML_ELEMENT_NODE || nodep->type == XML_ATTRIBUTE_NODE)) {
index 5a415efc80d66756bcb4e9469fb186823c54e5d7..aef9e92b64b857315d2c68996d789c21a5378ff0 100644 (file)
@@ -50,7 +50,6 @@ const zend_function_entry php_dom_processinginstruction_class_functions[] = {
 /* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */
 PHP_METHOD(domprocessinginstruction, __construct)
 {
-
        zval *id;
        xmlNodePtr nodep = NULL, oldnode = NULL;
        dom_object *intern;
@@ -79,14 +78,12 @@ PHP_METHOD(domprocessinginstruction, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
-       if (intern != NULL) {
-               oldnode = dom_object_get_node(intern);
-               if (oldnode != NULL) {
-                       php_libxml_node_free_resource(oldnode  TSRMLS_CC);
-               }
-               php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
+       oldnode = dom_object_get_node(intern);
+       if (oldnode != NULL) {
+               php_libxml_node_free_resource(oldnode  TSRMLS_CC);
        }
+       php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
 }
 /* }}} end DOMProcessingInstruction::__construct */
 
@@ -95,19 +92,16 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192
 Since: 
 */
-int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_processinginstruction_target_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       xmlNodePtr nodep;
-
-       nodep = dom_object_get_node(obj);
+       xmlNodePtr nodep = dom_object_get_node(obj);
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-       ZVAL_STRING(*retval, (char *) (nodep->name), 1);
+       ZVAL_STRING(retval, (char *) (nodep->name));
 
        return SUCCESS;
 }
@@ -119,7 +113,7 @@ readonly=no
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393
 Since: 
 */
-int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_processinginstruction_data_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNodePtr nodep;
        xmlChar *content;
@@ -131,14 +125,11 @@ int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC
                return FAILURE;
        }
 
-       ALLOC_ZVAL(*retval);
-
-       
        if ((content = xmlNodeGetContent(nodep)) != NULL) {
-               ZVAL_STRING(*retval, content, 1);
+               ZVAL_STRING(retval, content);
                xmlFree(content);
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
@@ -146,31 +137,19 @@ int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC
 
 int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC)
 {
-       zval value_copy;
-       xmlNode *nodep;
-
-       nodep = dom_object_get_node(obj);
+       xmlNode *nodep = dom_object_get_node(obj);
+       zend_string *str;
 
        if (nodep == NULL) {
                php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
                return FAILURE;
        }
 
-       if (newval->type != IS_STRING) {
-               if(Z_REFCOUNT_P(newval) > 1) {
-                       value_copy = *newval;
-                       zval_copy_ctor(&value_copy);
-                       newval = &value_copy;
-               }
-               convert_to_string(newval);
-       }
+       str = zval_get_string(newval TSRMLS_CC);
 
-       xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
-
-       if (newval == &value_copy) {
-               zval_dtor(newval);
-       }
+       xmlNodeSetContentLen(nodep, str->val, str->len + 1);
 
+       STR_RELEASE(str);
        return SUCCESS;
 }
 
index 212d040873a58df4f9f2a3fe635f703adbe24673..cccc44b311739d838e0b32a3d76a6e2ac9842f13 100644 (file)
@@ -86,7 +86,7 @@ PHP_METHOD(domtext, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
        if (intern != NULL) {
                oldnode = dom_object_get_node(intern);
                if (oldnode != NULL) {
@@ -102,7 +102,7 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-wholeText
 Since: DOM Level 3
 */
-int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_text_whole_text_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlNodePtr node;
        xmlChar *wholetext = NULL;
@@ -125,12 +125,11 @@ int dom_text_whole_text_read(dom_object *obj, zval **retval TSRMLS_DC)
                node = node->next;
        }
 
-       ALLOC_ZVAL(*retval);
        if (wholetext != NULL) {
-               ZVAL_STRING(*retval, wholetext, 1);
+               ZVAL_STRING(retval, wholetext);
                xmlFree(wholetext);
        } else {
-               ZVAL_EMPTY_STRING(*retval);
+               ZVAL_EMPTY_STRING(retval);
        }
 
        return SUCCESS;
@@ -151,7 +150,6 @@ PHP_FUNCTION(dom_text_split_text)
        xmlNodePtr  node;
        xmlNodePtr  nnode;
        long        offset;
-       int         ret;
        int         length;
        dom_object      *intern;
 
@@ -196,7 +194,7 @@ PHP_FUNCTION(dom_text_split_text)
                nnode->type = XML_TEXT_NODE;
        }
        
-       return_value = php_dom_create_object(nnode, &ret, return_value, intern TSRMLS_CC);
+       php_dom_create_object(nnode, return_value, intern TSRMLS_CC);
 }
 /* }}} end dom_text_split_text */
 
index 3742780ab7d6affefb330f3f05d61f35e2b3c9ab..5a437dc33211aa68d876095400b798fde63b8a5f 100644 (file)
@@ -46,10 +46,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeName
 Since: 
 */
-int dom_typeinfo_type_name_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_typeinfo_type_name_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
@@ -60,10 +59,9 @@ readonly=yes
 URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#TypeInfo-typeNamespace
 Since: 
 */
-int dom_typeinfo_type_namespace_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_typeinfo_type_namespace_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
-       ALLOC_ZVAL(*retval);
-       ZVAL_NULL(*retval);
+       ZVAL_NULL(retval);
        return SUCCESS;
 }
 
index a7540ba38dad9a76e7b5bda4dc4c1605befc3d1f..549669e7568773d0b0cabfcfe1257ad2d82d009a 100644 (file)
@@ -74,15 +74,13 @@ const zend_function_entry php_dom_xpath_class_functions[] = {
 
 static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs, int type) /* {{{ */
 {
-       zval **args = NULL;
-       zval *retval;
-       int result, i, ret;
+       zval retval;
+       int result, i;
        int error = 0;
        zend_fcall_info fci;
-       zval handler;
        xmlXPathObjectPtr obj;
        char *str;
-       char *callable = NULL;
+       zend_string *callable = NULL;
        dom_xpath_object *intern;
        
        TSRMLS_FETCH();
@@ -115,36 +113,33 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
                
        fci.param_count = nargs - 1;
        if (fci.param_count > 0) {
-               fci.params = safe_emalloc(fci.param_count, sizeof(zval**), 0);
-               args = safe_emalloc(fci.param_count, sizeof(zval *), 0);
+               fci.params = safe_emalloc(fci.param_count, sizeof(zval), 0);
        }
        /* Reverse order to pop values off ctxt stack */
        for (i = nargs - 2; i >= 0; i--) {
                obj = valuePop(ctxt);
-               MAKE_STD_ZVAL(args[i]);
                switch (obj->type) {
                        case XPATH_STRING:
-                               ZVAL_STRING(args[i],  (char *)obj->stringval, 1);
+                               ZVAL_STRING(&fci.params[i],  (char *)obj->stringval);
                                break;
                        case XPATH_BOOLEAN:
-                               ZVAL_BOOL(args[i],  obj->boolval);
+                               ZVAL_BOOL(&fci.params[i],  obj->boolval);
                                break;
                        case XPATH_NUMBER:
-                               ZVAL_DOUBLE(args[i], obj->floatval);
+                               ZVAL_DOUBLE(&fci.params[i], obj->floatval);
                                break;
                        case XPATH_NODESET:
                                if (type == 1) {
                                        str = (char *)xmlXPathCastToString(obj);
-                                       ZVAL_STRING(args[i], str, 1);
+                                       ZVAL_STRING(&fci.params[i], str);
                                        xmlFree(str);
                                } else if (type == 2) {
                                        int j;
-                                       array_init(args[i]);
+                                       array_init(&fci.params[i]);
                                        if (obj->nodesetval && obj->nodesetval->nodeNr > 0) {
                                                for (j = 0; j < obj->nodesetval->nodeNr; j++) {
                                                        xmlNodePtr node = obj->nodesetval->nodeTab[j];
-                                                       zval *child;
-                                                       MAKE_STD_ZVAL(child);
+                                                       zval child;
                                                        /* not sure, if we need this... it's copied from xpath.c */
                                                        if (node->type == XML_NAMESPACE_DECL) {
                                                                xmlNsPtr curns;
@@ -164,17 +159,16 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
                                                                node->parent = nsparent;
                                                                node->ns = curns;
                                                        }
-                                                       child = php_dom_create_object(node, &ret, child, (dom_object *)intern TSRMLS_CC);
-                                                       add_next_index_zval(args[i], child);
+                                                       php_dom_create_object(node, &child, (dom_object *)intern TSRMLS_CC);
+                                                       add_next_index_zval(&fci.params[i], &child);
                                                }
                                        }
                                }
                                break;
                        default:
-                       ZVAL_STRING(args[i], (char *)xmlXPathCastToString(obj), 1);
+                       ZVAL_STRING(&fci.params[i], (char *)xmlXPathCastToString(obj));
                }
                xmlXPathFreeObject(obj);
-               fci.params[i] = &args[i];
        }
        
        fci.size = sizeof(fci);
@@ -186,70 +180,59 @@ static void dom_xpath_ext_function_php(xmlXPathParserContextPtr ctxt, int nargs,
                xmlXPathFreeObject(obj);
                if (fci.param_count > 0) {
                        for (i = 0; i < nargs - 1; i++) {
-                               zval_ptr_dtor(&args[i]);
+                               zval_ptr_dtor(&fci.params[i]);
                        }
-                       efree(args);
                        efree(fci.params);
                }
                return; 
        }
-       INIT_PZVAL(&handler);
-       ZVAL_STRING(&handler, obj->stringval, 1);
+       ZVAL_STRING(&fci.function_name, obj->stringval);
        xmlXPathFreeObject(obj);
 
-       fci.function_name = &handler;
        fci.symbol_table = NULL;
-       fci.object_ptr = NULL;
-       fci.retval_ptr_ptr = &retval;
+       fci.object = NULL;
+       fci.retval = &retval;
        fci.no_separation = 0;
 
-       if (!zend_make_callable(&handler, &callable TSRMLS_CC)) {
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable);
+       if (!zend_make_callable(&fci.function_name, &callable TSRMLS_CC)) {
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", callable->val);
                
-       } else if ( intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable, strlen(callable) + 1) == 0) { 
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'.", callable);
+       } else if (intern->registerPhpFunctions == 2 && zend_hash_exists(intern->registered_phpfunctions, callable) == 0) { 
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Not allowed to call handler '%s()'.", callable->val);
                /* Push an empty string, so that we at least have an xslt result... */
                valuePush(ctxt, xmlXPathNewString((xmlChar *)""));
        } else {
                result = zend_call_function(&fci, NULL TSRMLS_CC);
-               if (result == FAILURE) {
-                       if (Z_TYPE(handler) == IS_STRING) {
-                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call handler %s()", Z_STRVAL_P(&handler));
-                       }
-               /* retval is == NULL, when an exception occurred, don't report anything, because PHP itself will handle that */
-               } else if (retval == NULL) {
-               } else {
-                       if (retval->type == IS_OBJECT && instanceof_function( Z_OBJCE_P(retval), dom_node_class_entry TSRMLS_CC)) {
+               if (result == SUCCESS && Z_TYPE(retval) != IS_UNDEF) {
+                       if (Z_TYPE(retval) == IS_OBJECT && instanceof_function(Z_OBJCE(retval), dom_node_class_entry TSRMLS_CC)) {
                                xmlNode *nodep;
                                dom_object *obj;
                                if (intern->node_list == NULL) {
                                        ALLOC_HASHTABLE(intern->node_list);
                                        zend_hash_init(intern->node_list, 0, NULL, ZVAL_PTR_DTOR, 0);
                                }
-                               zval_add_ref(&retval);
-                               zend_hash_next_index_insert(intern->node_list, &retval, sizeof(zval *), NULL);
-                               obj = (dom_object *)zend_object_store_get_object(retval TSRMLS_CC);
+                               GC_REFCOUNT(&retval)++;
+                               zend_hash_next_index_insert(intern->node_list, &retval);
+                               obj = Z_DOMOBJ_P(&retval);
                                nodep = dom_object_get_node(obj);
                                valuePush(ctxt, xmlXPathNewNodeSet(nodep));
-                       } else if (retval->type == IS_BOOL) {
-                               valuePush(ctxt, xmlXPathNewBoolean(retval->value.lval));
-                       } else if (retval->type == IS_OBJECT) {
+                       } else if (Z_TYPE(retval) == IS_BOOL) {
+                               valuePush(ctxt, xmlXPathNewBoolean(Z_BVAL(retval)));
+                       } else if (Z_TYPE(retval) == IS_OBJECT) {
                                php_error_docref(NULL TSRMLS_CC, E_WARNING, "A PHP Object cannot be converted to a XPath-string");
                                valuePush(ctxt, xmlXPathNewString((xmlChar *)""));
                        } else {
                                convert_to_string_ex(&retval);
-                               valuePush(ctxt, xmlXPathNewString( Z_STRVAL_P(retval)));
+                               valuePush(ctxt, xmlXPathNewString( Z_STRVAL(retval)));
                        }
                        zval_ptr_dtor(&retval);
                }
        }
-       efree(callable);
-       zval_dtor(&handler);
+       STR_FREE(callable);
        if (fci.param_count > 0) {
                for (i = 0; i < nargs - 1; i++) {
-                       zval_ptr_dtor(&args[i]);
+                       zval_ptr_dtor(&fci.params[i]);
                }
-               efree(args);
                efree(fci.params);
        }
 }
@@ -292,7 +275,7 @@ PHP_METHOD(domxpath, __construct)
                RETURN_FALSE;
        }
 
-       intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
        if (intern != NULL) {
                oldctx = (xmlXPathContextPtr)intern->ptr;
                if (oldctx != NULL) {
@@ -316,30 +299,16 @@ PHP_METHOD(domxpath, __construct)
 /* }}} end DOMXPath::__construct */
 
 /* {{{ document DOMDocument*/
-int dom_xpath_document_read(dom_object *obj, zval **retval TSRMLS_DC)
+int dom_xpath_document_read(dom_object *obj, zval *retval TSRMLS_DC)
 {
        xmlDoc *docp = NULL;
-       xmlXPathContextPtr ctx;
-       int ret;
-       zval *tmp;
-
-       ctx = (xmlXPathContextPtr) obj->ptr;
+       xmlXPathContextPtr ctx = (xmlXPathContextPtr) obj->ptr;
 
        if (ctx) {
                docp = (xmlDocPtr) ctx->doc;
        }
 
-       ALLOC_ZVAL(*retval);
-       tmp = *retval;
-
-       if (NULL == (*retval = php_dom_create_object((xmlNodePtr) docp, &ret, *retval, obj TSRMLS_CC))) {
-               FREE_ZVAL(tmp);
-               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object");
-               return FAILURE;
-       }
-       if (tmp != *retval) {
-               FREE_ZVAL(tmp);
-       }
+       php_dom_create_object((xmlNodePtr) docp, retval, obj TSRMLS_CC);
        return SUCCESS;
 }
 /* }}} */
@@ -357,7 +326,7 @@ PHP_FUNCTION(dom_xpath_register_ns)
                return;
        }
 
-       intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
 
        ctxp = (xmlXPathContextPtr) intern->ptr;
        if (ctxp == NULL) {
@@ -385,11 +354,11 @@ static void dom_xpath_iter(zval *baseobj, dom_object *intern) /* {{{ */
 
 static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
 {
-       zval *id, *retval, *context = NULL;
+       zval *id, retval, *context = NULL;
        xmlXPathContextPtr ctxp;
        xmlNodePtr nodep = NULL;
        xmlXPathObjectPtr xpathobjp;
-       int expr_len, ret, nsnbr = 0, xpath_type;
+       int expr_len, nsnbr = 0, xpath_type;
        dom_xpath_object *intern;
        dom_object *nodeobj;
        char *expr;
@@ -401,7 +370,7 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                return;
        }
 
-       intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+       intern = Z_DOMOBJ_P(id);
 
        ctxp = (xmlXPathContextPtr) intern->ptr;
        if (ctxp == NULL) {
@@ -470,16 +439,13 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                        int i;
                        xmlNodeSetPtr nodesetp;
 
-                       MAKE_STD_ZVAL(retval);
-                       array_init(retval);
+                       array_init(&retval);
 
                        if (xpathobjp->type == XPATH_NODESET && NULL != (nodesetp = xpathobjp->nodesetval)) {
 
                                for (i = 0; i < nodesetp->nodeNr; i++) {
                                        xmlNodePtr node = nodesetp->nodeTab[i];
-                                       zval *child;
-
-                                       MAKE_STD_ZVAL(child);
+                                       zval child;
                                        
                                        if (node->type == XML_NAMESPACE_DECL) {
                                                xmlNsPtr curns;
@@ -499,13 +465,13 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                                                node->parent = nsparent;
                                                node->ns = curns;
                                        }
-                                       child = php_dom_create_object(node, &ret, child, (dom_object *)intern TSRMLS_CC);
-                                       add_next_index_zval(retval, child);
+                                       php_dom_create_object(node, &child, (dom_object *)intern TSRMLS_CC);
+                                       add_next_index_zval(&retval, &child);
                                }
                        }
                        php_dom_create_interator(return_value, DOM_NODELIST TSRMLS_CC);
-                       nodeobj = (dom_object *)zend_objects_get_address(return_value TSRMLS_CC);
-                       dom_xpath_iter(retval, nodeobj);
+                       nodeobj = Z_DOMOBJ_P(return_value);
+                       dom_xpath_iter(&retval, nodeobj);
                        break;
                }
 
@@ -518,7 +484,7 @@ static void php_xpath_eval(INTERNAL_FUNCTION_PARAMETERS, int type) /* {{{ */
                        break;
 
                case XPATH_STRING:
-                       RETVAL_STRING(xpathobjp->stringval, 1);
+                       RETVAL_STRING(xpathobjp->stringval);
                        break;
 
                default:
@@ -549,39 +515,32 @@ PHP_FUNCTION(dom_xpath_register_php_functions)
 {
        zval *id;
        dom_xpath_object *intern;
-       zval *array_value, **entry, *new_string;
-       int  name_len = 0;
-       char *name;
+       zval *array_value, *entry, new_string;
+       zend_string *name;
 
        DOM_GET_THIS(id);
        
        if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a",  &array_value) == SUCCESS) {
-               intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
                zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));
-
-               while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) {
-                       SEPARATE_ZVAL(entry);
-                       convert_to_string_ex(entry);
-
-                       MAKE_STD_ZVAL(new_string);
-                       ZVAL_LONG(new_string,1);
-               
-                       zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL);
+               while ((entry = zend_hash_get_current_data(Z_ARRVAL_P(array_value)))) {
+                       zend_string *str = zval_get_string(entry TSRMLS_CC);
+                       ZVAL_LONG(&new_string,1);
+                       zend_hash_update(intern->registered_phpfunctions, str, &new_string);
                        zend_hash_move_forward(Z_ARRVAL_P(array_value));
+                       STR_RELEASE(str);
                }
                intern->registerPhpFunctions = 2;
                RETURN_TRUE;
 
-       } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s",  &name, &name_len) == SUCCESS) {
-               intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+       } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "S",  &name) == SUCCESS) {
+               intern = Z_DOMOBJ_P(id);
                
-               MAKE_STD_ZVAL(new_string);
-               ZVAL_LONG(new_string,1);
-               zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL);
+               ZVAL_LONG(&new_string, 1);
+               zend_hash_update(intern->registered_phpfunctions, name, &new_string);
                intern->registerPhpFunctions = 2;
-               
        } else {
-               intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC);
+               intern = Z_DOMOBJ_P(id);
                intern->registerPhpFunctions = 1;
        }