@@ -1150,26 +1150,28 @@ ZEND_VM_HANDLER(27, ZEND_ASSIGN_DIM_OP, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, OP)
1150
1150
USE_OPLINE
1151
1151
zval * var_ptr ;
1152
1152
zval * value , * container , * dim ;
1153
+ HashTable * ht ;
1153
1154
1154
1155
SAVE_OPLINE ();
1155
1156
container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF (BP_VAR_RW );
1156
1157
1157
1158
if (EXPECTED (Z_TYPE_P (container ) == IS_ARRAY )) {
1158
1159
ZEND_VM_C_LABEL (assign_dim_op_array ):
1159
1160
SEPARATE_ARRAY (container );
1161
+ ht = Z_ARRVAL_P (container );
1160
1162
ZEND_VM_C_LABEL (assign_dim_op_new_array ):
1161
1163
dim = GET_OP2_ZVAL_PTR_UNDEF (BP_VAR_R );
1162
1164
if (OP2_TYPE == IS_UNUSED ) {
1163
- var_ptr = zend_hash_next_index_insert (Z_ARRVAL_P ( container ) , & EG (uninitialized_zval ));
1165
+ var_ptr = zend_hash_next_index_insert (ht , & EG (uninitialized_zval ));
1164
1166
if (UNEXPECTED (!var_ptr )) {
1165
1167
zend_cannot_add_element ();
1166
1168
ZEND_VM_C_GOTO (assign_dim_op_ret_null );
1167
1169
}
1168
1170
} else {
1169
1171
if (OP2_TYPE == IS_CONST ) {
1170
- var_ptr = zend_fetch_dimension_address_inner_RW_CONST (Z_ARRVAL_P ( container ) , dim EXECUTE_DATA_CC );
1172
+ var_ptr = zend_fetch_dimension_address_inner_RW_CONST (ht , dim EXECUTE_DATA_CC );
1171
1173
} else {
1172
- var_ptr = zend_fetch_dimension_address_inner_RW (Z_ARRVAL_P ( container ) , dim EXECUTE_DATA_CC );
1174
+ var_ptr = zend_fetch_dimension_address_inner_RW (ht , dim EXECUTE_DATA_CC );
1173
1175
}
1174
1176
if (UNEXPECTED (!var_ptr )) {
1175
1177
ZEND_VM_C_GOTO (assign_dim_op_ret_null );
@@ -1205,19 +1207,12 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
1205
1207
if (EXPECTED (Z_TYPE_P (container ) == IS_OBJECT )) {
1206
1208
zend_object * obj = Z_OBJ_P (container );
1207
1209
1208
- GC_ADDREF (obj );
1209
1210
dim = GET_OP2_ZVAL_PTR_UNDEF (BP_VAR_R );
1210
- if (OP2_TYPE == IS_CV && UNEXPECTED (Z_ISUNDEF_P (dim ))) {
1211
- dim = ZVAL_UNDEFINED_OP2 ();
1212
- } else if (OP2_TYPE == IS_CONST && Z_EXTRA_P (dim ) == ZEND_EXTRA_VALUE ) {
1211
+ if (OP2_TYPE == IS_CONST && Z_EXTRA_P (dim ) == ZEND_EXTRA_VALUE ) {
1213
1212
dim ++ ;
1214
1213
}
1215
1214
zend_binary_assign_op_obj_dim (obj , dim OPLINE_CC EXECUTE_DATA_CC );
1216
- if (UNEXPECTED (GC_DELREF (obj ) == 0 )) {
1217
- zend_objects_store_del (obj );
1218
- }
1219
1215
} else if (EXPECTED (Z_TYPE_P (container ) <= IS_FALSE )) {
1220
- HashTable * ht ;
1221
1216
zend_uchar old_type ;
1222
1217
1223
1218
if (OP1_TYPE == IS_CV && UNEXPECTED (Z_TYPE_INFO_P (container ) == IS_UNDEF )) {
0 commit comments