@@ -44,11 +44,6 @@ PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
44
44
#define SPL_ARRAY_STD_PROP_LIST 0x00000001
45
45
#define SPL_ARRAY_ARRAY_AS_PROPS 0x00000002
46
46
#define SPL_ARRAY_CHILD_ARRAYS_ONLY 0x00000004
47
- #define SPL_ARRAY_OVERLOADED_REWIND 0x00010000
48
- #define SPL_ARRAY_OVERLOADED_VALID 0x00020000
49
- #define SPL_ARRAY_OVERLOADED_KEY 0x00040000
50
- #define SPL_ARRAY_OVERLOADED_CURRENT 0x00080000
51
- #define SPL_ARRAY_OVERLOADED_NEXT 0x00100000
52
47
#define SPL_ARRAY_IS_SELF 0x01000000
53
48
#define SPL_ARRAY_USE_OTHER 0x02000000
54
49
#define SPL_ARRAY_INT_MASK 0xFFFF0000
@@ -229,19 +224,6 @@ static zend_object *spl_array_object_new_ex(zend_class_entry *class_type, zend_o
229
224
intern -> fptr_count = NULL ;
230
225
}
231
226
}
232
- /* Cache iterator functions if ArrayIterator or derived. Check current's */
233
- /* cache since only current is always required */
234
- if (intern -> std .handlers == & spl_handler_ArrayIterator ) {
235
- zend_class_iterator_funcs * funcs_ptr = class_type -> iterator_funcs_ptr ;
236
-
237
- if (inherited ) {
238
- if (funcs_ptr -> zf_rewind -> common .scope != parent ) intern -> ar_flags |= SPL_ARRAY_OVERLOADED_REWIND ;
239
- if (funcs_ptr -> zf_valid -> common .scope != parent ) intern -> ar_flags |= SPL_ARRAY_OVERLOADED_VALID ;
240
- if (funcs_ptr -> zf_key -> common .scope != parent ) intern -> ar_flags |= SPL_ARRAY_OVERLOADED_KEY ;
241
- if (funcs_ptr -> zf_current -> common .scope != parent ) intern -> ar_flags |= SPL_ARRAY_OVERLOADED_CURRENT ;
242
- if (funcs_ptr -> zf_next -> common .scope != parent ) intern -> ar_flags |= SPL_ARRAY_OVERLOADED_NEXT ;
243
- }
244
- }
245
227
246
228
intern -> ht_iter = (uint32_t )-1 ;
247
229
return & intern -> std ;
@@ -952,56 +934,36 @@ static int spl_array_it_valid(zend_object_iterator *iter) /* {{{ */
952
934
{
953
935
spl_array_object * object = Z_SPLARRAY_P (& iter -> data );
954
936
HashTable * aht = spl_array_get_hash_table (object );
955
-
956
- if (object -> ar_flags & SPL_ARRAY_OVERLOADED_VALID ) {
957
- return zend_user_it_valid (iter );
958
- } else {
959
- return zend_hash_has_more_elements_ex (aht , spl_array_get_pos_ptr (aht , object ));
960
- }
937
+ return zend_hash_has_more_elements_ex (aht , spl_array_get_pos_ptr (aht , object ));
961
938
}
962
939
/* }}} */
963
940
964
941
static zval * spl_array_it_get_current_data (zend_object_iterator * iter ) /* {{{ */
965
942
{
966
943
spl_array_object * object = Z_SPLARRAY_P (& iter -> data );
967
944
HashTable * aht = spl_array_get_hash_table (object );
968
-
969
- if (object -> ar_flags & SPL_ARRAY_OVERLOADED_CURRENT ) {
970
- return zend_user_it_get_current_data (iter );
971
- } else {
972
- zval * data = zend_hash_get_current_data_ex (aht , spl_array_get_pos_ptr (aht , object ));
973
- if (data && Z_TYPE_P (data ) == IS_INDIRECT ) {
974
- data = Z_INDIRECT_P (data );
975
- }
976
- return data ;
945
+ zval * data = zend_hash_get_current_data_ex (aht , spl_array_get_pos_ptr (aht , object ));
946
+ if (data && Z_TYPE_P (data ) == IS_INDIRECT ) {
947
+ data = Z_INDIRECT_P (data );
977
948
}
949
+ return data ;
978
950
}
979
951
/* }}} */
980
952
981
953
static void spl_array_it_get_current_key (zend_object_iterator * iter , zval * key ) /* {{{ */
982
954
{
983
955
spl_array_object * object = Z_SPLARRAY_P (& iter -> data );
984
956
HashTable * aht = spl_array_get_hash_table (object );
985
-
986
- if (object -> ar_flags & SPL_ARRAY_OVERLOADED_KEY ) {
987
- zend_user_it_get_current_key (iter , key );
988
- } else {
989
- zend_hash_get_current_key_zval_ex (aht , key , spl_array_get_pos_ptr (aht , object ));
990
- }
957
+ zend_hash_get_current_key_zval_ex (aht , key , spl_array_get_pos_ptr (aht , object ));
991
958
}
992
959
/* }}} */
993
960
994
961
static void spl_array_it_move_forward (zend_object_iterator * iter ) /* {{{ */
995
962
{
996
963
spl_array_object * object = Z_SPLARRAY_P (& iter -> data );
997
964
HashTable * aht = spl_array_get_hash_table (object );
998
-
999
- if (object -> ar_flags & SPL_ARRAY_OVERLOADED_NEXT ) {
1000
- zend_user_it_move_forward (iter );
1001
- } else {
1002
- zend_user_it_invalidate_current (iter );
1003
- spl_array_next_ex (object , aht );
1004
- }
965
+ zend_user_it_invalidate_current (iter );
966
+ spl_array_next_ex (object , aht );
1005
967
}
1006
968
/* }}} */
1007
969
@@ -1021,13 +983,8 @@ static void spl_array_rewind(spl_array_object *intern) /* {{{ */
1021
983
static void spl_array_it_rewind (zend_object_iterator * iter ) /* {{{ */
1022
984
{
1023
985
spl_array_object * object = Z_SPLARRAY_P (& iter -> data );
1024
-
1025
- if (object -> ar_flags & SPL_ARRAY_OVERLOADED_REWIND ) {
1026
- zend_user_it_rewind (iter );
1027
- } else {
1028
986
zend_user_it_invalidate_current (iter );
1029
987
spl_array_rewind (object );
1030
- }
1031
988
}
1032
989
/* }}} */
1033
990
@@ -1099,16 +1056,7 @@ static const zend_object_iterator_funcs spl_array_it_funcs = {
1099
1056
1100
1057
zend_object_iterator * spl_array_get_iterator (zend_class_entry * ce , zval * object , int by_ref ) /* {{{ */
1101
1058
{
1102
- zend_user_iterator * iterator ;
1103
- spl_array_object * array_object = Z_SPLARRAY_P (object );
1104
-
1105
- if (by_ref && (array_object -> ar_flags & SPL_ARRAY_OVERLOADED_CURRENT )) {
1106
- zend_throw_error (NULL , "An iterator cannot be used with foreach by reference" );
1107
- return NULL ;
1108
- }
1109
-
1110
- iterator = emalloc (sizeof (zend_user_iterator ));
1111
-
1059
+ zend_user_iterator * iterator = emalloc (sizeof (zend_user_iterator ));
1112
1060
zend_iterator_init (& iterator -> it );
1113
1061
1114
1062
ZVAL_OBJ_COPY (& iterator -> it .data , Z_OBJ_P (object ));
@@ -1864,7 +1812,6 @@ PHP_MINIT_FUNCTION(spl_array)
1864
1812
spl_ce_ArrayIterator = register_class_ArrayIterator (spl_ce_SeekableIterator , zend_ce_arrayaccess , zend_ce_serializable , zend_ce_countable );
1865
1813
spl_ce_ArrayIterator -> create_object = spl_array_object_new ;
1866
1814
spl_ce_ArrayIterator -> get_iterator = spl_array_get_iterator ;
1867
- spl_ce_ArrayIterator -> ce_flags |= ZEND_ACC_REUSE_GET_ITERATOR ;
1868
1815
1869
1816
memcpy (& spl_handler_ArrayIterator , & spl_handler_ArrayObject , sizeof (zend_object_handlers ));
1870
1817
@@ -1877,7 +1824,6 @@ PHP_MINIT_FUNCTION(spl_array)
1877
1824
spl_ce_RecursiveArrayIterator = register_class_RecursiveArrayIterator (spl_ce_ArrayIterator , spl_ce_RecursiveIterator );
1878
1825
spl_ce_RecursiveArrayIterator -> create_object = spl_array_object_new ;
1879
1826
spl_ce_RecursiveArrayIterator -> get_iterator = spl_array_get_iterator ;
1880
- spl_ce_RecursiveArrayIterator -> ce_flags |= ZEND_ACC_REUSE_GET_ITERATOR ;
1881
1827
1882
1828
REGISTER_SPL_CLASS_CONST_LONG (RecursiveArrayIterator , "CHILD_ARRAYS_ONLY" , SPL_ARRAY_CHILD_ARRAYS_ONLY );
1883
1829
0 commit comments