@@ -3015,6 +3015,18 @@ static inheritance_status zend_can_early_bind(zend_class_entry *ce, zend_class_e
3015
3015
}
3016
3016
/* }}} */
3017
3017
3018
+ static zend_always_inline bool register_early_bound_ce (zval * delayed_early_binding , zend_string * lcname , zend_class_entry * ce ) {
3019
+ if (delayed_early_binding ) {
3020
+ if (UNEXPECTED (zend_hash_set_bucket_key (EG (class_table ), (Bucket * )delayed_early_binding , lcname ) == NULL )) {
3021
+ zend_error_noreturn (E_COMPILE_ERROR , "Cannot declare %s %s, because the name is already in use" , zend_get_object_type (ce ), ZSTR_VAL (ce -> name ));
3022
+ return false;
3023
+ }
3024
+ Z_CE_P (delayed_early_binding ) = ce ;
3025
+ return true;
3026
+ }
3027
+ return zend_hash_add_ptr (CG (class_table ), lcname , ce ) != NULL ;
3028
+ }
3029
+
3018
3030
zend_class_entry * zend_try_early_bind (zend_class_entry * ce , zend_class_entry * parent_ce , zend_string * lcname , zval * delayed_early_binding ) /* {{{ */
3019
3031
{
3020
3032
inheritance_status status ;
@@ -3027,16 +3039,8 @@ zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *pa
3027
3039
if (zend_inheritance_cache_get && zend_inheritance_cache_add ) {
3028
3040
zend_class_entry * ret = zend_inheritance_cache_get (ce , parent_ce , NULL );
3029
3041
if (ret ) {
3030
- if (delayed_early_binding ) {
3031
- if (UNEXPECTED (zend_hash_set_bucket_key (EG (class_table ), (Bucket * )delayed_early_binding , lcname ) == NULL )) {
3032
- zend_error_noreturn (E_COMPILE_ERROR , "Cannot declare %s %s, because the name is already in use" , zend_get_object_type (ce ), ZSTR_VAL (ce -> name ));
3033
- return NULL ;
3034
- }
3035
- Z_CE_P (delayed_early_binding ) = ret ;
3036
- } else {
3037
- if (UNEXPECTED (zend_hash_add_ptr (CG (class_table ), lcname , ret ) == NULL )) {
3038
- return NULL ;
3039
- }
3042
+ if (UNEXPECTED (!register_early_bound_ce (delayed_early_binding , lcname , ret ))) {
3043
+ return NULL ;
3040
3044
}
3041
3045
if (ZSTR_HAS_CE_CACHE (ret -> name )) {
3042
3046
ZSTR_SET_CE_CACHE (ret -> name , ret );
@@ -3063,16 +3067,8 @@ zend_class_entry *zend_try_early_bind(zend_class_entry *ce, zend_class_entry *pa
3063
3067
ce -> ce_flags &= ~ZEND_ACC_FILE_CACHED ;
3064
3068
}
3065
3069
3066
- if (delayed_early_binding ) {
3067
- if (UNEXPECTED (zend_hash_set_bucket_key (EG (class_table ), (Bucket * )delayed_early_binding , lcname ) == NULL )) {
3068
- zend_error_noreturn (E_COMPILE_ERROR , "Cannot declare %s %s, because the name is already in use" , zend_get_object_type (ce ), ZSTR_VAL (ce -> name ));
3069
- return NULL ;
3070
- }
3071
- Z_CE_P (delayed_early_binding ) = ce ;
3072
- } else {
3073
- if (UNEXPECTED (zend_hash_add_ptr (CG (class_table ), lcname , ce ) == NULL )) {
3074
- return NULL ;
3075
- }
3070
+ if (UNEXPECTED (!register_early_bound_ce (delayed_early_binding , lcname , ce ))) {
3071
+ return NULL ;
3076
3072
}
3077
3073
3078
3074
orig_linking_class = CG (current_linking_class );
0 commit comments