]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.6'
authorTjerk Meesters <datibbaw@php.net>
Thu, 9 Oct 2014 08:55:15 +0000 (16:55 +0800)
committerTjerk Meesters <datibbaw@php.net>
Thu, 9 Oct 2014 08:55:15 +0000 (16:55 +0800)
Conflicts:
ext/dom/dom_properties.h
ext/dom/nodelist.c
ext/dom/php_dom.c

1  2 
ext/dom/dom_properties.h
ext/dom/nodelist.c
ext/dom/php_dom.c
ext/dom/php_dom.h

index 7e607f0a2e6abb3f55d4ce1f6c171e611e37c670,9d82d0e860ac5e0dcf6546e48fc1900efdcb3095..b5c81d271b66f66e2cb631ccb87b926f8bffbeb1
@@@ -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 */
index 68292d198328361ee9c3ba0200dd50c7a0fa30f5,b8657407758353da182a7ab521b29527ff6b6ccb..223960c5bc078345f95d3ac0319fc5c8f989aef6
@@@ -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;
                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) {
index 8a00ad5a0852e94730c531bfa919a9226360d9b3,01a0a6c6bb94a8f666cdb22502fa3b61c0c6945f..111b4fa568e347fad66db1ffe9003391cbac114b
@@@ -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 */
  
 -      zval **entry;
+ 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;
 -                      nodeht = HASH_OF(objmap->baseobjptr);
 -                      if (zend_hash_index_find(nodeht, index, (void **) &entry) == SUCCESS) {
+       int ret = 0;
+       if (objmap->ht) {
+               *itemnode = dom_nodelist_xml_item(objmap, index);
+       } else {
+               if (objmap->nodetype == DOM_NODESET) {
 -                                      MAKE_COPY_ZVAL(entry, rv);
++                      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 *dom_nodelist_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) /* {{{ */
++                                      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 */
 -      dom_object *intern;
++zval *dom_nodelist_read_dimension(zval *object, zval *offset, int type, zval *rv TSRMLS_DC) /* {{{ */
+ {
 -      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_object *intern = Z_DOMOBJ_P(object);
+       xmlNodePtr itemnode = NULL;
 -                      php_dom_create_object(itemnode, &found, rv, objmap->baseobj TSRMLS_CC);
++      dom_nnodemap_object *objmap = (dom_nnodemap_object *)intern->ptr;
+       if (dom_nodelist_fetch_dimension(&itemnode, offset, objmap, rv TSRMLS_CC)) {
+               if (itemnode) {
 -      Z_DELREF_P(rv);
 -
++                      php_dom_create_object(itemnode, rv, objmap->baseobj TSRMLS_CC);
+               }
+       }
 -      intern = (dom_object *) zend_object_store_get_object(object TSRMLS_CC);
+       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 = 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 */
  
  /*
index 9162031a90add82ed906cba17bdde4afa57f8115,eb35aa015d08f6cb6ce2f0d611866f43b9d871bd..9f8023f67bc1454617686445dd1ec4bfd1f6e4d6
@@@ -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); \