@@ -3231,20 +3231,30 @@ static zend_always_inline int _zend_update_type_info(
3231
3231
key_type |= MAY_BE_ARRAY_PACKED ;
3232
3232
}
3233
3233
if (t1 & MAY_BE_ARRAY ) {
3234
- key_type |= ( MAY_BE_HASH_ONLY (t1 ) || ( t1 & ( MAY_BE_UNDEF | MAY_BE_NULL | MAY_BE_FALSE )) ) ?
3234
+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
3235
3235
MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3236
3236
}
3237
3237
} else {
3238
3238
if (t2 & (MAY_BE_LONG |MAY_BE_FALSE |MAY_BE_TRUE |MAY_BE_RESOURCE |MAY_BE_DOUBLE )) {
3239
- key_type |= (MAY_BE_HASH_ONLY (t1 ) || (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE ))) ?
3240
- MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3239
+ if (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE )) {
3240
+ key_type |= MAY_BE_ARRAY_PACKED ;
3241
+ }
3242
+ if (t1 & MAY_BE_ARRAY ) {
3243
+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
3244
+ MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3245
+ }
3241
3246
}
3242
3247
if (t2 & MAY_BE_STRING ) {
3243
3248
key_type |= MAY_BE_ARRAY_KEY_STRING ;
3244
3249
if (opline -> op2_type != IS_CONST ) {
3245
3250
// FIXME: numeric string
3246
- key_type |= (MAY_BE_HASH_ONLY (t1 ) || (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE ))) ?
3247
- MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3251
+ if (t1 & (MAY_BE_UNDEF |MAY_BE_NULL |MAY_BE_FALSE )) {
3252
+ key_type |= MAY_BE_ARRAY_PACKED ;
3253
+ }
3254
+ if (t1 & MAY_BE_ARRAY ) {
3255
+ key_type |= MAY_BE_HASH_ONLY (t1 ) ?
3256
+ MAY_BE_ARRAY_NUMERIC_HASH : MAY_BE_ARRAY_KEY_LONG ;
3257
+ }
3248
3258
}
3249
3259
}
3250
3260
if (t2 & (MAY_BE_UNDEF | MAY_BE_NULL )) {
0 commit comments