@@ -102,16 +102,14 @@ static zend_always_inline void zend_pzval_unlock_free_func(zval *z TSRMLS_DC)
102
102
#define PZVAL_LOCK (z ) Z_ADDREF_P((z))
103
103
#define SELECTIVE_PZVAL_LOCK (pzv , opline ) if (RETURN_VALUE_USED(opline)) { PZVAL_LOCK(pzv); }
104
104
105
- #define EXTRACT_ZVAL_PTR (t ) do { \
106
- temp_variable *__t = (t); \
107
- if (__t->var.ptr_ptr) { \
108
- __t->var.ptr = *__t->var.ptr_ptr; \
109
- __t->var.ptr_ptr = &__t->var.ptr; \
110
- if (!PZVAL_IS_REF(__t->var.ptr) && \
111
- Z_REFCOUNT_P(__t->var.ptr) > 2) { \
112
- SEPARATE_ZVAL(__t->var.ptr_ptr); \
113
- } \
114
- } \
105
+ #define EXTRACT_ZVAL_PTR (t ) do { \
106
+ temp_variable *__t = (t); \
107
+ __t->var.ptr = *__t->var.ptr_ptr; \
108
+ __t->var.ptr_ptr = &__t->var.ptr; \
109
+ if (!PZVAL_IS_REF(__t->var.ptr) && \
110
+ Z_REFCOUNT_P(__t->var.ptr) > 2) { \
111
+ SEPARATE_ZVAL(__t->var.ptr_ptr); \
112
+ } \
115
113
} while (0)
116
114
117
115
#define AI_SET_PTR (t , val ) do { \
@@ -1215,12 +1213,12 @@ static void zend_fetch_dimension_address(temp_variable *result, zval **container
1215
1213
zend_error (E_NOTICE , "Indirect modification of overloaded element of %s has no effect" , ce -> name );
1216
1214
}
1217
1215
}
1218
- retval = & overloaded_result ;
1216
+ AI_SET_PTR (result , overloaded_result );
1217
+ PZVAL_LOCK (overloaded_result );
1219
1218
} else {
1220
- retval = & EG (error_zval_ptr );
1219
+ result -> var .ptr_ptr = & EG (error_zval_ptr );
1220
+ PZVAL_LOCK (EG (error_zval_ptr ));
1221
1221
}
1222
- AI_SET_PTR (result , * retval );
1223
- PZVAL_LOCK (* retval );
1224
1222
if (dim_type == IS_TMP_VAR ) {
1225
1223
zval_ptr_dtor (& dim );
1226
1224
}
@@ -1237,8 +1235,8 @@ static void zend_fetch_dimension_address(temp_variable *result, zval **container
1237
1235
default :
1238
1236
if (type == BP_VAR_UNSET ) {
1239
1237
zend_error (E_WARNING , "Cannot unset offset in a non-array variable" );
1240
- AI_SET_PTR ( result , & EG (uninitialized_zval ) );
1241
- PZVAL_LOCK (& EG (uninitialized_zval ));
1238
+ result -> var . ptr_ptr = & EG (uninitialized_zval_ptr );
1239
+ PZVAL_LOCK (EG (uninitialized_zval_ptr ));
1242
1240
} else {
1243
1241
zend_error (E_WARNING , "Cannot use a scalar value as an array" );
1244
1242
result -> var .ptr_ptr = & EG (error_zval_ptr );
@@ -1256,12 +1254,12 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval *conta
1256
1254
1257
1255
case IS_ARRAY :
1258
1256
retval = zend_fetch_dimension_address_inner (Z_ARRVAL_P (container ), dim , dim_type , type TSRMLS_CC );
1259
- AI_SET_PTR ( result , * retval ) ;
1257
+ result -> var . ptr = * retval ;
1260
1258
PZVAL_LOCK (* retval );
1261
1259
return ;
1262
1260
1263
1261
case IS_NULL :
1264
- AI_SET_PTR ( result , & EG (uninitialized_zval ) );
1262
+ result -> var . ptr = & EG (uninitialized_zval );
1265
1263
PZVAL_LOCK (& EG (uninitialized_zval ));
1266
1264
return ;
1267
1265
@@ -1314,7 +1312,7 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval *conta
1314
1312
Z_STRVAL_P (ptr )[1 ] = 0 ;
1315
1313
Z_STRLEN_P (ptr ) = 1 ;
1316
1314
}
1317
- AI_SET_PTR ( result , ptr ) ;
1315
+ result -> var . ptr = ptr ;
1318
1316
return ;
1319
1317
}
1320
1318
break ;
@@ -1332,12 +1330,14 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval *conta
1332
1330
}
1333
1331
overloaded_result = Z_OBJ_HT_P (container )-> read_dimension (container , dim , type TSRMLS_CC );
1334
1332
1335
- if (overloaded_result ) {
1336
- AI_SET_PTR (result , overloaded_result );
1337
- PZVAL_LOCK (overloaded_result );
1338
- } else if (result ) {
1339
- AI_SET_PTR (result , & EG (uninitialized_zval ));
1340
- PZVAL_LOCK (& EG (uninitialized_zval ));
1333
+ if (result ) {
1334
+ if (overloaded_result ) {
1335
+ result -> var .ptr = overloaded_result ;
1336
+ PZVAL_LOCK (overloaded_result );
1337
+ } else {
1338
+ result -> var .ptr = & EG (uninitialized_zval );
1339
+ PZVAL_LOCK (& EG (uninitialized_zval ));
1340
+ }
1341
1341
}
1342
1342
if (dim_type == IS_TMP_VAR ) {
1343
1343
zval_ptr_dtor (& dim );
@@ -1346,7 +1346,7 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval *conta
1346
1346
return ;
1347
1347
1348
1348
default :
1349
- AI_SET_PTR ( result , & EG (uninitialized_zval ) );
1349
+ result -> var . ptr = & EG (uninitialized_zval );
1350
1350
PZVAL_LOCK (& EG (uninitialized_zval ));
1351
1351
return ;
1352
1352
}
0 commit comments