Skip to content

Commit 5d0ef4c

Browse files
committed
Make opcodes to return de-refereced values of typed references (in the same was as for non-typed)
1 parent 1cffc7b commit 5d0ef4c

File tree

3 files changed

+21
-21
lines changed

3 files changed

+21
-21
lines changed

Zend/zend_execute.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1740,11 +1740,11 @@ static void zend_pre_incdec_property_zval(zval *prop, zend_property_info *prop_i
17401740
do {
17411741
if (Z_ISREF_P(prop)) {
17421742
zend_reference *ref = Z_REF_P(prop);
1743+
prop = Z_REFVAL_P(prop);
17431744
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
17441745
zend_incdec_typed_ref(ref, NULL OPLINE_CC EXECUTE_DATA_CC);
17451746
break;
17461747
}
1747-
prop = Z_REFVAL_P(prop);
17481748
}
17491749

17501750
if (UNEXPECTED(prop_info)) {
@@ -1777,11 +1777,11 @@ static void zend_post_incdec_property_zval(zval *prop, zend_property_info *prop_
17771777
} else {
17781778
if (Z_ISREF_P(prop)) {
17791779
zend_reference *ref = Z_REF_P(prop);
1780+
prop = Z_REFVAL_P(prop);
17801781
if (ZEND_REF_HAS_TYPE_SOURCES(ref)) {
17811782
zend_incdec_typed_ref(ref, EX_VAR(opline->result.var) OPLINE_CC EXECUTE_DATA_CC);
17821783
return;
17831784
}
1784-
prop = Z_REFVAL_P(prop);
17851785
}
17861786

17871787
if (UNEXPECTED(prop_info)) {

Zend/zend_vm_def.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1113,11 +1113,11 @@ ZEND_VM_C_LABEL(assign_op_object):
11131113
do {
11141114
if (UNEXPECTED(Z_ISREF_P(zptr))) {
11151115
ref = Z_REF_P(zptr);
1116+
zptr = Z_REFVAL_P(zptr);
11161117
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
11171118
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
11181119
break;
11191120
}
1120-
zptr = Z_REFVAL_P(zptr);
11211121
}
11221122

11231123
if (OP2_TYPE == IS_CONST) {
@@ -1174,11 +1174,11 @@ ZEND_VM_HANDLER(29, ZEND_ASSIGN_STATIC_PROP_OP, ANY, ANY, OP)
11741174
do {
11751175
if (UNEXPECTED(Z_ISREF_P(prop))) {
11761176
ref = Z_REF_P(prop);
1177+
prop = Z_REFVAL_P(prop);
11771178
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
11781179
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
11791180
break;
11801181
}
1181-
prop = Z_REFVAL_P(prop);
11821182
}
11831183

11841184
if (UNEXPECTED(prop_info->type)) {
@@ -1302,11 +1302,11 @@ ZEND_VM_HANDLER(26, ZEND_ASSIGN_OP, VAR|CV, CONST|TMPVAR|CV, OP)
13021302
do {
13031303
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
13041304
zend_reference *ref = Z_REF_P(var_ptr);
1305+
var_ptr = Z_REFVAL_P(var_ptr);
13051306
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
13061307
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
13071308
break;
13081309
}
1309-
var_ptr = Z_REFVAL_P(var_ptr);
13101310
}
13111311
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
13121312
} while (0);

Zend/zend_vm_execute.h

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -816,11 +816,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_STATIC_PROP_OP_SPEC_HAN
816816
do {
817817
if (UNEXPECTED(Z_ISREF_P(prop))) {
818818
ref = Z_REF_P(prop);
819+
prop = Z_REFVAL_P(prop);
819820
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
820821
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
821822
break;
822823
}
823-
prop = Z_REFVAL_P(prop);
824824
}
825825

826826
if (UNEXPECTED(prop_info->type)) {
@@ -22087,11 +22087,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CONST_H
2208722087
do {
2208822088
if (UNEXPECTED(Z_ISREF_P(zptr))) {
2208922089
ref = Z_REF_P(zptr);
22090+
zptr = Z_REFVAL_P(zptr);
2209022091
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2209122092
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2209222093
break;
2209322094
}
22094-
zptr = Z_REFVAL_P(zptr);
2209522095
}
2209622096

2209722097
if (IS_CONST == IS_CONST) {
@@ -22227,11 +22227,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CONST_HANDL
2222722227
do {
2222822228
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
2222922229
zend_reference *ref = Z_REF_P(var_ptr);
22230+
var_ptr = Z_REFVAL_P(var_ptr);
2223022231
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2223122232
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2223222233
break;
2223322234
}
22234-
var_ptr = Z_REFVAL_P(var_ptr);
2223522235
}
2223622236
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
2223722237
} while (0);
@@ -24384,11 +24384,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_TMPVAR_
2438424384
do {
2438524385
if (UNEXPECTED(Z_ISREF_P(zptr))) {
2438624386
ref = Z_REF_P(zptr);
24387+
zptr = Z_REFVAL_P(zptr);
2438724388
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2438824389
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2438924390
break;
2439024391
}
24391-
zptr = Z_REFVAL_P(zptr);
2439224392
}
2439324393

2439424394
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -24525,11 +24525,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_TMPVAR_HAND
2452524525
do {
2452624526
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
2452724527
zend_reference *ref = Z_REF_P(var_ptr);
24528+
var_ptr = Z_REFVAL_P(var_ptr);
2452824529
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2452924530
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2453024531
break;
2453124532
}
24532-
var_ptr = Z_REFVAL_P(var_ptr);
2453324533
}
2453424534
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
2453524535
} while (0);
@@ -28078,11 +28078,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_VAR_CV_HAND
2807828078
do {
2807928079
if (UNEXPECTED(Z_ISREF_P(zptr))) {
2808028080
ref = Z_REF_P(zptr);
28081+
zptr = Z_REFVAL_P(zptr);
2808128082
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2808228083
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2808328084
break;
2808428085
}
28085-
zptr = Z_REFVAL_P(zptr);
2808628086
}
2808728087

2808828088
if (IS_CV == IS_CONST) {
@@ -28218,11 +28218,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_VAR_CV_HANDLER(
2821828218
do {
2821928219
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
2822028220
zend_reference *ref = Z_REF_P(var_ptr);
28221+
var_ptr = Z_REFVAL_P(var_ptr);
2822128222
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
2822228223
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
2822328224
break;
2822428225
}
28225-
var_ptr = Z_REFVAL_P(var_ptr);
2822628226
}
2822728227
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
2822828228
} while (0);
@@ -30556,11 +30556,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CONS
3055630556
do {
3055730557
if (UNEXPECTED(Z_ISREF_P(zptr))) {
3055830558
ref = Z_REF_P(zptr);
30559+
zptr = Z_REFVAL_P(zptr);
3055930560
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
3056030561
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
3056130562
break;
3056230563
}
30563-
zptr = Z_REFVAL_P(zptr);
3056430564
}
3056530565

3056630566
if (IS_CONST == IS_CONST) {
@@ -32395,11 +32395,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_TMPV
3239532395
do {
3239632396
if (UNEXPECTED(Z_ISREF_P(zptr))) {
3239732397
ref = Z_REF_P(zptr);
32398+
zptr = Z_REFVAL_P(zptr);
3239832399
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
3239932400
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
3240032401
break;
3240132402
}
32402-
zptr = Z_REFVAL_P(zptr);
3240332403
}
3240432404

3240532405
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -34919,11 +34919,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_UNUSED_CV_H
3491934919
do {
3492034920
if (UNEXPECTED(Z_ISREF_P(zptr))) {
3492134921
ref = Z_REF_P(zptr);
34922+
zptr = Z_REFVAL_P(zptr);
3492234923
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
3492334924
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
3492434925
break;
3492534926
}
34926-
zptr = Z_REFVAL_P(zptr);
3492734927
}
3492834928

3492934929
if (IS_CV == IS_CONST) {
@@ -39034,11 +39034,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CONST_HA
3903439034
do {
3903539035
if (UNEXPECTED(Z_ISREF_P(zptr))) {
3903639036
ref = Z_REF_P(zptr);
39037+
zptr = Z_REFVAL_P(zptr);
3903739038
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
3903839039
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
3903939040
break;
3904039041
}
39041-
zptr = Z_REFVAL_P(zptr);
3904239042
}
3904339043

3904439044
if (IS_CONST == IS_CONST) {
@@ -39174,11 +39174,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CONST_HANDLE
3917439174
do {
3917539175
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
3917639176
zend_reference *ref = Z_REF_P(var_ptr);
39177+
var_ptr = Z_REFVAL_P(var_ptr);
3917739178
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
3917839179
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
3917939180
break;
3918039181
}
39181-
var_ptr = Z_REFVAL_P(var_ptr);
3918239182
}
3918339183
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
3918439184
} while (0);
@@ -42541,11 +42541,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_TMPVAR_H
4254142541
do {
4254242542
if (UNEXPECTED(Z_ISREF_P(zptr))) {
4254342543
ref = Z_REF_P(zptr);
42544+
zptr = Z_REFVAL_P(zptr);
4254442545
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
4254542546
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
4254642547
break;
4254742548
}
42548-
zptr = Z_REFVAL_P(zptr);
4254942549
}
4255042550

4255142551
if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
@@ -42682,11 +42682,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_TMPVAR_HANDL
4268242682
do {
4268342683
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
4268442684
zend_reference *ref = Z_REF_P(var_ptr);
42685+
var_ptr = Z_REFVAL_P(var_ptr);
4268542686
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
4268642687
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
4268742688
break;
4268842689
}
42689-
var_ptr = Z_REFVAL_P(var_ptr);
4269042690
}
4269142691
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
4269242692
} while (0);
@@ -47639,11 +47639,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_OP_SPEC_CV_CV_HANDL
4763947639
do {
4764047640
if (UNEXPECTED(Z_ISREF_P(zptr))) {
4764147641
ref = Z_REF_P(zptr);
47642+
zptr = Z_REFVAL_P(zptr);
4764247643
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
4764347644
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
4764447645
break;
4764547646
}
47646-
zptr = Z_REFVAL_P(zptr);
4764747647
}
4764847648

4764947649
if (IS_CV == IS_CONST) {
@@ -47779,11 +47779,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OP_SPEC_CV_CV_HANDLER(Z
4777947779
do {
4778047780
if (UNEXPECTED(Z_TYPE_P(var_ptr) == IS_REFERENCE)) {
4778147781
zend_reference *ref = Z_REF_P(var_ptr);
47782+
var_ptr = Z_REFVAL_P(var_ptr);
4778247783
if (UNEXPECTED(ZEND_REF_HAS_TYPE_SOURCES(ref))) {
4778347784
zend_binary_assign_op_typed_ref(ref, value OPLINE_CC EXECUTE_DATA_CC);
4778447785
break;
4778547786
}
47786-
var_ptr = Z_REFVAL_P(var_ptr);
4778747787
}
4778847788
zend_binary_op(var_ptr, var_ptr, value OPLINE_CC);
4778947789
} while (0);

0 commit comments

Comments
 (0)