@@ -49,6 +49,13 @@ static void itemHashScanner (void *payload, void *data, xmlChar *name)
49
49
}
50
50
/* }}} */
51
51
52
+ static dom_nnodemap_object * php_dom_iterator_get_nnmap (const php_dom_iterator * iterator )
53
+ {
54
+ const zval * object = & iterator -> intern .data ;
55
+ dom_object * nnmap = Z_DOMOBJ_P (object );
56
+ return nnmap -> ptr ;
57
+ }
58
+
52
59
xmlNodePtr create_notation (const xmlChar * name , const xmlChar * ExternalID , const xmlChar * SystemID ) /* {{{ */
53
60
{
54
61
xmlEntityPtr ret = xmlMalloc (sizeof (xmlEntity ));
@@ -120,11 +127,11 @@ zval *php_dom_iterator_current_data(zend_object_iterator *iter) /* {{{ */
120
127
static void php_dom_iterator_current_key (zend_object_iterator * iter , zval * key ) /* {{{ */
121
128
{
122
129
php_dom_iterator * iterator = (php_dom_iterator * )iter ;
123
- zval * object = & iterator -> intern .data ;
124
- zend_class_entry * ce = Z_OBJCE_P (object );
130
+ dom_nnodemap_object * objmap = php_dom_iterator_get_nnmap (iterator );
125
131
126
- /* Nodelists have the index as a key while named node maps have the name as a key. */
127
- if (instanceof_function (ce , dom_nodelist_class_entry ) || instanceof_function (ce , dom_modern_nodelist_class_entry )) {
132
+ /* Only (dtd) named node maps, i.e. the ones based on a libxml hash table, are keyed by the name
133
+ * because in that case the name is unique. */
134
+ if (!objmap -> ht ) {
128
135
ZVAL_LONG (key , iter -> index );
129
136
} else {
130
137
dom_object * intern = Z_DOMOBJ_P (& iterator -> curobj );
@@ -169,9 +176,7 @@ static void php_dom_iterator_move_forward(zend_object_iterator *iter) /* {{{ */
169
176
}
170
177
171
178
dom_object * intern = Z_DOMOBJ_P (& iterator -> curobj );
172
- zval * object = & iterator -> intern .data ;
173
- dom_object * nnmap = Z_DOMOBJ_P (object );
174
- dom_nnodemap_object * objmap = nnmap -> ptr ;
179
+ dom_nnodemap_object * objmap = php_dom_iterator_get_nnmap (iterator );
175
180
176
181
if (intern != NULL && intern -> ptr != NULL ) {
177
182
if (objmap -> nodetype != XML_ENTITY_NODE &&
0 commit comments