@@ -73,12 +73,6 @@ struct _spl_heap_object {
73
73
zend_object std ;
74
74
};
75
75
76
- /* define an overloaded iterator structure */
77
- struct _spl_heap_it {
78
- zend_user_iterator intern ;
79
- int flags ;
80
- };
81
-
82
76
typedef struct _spl_pqueue_elem {
83
77
zval data ;
84
78
zval priority ;
@@ -892,10 +886,8 @@ PHP_METHOD(SplMaxHeap, compare)
892
886
893
887
static void spl_heap_it_dtor (zend_object_iterator * iter ) /* {{{ */
894
888
{
895
- spl_heap_it * iterator = (spl_heap_it * )iter ;
896
-
897
889
zend_user_it_invalidate_current (iter );
898
- zval_ptr_dtor (& iterator -> intern . it . data );
890
+ zval_ptr_dtor (& iter -> data );
899
891
}
900
892
/* }}} */
901
893
@@ -1102,52 +1094,39 @@ static const zend_object_iterator_funcs spl_pqueue_it_funcs = {
1102
1094
1103
1095
zend_object_iterator * spl_heap_get_iterator (zend_class_entry * ce , zval * object , int by_ref ) /* {{{ */
1104
1096
{
1105
- spl_heap_it * iterator ;
1106
- spl_heap_object * heap_object = Z_SPLHEAP_P (object );
1107
-
1108
1097
if (by_ref ) {
1109
1098
zend_throw_error (NULL , "An iterator cannot be used with foreach by reference" );
1110
1099
return NULL ;
1111
1100
}
1112
1101
1113
- iterator = emalloc (sizeof (spl_heap_it ));
1102
+ zend_user_iterator * iterator = emalloc (sizeof (zend_user_iterator ));
1103
+ zend_iterator_init (& iterator -> it );
1114
1104
1115
- zend_iterator_init (& iterator -> intern .it );
1105
+ ZVAL_OBJ_COPY (& iterator -> it .data , Z_OBJ_P (object ));
1106
+ iterator -> it .funcs = & spl_heap_it_funcs ;
1107
+ iterator -> ce = ce ;
1108
+ ZVAL_UNDEF (& iterator -> value );
1116
1109
1117
- Z_ADDREF_P (object );
1118
- ZVAL_OBJ (& iterator -> intern .it .data , Z_OBJ_P (object ));
1119
- iterator -> intern .it .funcs = & spl_heap_it_funcs ;
1120
- iterator -> intern .ce = ce ;
1121
- iterator -> flags = heap_object -> flags ;
1122
- ZVAL_UNDEF (& iterator -> intern .value );
1123
-
1124
- return & iterator -> intern .it ;
1110
+ return & iterator -> it ;
1125
1111
}
1126
1112
/* }}} */
1127
1113
1128
1114
zend_object_iterator * spl_pqueue_get_iterator (zend_class_entry * ce , zval * object , int by_ref ) /* {{{ */
1129
1115
{
1130
- spl_heap_it * iterator ;
1131
- spl_heap_object * heap_object = Z_SPLHEAP_P (object );
1132
-
1133
1116
if (by_ref ) {
1134
1117
zend_throw_error (NULL , "An iterator cannot be used with foreach by reference" );
1135
1118
return NULL ;
1136
1119
}
1137
1120
1138
- iterator = emalloc (sizeof (spl_heap_it ));
1139
-
1140
- zend_iterator_init ((zend_object_iterator * )iterator );
1141
-
1142
- Z_ADDREF_P (object );
1143
- ZVAL_OBJ (& iterator -> intern .it .data , Z_OBJ_P (object ));
1144
- iterator -> intern .it .funcs = & spl_pqueue_it_funcs ;
1145
- iterator -> intern .ce = ce ;
1146
- iterator -> flags = heap_object -> flags ;
1121
+ zend_user_iterator * iterator = emalloc (sizeof (zend_user_iterator ));
1122
+ zend_iterator_init (& iterator -> it );
1147
1123
1148
- ZVAL_UNDEF (& iterator -> intern .value );
1124
+ ZVAL_OBJ_COPY (& iterator -> it .data , Z_OBJ_P (object ));
1125
+ iterator -> it .funcs = & spl_pqueue_it_funcs ;
1126
+ iterator -> ce = ce ;
1127
+ ZVAL_UNDEF (& iterator -> value );
1149
1128
1150
- return & iterator -> intern . it ;
1129
+ return & iterator -> it ;
1151
1130
}
1152
1131
/* }}} */
1153
1132
0 commit comments