com php-src: Merge branch 'PHP-5.6': ext/dom/dom_properties .h ext/dom/nodelist.c ext/dom/php_dom.c ext/dom/p hp_dom.h
| From: | Tjerk Anne Meesters | Date: | Thu, 09 Oct 2014 08:55:15 +0000 |
| Subject: | com php-src: Merge branch 'PHP-5.6': ext/dom/dom_properties .h ext/dom/nodelist.c ext/dom/php_dom.c ext/dom/p hp_dom.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-82204@lists.php.net to get a copy of this message | ||
Commit: 49078a6598bade43a42fd7bbebac4f4c5a6cd3df
Author: Tjerk Meesters <datibbaw@php.net> Thu, 9 Oct 2014 16:55:15 +0800
Parents: 78156520ae621357abeb100d58f671d675536263 72bd28a5da7bd6e9accfc6442a970a3064b8f76d
Branches: master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=49078a6598bade43a42fd7bbebac4f4c5a6cd3df
Log:
Merge branch 'PHP-5.6'
Conflicts:
ext/dom/dom_properties.h
ext/dom/nodelist.c
ext/dom/php_dom.c
Changed paths:
MM ext/dom/dom_properties.h
MM ext/dom/nodelist.c
MM ext/dom/php_dom.c
MM ext/dom/php_dom.h
Diff:
diff --cc ext/dom/dom_properties..h
index 7e607f0,9d82d0e..b5c81d2
--- a/ext/dom/dom_properties.h
+++ b/ext/dom/dom_properties.h
@@@ -136,15 -136,17 +136,17 @@@ int dom_node_text_content_read(dom_obje
int dom_node_text_content_write(dom_object *obj, zval *newval TSRMLS_DC);
/* nodelist properties */
-int dom_nodelist_length_read(dom_object *obj, zval **retval TSRMLS_DC);
+int dom_nodelist_length_read(dom_object *obj, zval *retval TSRMLS_DC);
+ xmlNodePtr dom_nodelist_xml_item(dom_nnodemap_object *objmap, long index);
+ xmlNodePtr dom_nodelist_baseobj_item(dom_nnodemap_object *objmap, long index);
/* notation properties */
-int dom_notation_public_id_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_notation_system_id_read(dom_object *obj, zval **retval TSRMLS_DC);
+int dom_notation_public_id_read(dom_object *obj, zval *retval TSRMLS_DC);
+int dom_notation_system_id_read(dom_object *obj, zval *retval TSRMLS_DC);
/* processinginstruction properties */
-int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC);
-int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC);
+int dom_processinginstruction_target_read(dom_object *obj, zval *retval TSRMLS_DC);
+int dom_processinginstruction_data_read(dom_object *obj, zval *retval TSRMLS_DC);
int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC);
/* text properties */
diff --cc ext/dom/nodelist.c
index 68292d1,b865740..223960c
--- a/ext/dom/nodelist.c
+++ b/ext/dom/nodelist.c
@@@ -111,8 -152,8 +152,6 @@@ 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;
@@@ -124,17 -165,12 +163,13 @@@
objmap = (dom_nnodemap_object *)intern->ptr;
if (objmap != NULL) {
if (objmap->ht) {
- 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);
- }
+ itemnode = dom_nodelist_xml_item(objmap, index);
} else {
if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- if (zend_hash_index_find(nodeht, index, (void **) &entry)==SUCCESS) {
- MAKE_COPY_ZVAL(entry, 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 8a00ad5,01a0a6c..111b4fa
--- a/ext/dom/php_dom.c
+++ b/ext/dom/php_dom.c
@@@ -617,8 -670,8 +617,10 @@@ PHP_MINIT_FUNCTION(dom
dom_object_handlers.get_debug_info = dom_get_debug_info;
memcpy(&dom_nnodemap_object_handlers, &dom_object_handlers,
sizeof(zend_object_handlers));
+ dom_nnodemap_object_handlers.free_obj = dom_nnodemap_objects_free_storage;
+ dom_nnodemap_object_handlers.dtor_obj = dom_nnodemap_object_dtor;
+ dom_nnodemap_object_handlers.read_dimension = dom_nodelist_read_dimension;
+ dom_nnodemap_object_handlers.has_dimension = dom_nodelist_has_dimension;
zend_hash_init(&classes, 0, NULL, NULL, 1);
@@@ -1542,6 -1679,83 +1544,73 @@@ 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) /* {{{ */
+ {
+ convert_to_long(offset);
+ long index = Z_LVAL_P(offset);
+ HashTable *nodeht;
- zval **entry;
+ int ret = 0;
+
+ if (objmap->ht) {
+ *itemnode = dom_nodelist_xml_item(objmap, index);
+ } else {
+ if (objmap->nodetype == DOM_NODESET) {
- nodeht = HASH_OF(objmap->baseobjptr);
- if (zend_hash_index_find(nodeht, index, (void **) &entry) == SUCCESS) {
++ 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 */
- MAKE_COPY_ZVAL(entry, rv);
++ 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);
+ }
+ }
+ }
+
+ if (rv != NULL && itemnode != NULL) {
+ if (*itemnode) {
+ ret = 1;
+ }
+ }
+
+ return ret;
+ } /* }}} end dom_nodelist_fetch_dimension */
+
-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) /* {{{
*/
+ {
- dom_object *intern;
++ dom_object *intern = Z_DOMOBJ_P(object);
+ xmlNodePtr itemnode = NULL;
- dom_nnodemap_object *objmap;
- zval *rv;
- int found;
-
- ALLOC_INIT_ZVAL(rv);
-
- intern = (dom_object *) zend_object_store_get_object(object TSRMLS_CC);
-
- objmap = (dom_nnodemap_object *)intern->ptr;
++ dom_nnodemap_object *objmap = (dom_nnodemap_object *)intern->ptr;
+
+ if (dom_nodelist_fetch_dimension(&itemnode, offset, objmap, rv TSRMLS_CC)) {
+ if (itemnode) {
- php_dom_create_object(itemnode, &found, rv, objmap->baseobj TSRMLS_CC);
++ php_dom_create_object(itemnode, rv, objmap->baseobj TSRMLS_CC);
+ }
+ }
+
- Z_DELREF_P(rv);
-
+ 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;
+
- intern = (dom_object *) zend_object_store_get_object(object TSRMLS_CC);
++ intern = Z_DOMOBJ_P(object);
+ objmap = (dom_nnodemap_object *)intern->ptr;
+
+ return dom_nodelist_fetch_dimension(NULL, member, objmap, NULL TSRMLS_CC);
+ } /* }}} end dom_nodelist_has_dimension */
+
#endif /* HAVE_DOM */
/*
diff --cc ext/dom/php_dom.h
index 9162031,eb35aa0..9f8023f
--- a/ext/dom/php_dom.h
+++ b/ext/dom/php_dom.h
@@@ -126,6 -123,9 +126,9 @@@ 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); \