com php-src: Merge branch 'PHP-5.6': ext/dom/nodelist.c ext/dom/php_dom.c ext/dom/php_dom.h
| From: | Tjerk Anne Meesters | Date: | Thu, 09 Oct 2014 15:32:19 +0000 |
| Subject: | com php-src: Merge branch 'PHP-5.6': ext/dom/nodelist.c ext/dom/php_dom.c ext/dom/php_dom.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82217@lists.php.net to get a copy of this message | ||
Commit: 0a50b250b2538c3640edb7d8ff07c85472823041
Author: Tjerk Meesters <datibbaw@php.net> Thu, 9 Oct 2014 23:32:19 +0800
Parents: 2f099478a3c5509e4063002b3256bde380739e3d 59f39dea66f8de4de240eb01b4553644fdc5b8bd
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=0a50b250b2538c3640edb7d8ff07c85472823041
Log:
Merge branch 'PHP-5.6'
* PHP-5.6:
Refactored DOMNodeList array dereferencing implementation
Conflicts:
ext/dom/nodelist.c
ext/dom/php_dom.c
Changed paths:
MM ext/dom/nodelist.c
MM ext/dom/php_dom.c
MM ext/dom/php_dom.h
Diff:
diff --cc ext/dom/nodelist.c
index 223960c,1a0c811..1507173
--- a/ext/dom/nodelist.c
+++ b/ext/dom/nodelist.c
@@@ -152,6 -111,10 +111,8 @@@ PHP_FUNCTION(dom_nodelist_item
xmlNodePtr itemnode = NULL;
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;
@@@ -163,13 -126,17 +124,17 @@@
objmap = (dom_nnodemap_object *)intern->ptr;
if (objmap != NULL) {
if (objmap->ht) {
- itemnode = dom_nodelist_xml_item(objmap, index);
+ if (objmap->nodetype == XML_ENTITY_NODE) {
+ itemnode = php_dom_libxml_hash_iter(objmap->ht, index);
+ } else {
+ itemnode = php_dom_libxml_notation_iter(objmap->ht, index);
+ }
} 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->baseobj_zv);
+ zval *entry = zend_hash_index_find(nodeht, index);
+ if (entry) {
+ ZVAL_COPY(return_value, entry);
return;
}
} else if (objmap->baseobj) {
diff --cc ext/dom/php_dom.c
index cfe6b12,ead6983..71c0661
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@@ -1544,70 -1679,43 +1544,39 @@@ xmlNsPtr dom_get_nsdecl(xmlNode *node,
}
/* }}} end dom_get_nsdecl */
- static int dom_nodelist_fetch_dimension(xmlNodePtr *itemnode, zval *offset, dom_nnodemap_object
*objmap, zval *rv TSRMLS_DC) /* {{{ */
-zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */
++zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC) /* {{{
*/
{
- long index = zval_get_long(offset);
- HashTable *nodeht;
- int ret = 0;
-
- if (objmap->ht) {
- *itemnode = dom_nodelist_xml_item(objmap, index);
- } else {
- if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(&objmap->baseobj_zv);
- zval *entry = zend_hash_index_find(nodeht, index);
- if (entry) {
- if (itemnode != NULL && rv != NULL) {
- /* Passed by read_dimension */
- ZVAL_COPY(rv, entry);
- }
- ret = 1;
- }
- } else if (objmap->baseobj) {
- if (itemnode == NULL && rv == NULL) {
- /* Passed by has_dimension */
- if (dom_nodelist_baseobj_item(objmap, index)) {
- ret = 1;
- }
- } else {
- *itemnode = dom_nodelist_baseobj_item(objmap, index);
- }
- }
- }
- zval *rv, offset_copy;
++ zval offset_copy;
- if (rv != NULL && itemnode != NULL) {
- if (*itemnode) {
- ret = 1;
- }
+ if (!offset) {
+ return NULL;
}
- return ret;
- } /* }}} end dom_nodelist_fetch_dimension */
-
- zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC) /* {{{
*/
- {
- dom_object *intern = Z_DOMOBJ_P(object);
- xmlNodePtr itemnode = NULL;
- dom_nnodemap_object *objmap = (dom_nnodemap_object *)intern->ptr;
- MAKE_COPY_ZVAL(&offset, &offset_copy);
++ ZVAL_COPY(&offset_copy, offset);
+ convert_to_long(&offset_copy);
- if (dom_nodelist_fetch_dimension(&itemnode, offset, objmap, rv TSRMLS_CC)) {
- if (itemnode) {
- php_dom_create_object(itemnode, rv, objmap->baseobj TSRMLS_CC);
- }
- }
- zend_call_method_with_1_params(&object, Z_OBJCE_P(object), NULL, "item", &rv,
&offset_copy);
-
- Z_DELREF_P(rv);
++ zend_call_method_with_1_params(object, Z_OBJCE_P(object), NULL, "item", rv,
&offset_copy);
return rv;
} /* }}} end dom_nodelist_read_dimension */
int dom_nodelist_has_dimension(zval *object, zval *member, int check_empty TSRMLS_DC)
{
- dom_object *intern;
- dom_nnodemap_object *objmap;
+ zval *length, offset_copy;
+ int ret;
- intern = Z_DOMOBJ_P(object);
- objmap = (dom_nnodemap_object *)intern->ptr;
- MAKE_COPY_ZVAL(&member, &offset_copy);
++ ZVAL_COPY(&offset_copy, member);
+ convert_to_long(&offset_copy);
+
+ if (Z_LVAL(offset_copy) < 0) {
+ return 0;
+ }
- return dom_nodelist_fetch_dimension(NULL, member, objmap, NULL TSRMLS_CC);
+ length = zend_read_property(Z_OBJCE_P(object), object, "length",
sizeof("length") - 1, 0 TSRMLS_CC);
+
+ ret = Z_LVAL(offset_copy) < Z_LVAL_P(length);
+
- FREE_ZVAL(length);
-
+ return ret;
} /* }}} end dom_nodelist_has_dimension */
#endif /* HAVE_DOM */
diff --cc ext/dom/php_dom.h
index 9f8023f,6f0d9b8..02eb2d9
--- a/ext/dom/php_dom.h
+++ b/ext/dom/php_dom.h
@@@ -126,9 -123,8 +126,8 @@@ xmlNode *php_dom_libxml_hash_iter(xmlHa
xmlNode *php_dom_libxml_notation_iter(xmlHashTable *ht, int index);
zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, int by_ref
TSRMLS_DC);
int dom_set_doc_classmap(php_libxml_ref_obj *document, zend_class_entry *basece, zend_class_entry
*ce TSRMLS_DC);
-zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type TSRMLS_DC);
+zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC);
int dom_nodelist_has_dimension(zval *object, zval *member, int check_empty TSRMLS_DC);
- static int dom_nodelist_fetch_dimension(xmlNodePtr *itemnode, zval *offset, dom_nnodemap_object
*objmap, zval *rv TSRMLS_DC);
#define REGISTER_DOM_CLASS(ce, name, parent_ce, funcs, entry) \
INIT_CLASS_ENTRY(ce, name, funcs); \