@@ -139,6 +139,26 @@ static void php_dom_iterator_current_key(zend_object_iterator *iter, zval *key)
139
139
}
140
140
/* }}} */
141
141
142
+ static xmlNodePtr dom_fetch_first_iteration_item (dom_nnodemap_object * objmap )
143
+ {
144
+ xmlNodePtr basep = dom_object_get_node (objmap -> baseobj );
145
+ if (!basep ) {
146
+ return NULL ;
147
+ }
148
+ if (objmap -> nodetype == XML_ATTRIBUTE_NODE || objmap -> nodetype == XML_ELEMENT_NODE ) {
149
+ if (objmap -> nodetype == XML_ATTRIBUTE_NODE ) {
150
+ return (xmlNodePtr ) basep -> properties ;
151
+ } else {
152
+ return basep -> children ;
153
+ }
154
+ } else {
155
+ int curindex = 0 ;
156
+ xmlNodePtr nodep = php_dom_first_child_of_container_node (basep );
157
+ return dom_get_elements_by_tag_name_ns_raw (
158
+ basep , nodep , objmap -> ns , objmap -> local , objmap -> local_lower , & curindex , 0 );
159
+ }
160
+ }
161
+
142
162
static void php_dom_iterator_move_forward (zend_object_iterator * iter ) /* {{{ */
143
163
{
144
164
xmlNodePtr curnode = NULL ;
@@ -219,7 +239,6 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
219
239
dom_object * intern ;
220
240
dom_nnodemap_object * objmap ;
221
241
xmlNodePtr curnode = NULL ;
222
- int curindex = 0 ;
223
242
HashTable * nodeht ;
224
243
zval * entry ;
225
244
php_dom_iterator * iterator ;
@@ -249,27 +268,13 @@ zend_object_iterator *php_dom_get_iterator(zend_class_entry *ce, zval *object, i
249
268
ZVAL_COPY (& iterator -> curobj , entry );
250
269
}
251
270
} else {
252
- xmlNodePtr basep = (xmlNode * )dom_object_get_node (objmap -> baseobj );
253
- if (!basep ) {
254
- goto err ;
255
- }
256
- if (objmap -> nodetype == XML_ATTRIBUTE_NODE || objmap -> nodetype == XML_ELEMENT_NODE ) {
257
- if (objmap -> nodetype == XML_ATTRIBUTE_NODE ) {
258
- curnode = (xmlNodePtr ) basep -> properties ;
259
- } else {
260
- curnode = (xmlNodePtr ) basep -> children ;
261
- }
262
- } else {
263
- xmlNodePtr nodep = php_dom_first_child_of_container_node (basep );
264
- curnode = dom_get_elements_by_tag_name_ns_raw (
265
- basep , nodep , objmap -> ns , objmap -> local , objmap -> local_lower , & curindex , 0 );
266
- }
271
+ curnode = dom_fetch_first_iteration_item (objmap );
267
272
}
268
273
} else {
269
274
curnode = php_dom_libxml_hash_iter (objmap , 0 );
270
275
}
271
276
}
272
- err :
277
+
273
278
if (curnode ) {
274
279
php_dom_create_object (curnode , & iterator -> curobj , objmap -> baseobj );
275
280
}
0 commit comments