@@ -1166,28 +1166,17 @@ ZEND_VM_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV)
1166
1166
{
1167
1167
USE_OPLINE
1168
1168
zend_free_op free_op1 , free_op2 ;
1169
- zval * * container ;
1169
+ zval * container ;
1170
1170
1171
1171
SAVE_OPLINE ();
1172
1172
1173
- if ((opline -> extended_value & ZEND_FETCH_ADD_LOCK ) &&
1174
- OP1_TYPE != IS_CV &&
1175
- EX_T (opline -> op1 .var ).var .ptr_ptr ) {
1176
- PZVAL_LOCK (* EX_T (opline -> op1 .var ).var .ptr_ptr );
1177
- }
1178
-
1179
- if (OP1_TYPE == IS_TMP_VAR || OP1_TYPE == IS_CONST ) {
1180
- zval * container = GET_OP1_ZVAL_PTR (BP_VAR_R );
1181
- zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), & container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1182
- FREE_OP2 ();
1183
- FREE_OP1 ();
1184
- } else {
1185
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_R );
1186
- zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1187
- FREE_OP2 ();
1188
- FREE_OP1_VAR_PTR ();
1173
+ if (OP1_TYPE == IS_VAR && (opline -> extended_value & ZEND_FETCH_ADD_LOCK )) {
1174
+ PZVAL_LOCK (EX_T (opline -> op1 .var ).var .ptr );
1189
1175
}
1190
-
1176
+ container = GET_OP1_ZVAL_PTR (BP_VAR_R );
1177
+ zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1178
+ FREE_OP2 ();
1179
+ FREE_OP1 ();
1191
1180
CHECK_EXCEPTION ();
1192
1181
ZEND_VM_NEXT_OPCODE ();
1193
1182
}
@@ -1252,13 +1241,13 @@ ZEND_VM_HANDLER(90, ZEND_FETCH_DIM_IS, VAR|CV, CONST|TMP|VAR|CV)
1252
1241
{
1253
1242
USE_OPLINE
1254
1243
zend_free_op free_op1 , free_op2 ;
1255
- zval * * container ;
1244
+ zval * container ;
1256
1245
1257
1246
SAVE_OPLINE ();
1258
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_IS );
1247
+ container = GET_OP1_ZVAL_PTR (BP_VAR_IS );
1259
1248
zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_IS TSRMLS_CC );
1260
1249
FREE_OP2 ();
1261
- FREE_OP1_VAR_PTR ();
1250
+ FREE_OP1 ();
1262
1251
CHECK_EXCEPTION ();
1263
1252
ZEND_VM_NEXT_OPCODE ();
1264
1253
}
@@ -1267,28 +1256,32 @@ ZEND_VM_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, VAR|CV, CONST|TMP|VAR|UNUSED|CV)
1267
1256
{
1268
1257
USE_OPLINE
1269
1258
zend_free_op free_op1 , free_op2 ;
1270
- zval * * container ;
1271
1259
1272
1260
SAVE_OPLINE ();
1273
1261
1274
1262
if (ARG_SHOULD_BE_SENT_BY_REF (EX (call )-> fbc , (opline -> extended_value & ZEND_FETCH_ARG_MASK ))) {
1275
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
1263
+ zval * * container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_W );
1264
+
1276
1265
if (OP1_TYPE == IS_VAR && UNEXPECTED (container == NULL )) {
1277
1266
zend_error_noreturn (E_ERROR , "Cannot use string offset as an array" );
1278
1267
}
1279
1268
zend_fetch_dimension_address (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_W TSRMLS_CC );
1280
1269
if (OP1_TYPE == IS_VAR && OP1_FREE && READY_TO_DESTROY (free_op1 .var )) {
1281
1270
EXTRACT_ZVAL_PTR (& EX_T (opline -> result .var ));
1282
1271
}
1272
+ FREE_OP2 ();
1273
+ FREE_OP1_VAR_PTR ();
1283
1274
} else {
1275
+ zval * container ;
1276
+
1284
1277
if (OP2_TYPE == IS_UNUSED ) {
1285
1278
zend_error_noreturn (E_ERROR , "Cannot use [] for reading" );
1286
1279
}
1287
- container = GET_OP1_ZVAL_PTR_PTR (BP_VAR_R );
1280
+ container = GET_OP1_ZVAL_PTR (BP_VAR_R );
1288
1281
zend_fetch_dimension_address_read (& EX_T (opline -> result .var ), container , GET_OP2_ZVAL_PTR (BP_VAR_R ), OP2_TYPE , BP_VAR_R TSRMLS_CC );
1282
+ FREE_OP2 ();
1283
+ FREE_OP1 ();
1289
1284
}
1290
- FREE_OP2 ();
1291
- FREE_OP1_VAR_PTR ();
1292
1285
CHECK_EXCEPTION ();
1293
1286
ZEND_VM_NEXT_OPCODE ();
1294
1287
}
0 commit comments