Skip to content

Commit 1959bbf

Browse files
committed
Merge branch 'PHP-8.1'
* PHP-8.1: Combine ADDREF/DELREF
2 parents fe4beb3 + 1e56b64 commit 1959bbf

File tree

3 files changed

+45
-55
lines changed

3 files changed

+45
-55
lines changed

Zend/zend_execute.c

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,7 +1417,6 @@ static zend_never_inline void zend_binary_assign_op_obj_dim(zend_object *obj, zv
14171417
zval *z;
14181418
zval rv, res;
14191419

1420-
GC_ADDREF(obj);
14211420
value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1);
14221421
if ((z = obj->handlers->read_dimension(obj, property, BP_VAR_R, &rv)) != NULL) {
14231422

@@ -1438,9 +1437,6 @@ static zend_never_inline void zend_binary_assign_op_obj_dim(zend_object *obj, zv
14381437
}
14391438
}
14401439
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
1441-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
1442-
zend_objects_store_del(obj);
1443-
}
14441440
}
14451441

14461442
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: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,27 +1145,6 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
11451145
ZEND_VM_NEXT_OPCODE_EX(1, 2);
11461146
}
11471147

1148-
ZEND_VM_COLD_HELPER(zend_assign_dim_op_obj_undef_helper, ANY, ANY, zend_object *obj)
1149-
{
1150-
USE_OPLINE
1151-
zval *dim;
1152-
1153-
GC_ADDREF(obj);
1154-
dim = ZVAL_UNDEFINED_OP2();
1155-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
1156-
zend_objects_store_del(obj);
1157-
FREE_OP_DATA();
1158-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
1159-
ZVAL_NULL(EX_VAR(opline->result.var));
1160-
}
1161-
} else {
1162-
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
1163-
}
1164-
FREE_OP2();
1165-
FREE_OP1();
1166-
ZEND_VM_NEXT_OPCODE_EX(1, 2);
1167-
}
1168-
11691148
ZEND_VM_HANDLER(27, ZEND_ASSIGN_DIM_OP, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, OP)
11701149
{
11711150
USE_OPLINE
@@ -1226,13 +1205,17 @@ ZEND_VM_C_LABEL(assign_dim_op_new_array):
12261205
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
12271206
zend_object *obj = Z_OBJ_P(container);
12281207

1208+
GC_ADDREF(obj);
12291209
dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R);
12301210
if (OP2_TYPE == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
1231-
ZEND_VM_DISPATCH_TO_HELPER(zend_assign_dim_op_obj_undef_helper, obj, obj);
1211+
dim = ZVAL_UNDEFINED_OP2();
12321212
} else if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
12331213
dim++;
12341214
}
12351215
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+
}
12361219
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
12371220
HashTable *ht;
12381221
zend_uchar old_type;

Zend/zend_vm_execute.h

Lines changed: 40 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -799,27 +799,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HAN
799799
ZEND_VM_NEXT_OPCODE_EX(1, 2);
800800
}
801801

802-
static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_assign_dim_op_obj_undef_helper_SPEC(zend_object *obj ZEND_OPCODE_HANDLER_ARGS_DC)
803-
{
804-
USE_OPLINE
805-
zval *dim;
806-
807-
GC_ADDREF(obj);
808-
dim = ZVAL_UNDEFINED_OP2();
809-
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
810-
zend_objects_store_del(obj);
811-
FREE_OP((opline+1)->op1_type, (opline+1)->op1.var);
812-
if (UNEXPECTED(RETURN_VALUE_USED(opline))) {
813-
ZVAL_NULL(EX_VAR(opline->result.var));
814-
}
815-
} else {
816-
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
817-
}
818-
FREE_OP(opline->op2_type, opline->op2.var);
819-
FREE_OP(opline->op1_type, opline->op1.var);
820-
ZEND_VM_NEXT_OPCODE_EX(1, 2);
821-
}
822-
823802
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_STATIC_PROP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
824803
{
825804
USE_OPLINE
@@ -22535,13 +22514,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CONST_H
2253522514
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
2253622515
zend_object *obj = Z_OBJ_P(container);
2253722516

22517+
GC_ADDREF(obj);
2253822518
dim = RT_CONSTANT(opline, opline->op2);
2253922519
if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
22540-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
22520+
dim = ZVAL_UNDEFINED_OP2();
2254122521
} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2254222522
dim++;
2254322523
}
2254422524
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
22525+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
22526+
zend_objects_store_del(obj);
22527+
}
2254522528
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2254622529
HashTable *ht;
2254722530
zend_uchar old_type;
@@ -25186,13 +25169,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_TMPVAR_
2518625169
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
2518725170
zend_object *obj = Z_OBJ_P(container);
2518825171

