Skip to content

Commit c787f42

Browse files
committed
Combine ADDREF/DELREF
1 parent fe320e8 commit c787f42

File tree

3 files changed

+64
-69
lines changed

3 files changed

+64
-69
lines changed

Zend/zend_execute.c

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,14 +1295,12 @@ static zend_always_inline int zend_binary_op(zval *ret, zval *op1, zval *op2 OPL
12951295
return zend_binary_ops[opcode - ZEND_ADD](ret, op1, op2);
12961296
}
12971297

1298-
static zend_never_inline void zend_binary_assign_op_obj_dim(zval *object, zval *property OPLINE_DC EXECUTE_DATA_DC)
1298+
static zend_never_inline void zend_binary_assign_op_obj_dim(zend_object *obj, zval *property OPLINE_DC EXECUTE_DATA_DC)
12991299
{
13001300
zval *value;
13011301
zval *z;
13021302
zval rv, res;
1303-
zend_object *obj = Z_OBJ_P(object);
13041303

1305-
GC_ADDREF(obj);
13061304
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
13071305
if ((z = obj->handlers->read_dimension(obj, property, BP_VAR_R, &rv)) != NULL) {
13081306

@@ -1323,9 +1321,6 @@ static zend_never_inline void zend_binary_assign_op_obj_dim(zval *object, zval *
13231321
}
13241322
}
13251323
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1326-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
1327-
zend_objects_store_del(obj);
1328-
}
13291324
}
13301325

13311326
static zend_never_inline void zend_binary_assign_op_typed_ref(zend_reference *ref, zval *value OPLINE_DC EXECUTE_DATA_DC)

Zend/zend_vm_def.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,19 +1203,19 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
12031203
}
12041204

12051205
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
1206+
zend_object *obj = Z_OBJ_P(container);
1207+
1208+
GC_ADDREF(obj);
12061209
dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
12071210
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
1208-
zend_object *obj = Z_OBJ_P(container);
1209-
GC_ADDREF(obj);
12101211
dim = ZVAL_UNDEFINED_OP2();
1211-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
1212-
zend_objects_store_del(obj);
1213-
ZEND_VM_C_GOTO(assign_dim_op_ret_null);
1214-
}
12151212
} else if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
12161213
dim++;
12171214
}
1218-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
1215+
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+
}
12191219
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
12201220
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
12211221
ZVAL_UNDEFINED_OP1();

Zend/zend_vm_execute.h

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -22288,19 +22288,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_H
2228822288
}
2228922289

2229022290
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
22291+
zend_object *obj = Z_OBJ_P(container);
22292+
22293+
GC_ADDREF(obj);
2229122294
dim = RT_CONSTANT(opline, opline->op2);
2229222295
if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
22293-
zend_object *obj = Z_OBJ_P(container);
22294-
GC_ADDREF(obj);
2229522296
dim = ZVAL_UNDEFINED_OP2();
22296-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
22297-
zend_objects_store_del(obj);
22298-
goto assign_dim_op_ret_null;
22299-
}
2230022297
} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2230122298
dim++;
2230222299
}
22303-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
22300+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
22301+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
22302+
zend_objects_store_del(obj);
22303+
}
2230422304
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2230522305
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
2230622306
ZVAL_UNDEFINED_OP1();
@@ -24859,19 +24859,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_
2485924859
}
2486024860

2486124861
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
24862+
zend_object *obj = Z_OBJ_P(container);
24863+
24864+
GC_ADDREF(obj);
2486224865
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
2486324866
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
24864-
zend_object *obj = Z_OBJ_P(container);
24865-
GC_ADDREF(obj);
2486624867
dim = ZVAL_UNDEFINED_OP2();
24867-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24868-
zend_objects_store_del(obj);
24869-
goto assign_dim_op_ret_null;
24870-
}
2487124868
} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2487224869
dim++;
2487324870
}
24874-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
24871+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
24872+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
24873+
zend_objects_store_del(obj);
24874+
}
2487524875
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2487624876
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
2487724877
ZVAL_UNDEFINED_OP1();
@@ -27104,19 +27104,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_
2710427104
}
2710527105

2710627106
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
27107+
zend_object *obj = Z_OBJ_P(container);
27108+
27109+
GC_ADDREF(obj);
2710727110
dim = NULL;
2710827111
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27109-
zend_object *obj = Z_OBJ_P(container);
27110-
GC_ADDREF(obj);
2711127112
dim = ZVAL_UNDEFINED_OP2();
27112-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27113-
zend_objects_store_del(obj);
27114-
goto assign_dim_op_ret_null;
27115-
}
2711627113
} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2711727114
dim++;
2711827115
}
27119-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
27116+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
27117+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27118+
zend_objects_store_del(obj);
27119+
}
2712027120
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2712127121
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
2712227122
ZVAL_UNDEFINED_OP1();
@@ -28887,19 +28887,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HAND
2888728887
}
2888828888

