@@ -3564,32 +3564,28 @@ static void preload_move_user_classes(HashTable *src, HashTable *dst)
3564
3564
3565
3565
src -> pDestructor = NULL ;
3566
3566
zend_hash_extend (dst , dst -> nNumUsed + src -> nNumUsed , 0 );
3567
- ZEND_HASH_REVERSE_FOREACH_BUCKET (src , p ) {
3567
+ ZEND_HASH_FOREACH_BUCKET_FROM (src , p , EG ( persistent_classes_count ) ) {
3568
3568
zend_class_entry * ce = Z_PTR (p -> val );
3569
-
3570
- if (EXPECTED (ce -> type == ZEND_USER_CLASS )) {
3571
- if (ce -> info .user .filename != filename ) {
3572
- filename = ce -> info .user .filename ;
3573
- if (filename ) {
3574
- if (!(copy = zend_hash_exists (preload_scripts , filename ))) {
3575
- size_t eval_len = preload_try_strip_filename (filename );
3576
- if (eval_len ) {
3577
- copy = zend_hash_str_exists (preload_scripts , ZSTR_VAL (filename ), eval_len );
3578
- }
3569
+ ZEND_ASSERT (ce -> type == ZEND_USER_CLASS );
3570
+ if (ce -> info .user .filename != filename ) {
3571
+ filename = ce -> info .user .filename ;
3572
+ if (filename ) {
3573
+ if (!(copy = zend_hash_exists (preload_scripts , filename ))) {
3574
+ size_t eval_len = preload_try_strip_filename (filename );
3575
+ if (eval_len ) {
3576
+ copy = zend_hash_str_exists (preload_scripts , ZSTR_VAL (filename ), eval_len );
3579
3577
}
3580
- } else {
3581
- copy = 0 ;
3582
3578
}
3583
- }
3584
- if (copy ) {
3585
- _zend_hash_append (dst , p -> key , & p -> val );
3586
3579
} else {
3587
- orig_dtor ( & p -> val ) ;
3580
+ copy = 0 ;
3588
3581
}
3589
- zend_hash_del_bucket (src , p );
3582
+ }
3583
+ if (copy ) {
3584
+ _zend_hash_append (dst , p -> key , & p -> val );
3590
3585
} else {
3591
- break ;
3586
+ orig_dtor ( & p -> val ) ;
3592
3587
}
3588
+ zend_hash_del_bucket (src , p );
3593
3589
} ZEND_HASH_FOREACH_END ();
3594
3590
src -> pDestructor = orig_dtor ;
3595
3591
}
@@ -3844,11 +3840,10 @@ static void preload_link(void)
3844
3840
do {
3845
3841
changed = 0 ;
3846
3842
3847
- ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL (EG (class_table ), key , zv ) {
3843
+ ZEND_HASH_FOREACH_STR_KEY_VAL_FROM (EG (class_table ), key , zv , EG ( persistent_classes_count ) ) {
3848
3844
ce = Z_PTR_P (zv );
3849
- if (ce -> type == ZEND_INTERNAL_CLASS ) {
3850
- break ;
3851
- }
3845
+ ZEND_ASSERT (ce -> type != ZEND_INTERNAL_CLASS );
3846
+
3852
3847
if ((ce -> ce_flags & (ZEND_ACC_TOP_LEVEL |ZEND_ACC_ANON_CLASS ))
3853
3848
&& !(ce -> ce_flags & ZEND_ACC_LINKED )) {
3854
3849
zend_string * lcname = zend_string_tolower (ce -> name );
@@ -3967,7 +3962,8 @@ static void preload_link(void)
3967
3962
} while (changed );
3968
3963
3969
3964
/* Warn for classes that could not be linked. */
3970
- ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL (EG (class_table ), key , zv ) {
3965
+ ZEND_HASH_FOREACH_STR_KEY_VAL_FROM (
3966
+ EG (class_table ), key , zv , EG (persistent_classes_count )) {
3971
3967
ce = Z_PTR_P (zv );
3972
3968
if (ce -> type == ZEND_INTERNAL_CLASS ) {
3973
3969
break ;
0 commit comments