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: 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); \

« previous php.cvs (#82204) next »