2888928889
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
28890+
zend_object *obj = Z_OBJ_P(container);
28891+
28892+
GC_ADDREF(obj);
2889028893
dim = EX_VAR(opline->op2.var);
2889128894
if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
28892-
zend_object *obj = Z_OBJ_P(container);
28893-
GC_ADDREF(obj);
2889428895
dim = ZVAL_UNDEFINED_OP2();
28895-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28896-
zend_objects_store_del(obj);
28897-
goto assign_dim_op_ret_null;
28898-
}
2889928896
} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2890028897
dim++;
2890128898
}
28902-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
28899+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
28900+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
28901+
zend_objects_store_del(obj);
28902+
}
2890328903
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2890428904
if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
2890528905
ZVAL_UNDEFINED_OP1();
@@ -39539,19 +39539,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HA
3953939539
}
3954039540

3954139541
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
39542+
zend_object *obj = Z_OBJ_P(container);
39543+
39544+
GC_ADDREF(obj);
3954239545
dim = RT_CONSTANT(opline, opline->op2);
3954339546
if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
39544-
zend_object *obj = Z_OBJ_P(container);
39545-
GC_ADDREF(obj);
3954639547
dim = ZVAL_UNDEFINED_OP2();
39547-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
39548-
zend_objects_store_del(obj);
39549-
goto assign_dim_op_ret_null;
39550-
}
3955139548
} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
3955239549
dim++;
3955339550
}
39554-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
39551+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
39552+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
39553+
zend_objects_store_del(obj);
39554+
}
3955539555
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
3955639556
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
3955739557
ZVAL_UNDEFINED_OP1();
@@ -43190,19 +43190,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_H
4319043190
}
4319143191

4319243192
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
43193+
zend_object *obj = Z_OBJ_P(container);
43194+
43195+
GC_ADDREF(obj);
4319343196
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
4319443197
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43195-
zend_object *obj = Z_OBJ_P(container);
43196-
GC_ADDREF(obj);
4319743198
dim = ZVAL_UNDEFINED_OP2();
43198-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43199-
zend_objects_store_del(obj);
43200-
goto assign_dim_op_ret_null;
43201-
}
4320243199
} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4320343200
dim++;
4320443201
}
43205-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
43202+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
43203+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43204+
zend_objects_store_del(obj);
43205+
}
4320643206
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4320743207
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
4320843208
ZVAL_UNDEFINED_OP1();
@@ -46012,19 +46012,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_H
4601246012
}
4601346013

4601446014
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
46015+
zend_object *obj = Z_OBJ_P(container);
46016+
46017+
GC_ADDREF(obj);
4601546018
dim = NULL;
4601646019
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46017-
zend_object *obj = Z_OBJ_P(container);
46018-
GC_ADDREF(obj);
4601946020
dim = ZVAL_UNDEFINED_OP2();
46020-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46021-
zend_objects_store_del(obj);
46022-
goto assign_dim_op_ret_null;
46023-
}
4602446021
} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4602546022
dim++;
4602646023
}
46027-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
46024+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
46025+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46026+
zend_objects_store_del(obj);
46027+
}
4602846028
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4602946029
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
4603046030
ZVAL_UNDEFINED_OP1();
@@ -48331,19 +48331,19 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDL
4833148331
}
4833248332

4833348333
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
48334+
zend_object *obj = Z_OBJ_P(container);
48335+
48336+
GC_ADDREF(obj);
4833448337
dim = EX_VAR(opline->op2.var);
4833548338
if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
48336-
zend_object *obj = Z_OBJ_P(container);
48337-
GC_ADDREF(obj);
4833848339
dim = ZVAL_UNDEFINED_OP2();
48339-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48340-
zend_objects_store_del(obj);
48341-
goto assign_dim_op_ret_null;
48342-
}
4834348340
} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4834448341
dim++;
4834548342
}
48346-
zend_binary_assign_op_obj_dim(container, dim OPLINE_CC EXECUTE_DATA_CC);
48343+
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
48344+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
48345+
zend_objects_store_del(obj);
48346+
}
4834748347
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4834848348
if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) {
4834948349
ZVAL_UNDEFINED_OP1();

0 commit comments

Comments
 (0)