25172+
GC_ADDREF(obj);
2518925173
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
2519025174
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
25191-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
25175+
dim = ZVAL_UNDEFINED_OP2();
2519225176
} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2519325177
dim++;
2519425178
}
2519525179
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
25180+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
25181+
zend_objects_store_del(obj);
25182+
}
2519625183
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2519725184
HashTable *ht;
2519825185
zend_uchar old_type;
@@ -27475,13 +27462,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_UNUSED_
2747527462
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
2747627463
zend_object *obj = Z_OBJ_P(container);
2747727464

27465+
GC_ADDREF(obj);
2747827466
dim = NULL;
2747927467
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
27480-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
27468+
dim = ZVAL_UNDEFINED_OP2();
2748127469
} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2748227470
dim++;
2748327471
}
2748427472
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
27473+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
27474+
zend_objects_store_del(obj);
27475+
}
2748527476
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2748627477
HashTable *ht;
2748727478
zend_uchar old_type;
@@ -29312,13 +29303,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_VAR_CV_HAND
2931229303
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
2931329304
zend_object *obj = Z_OBJ_P(container);
2931429305

29306+
GC_ADDREF(obj);
2931529307
dim = EX_VAR(opline->op2.var);
2931629308
if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
29317-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
29309+
dim = ZVAL_UNDEFINED_OP2();
2931829310
} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
2931929311
dim++;
2932029312
}
2932129313
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
29314+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
29315+
zend_objects_store_del(obj);
29316+
}
2932229317
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
2932329318
HashTable *ht;
2932429319
zend_uchar old_type;
@@ -40077,13 +40072,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CONST_HA
4007740072
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
4007840073
zend_object *obj = Z_OBJ_P(container);
4007940074

40075+
GC_ADDREF(obj);
4008040076
dim = RT_CONSTANT(opline, opline->op2);
4008140077
if (IS_CONST == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
40082-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
40078+
dim = ZVAL_UNDEFINED_OP2();
4008340079
} else if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4008440080
dim++;
4008540081
}
4008640082
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
40083+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
40084+
zend_objects_store_del(obj);
40085+
}
4008740086
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4008840087
HashTable *ht;
4008940088
zend_uchar old_type;
@@ -43816,13 +43815,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_TMPVAR_H
4381643815
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
4381743816
zend_object *obj = Z_OBJ_P(container);
4381843817

43818+
GC_ADDREF(obj);
4381943819
dim = _get_zval_ptr_var(opline->op2.var EXECUTE_DATA_CC);
4382043820
if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
43821-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
43821+
dim = ZVAL_UNDEFINED_OP2();
4382243822
} else if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4382343823
dim++;
4382443824
}
4382543825
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
43826+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
43827+
zend_objects_store_del(obj);
43828+
}
4382643829
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4382743830
HashTable *ht;
4382843831
zend_uchar old_type;
@@ -46690,13 +46693,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_UNUSED_H
4669046693
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
4669146694
zend_object *obj = Z_OBJ_P(container);
4669246695

46696+
GC_ADDREF(obj);
4669346697
dim = NULL;
4669446698
if (IS_UNUSED == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
46695-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
46699+
dim = ZVAL_UNDEFINED_OP2();
4669646700
} else if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4669746701
dim++;
4669846702
}
4669946703
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
46704+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
46705+
zend_objects_store_del(obj);
46706+
}
4670046707
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4670146708
HashTable *ht;
4670246709
zend_uchar old_type;
@@ -49059,13 +49066,17 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_OP_SPEC_CV_CV_HANDL
4905949066
if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) {
4906049067
zend_object *obj = Z_OBJ_P(container);
4906149068

49069+
GC_ADDREF(obj);
4906249070
dim = EX_VAR(opline->op2.var);
4906349071
if (IS_CV == IS_CV && UNEXPECTED(Z_ISUNDEF_P(dim))) {
49064-
ZEND_VM_TAIL_CALL(zend_assign_dim_op_obj_undef_helper_SPEC(obj ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC));
49072+
dim = ZVAL_UNDEFINED_OP2();
4906549073
} else if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) {
4906649074
dim++;
4906749075
}
4906849076
zend_binary_assign_op_obj_dim(obj, dim OPLINE_CC EXECUTE_DATA_CC);
49077+
if (UNEXPECTED(GC_DELREF(obj) == 0)) {
49078+
zend_objects_store_del(obj);
49079+
}
4906949080
} else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) {
4907049081
HashTable *ht;
4907149082
zend_uchar old_type;

0 commit comments

Comments
 (0)