@@ -3545,8 +3545,8 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CON
3545
3545
SAVE_OPLINE();
3546
3546
value = RT_CONSTANT(opline, opline->op1);
3547
3547
3548
- if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) {
3549
- if (IS_CONST == IS_VAR) {
3548
+ if ((IS_CONST & ( IS_VAR| IS_CV) ) && Z_ISREF_P(value)) {
3549
+ if (IS_CONST & IS_VAR) {
3550
3550
ref = value;
3551
3551
}
3552
3552
value = Z_REFVAL_P(value);
@@ -3559,7 +3559,7 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CON
3559
3559
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
3560
3560
} else if (IS_CONST == IS_CV) {
3561
3561
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
3562
- } else if (IS_CONST == IS_VAR && ref) {
3562
+ } else if (( IS_CONST & IS_VAR) && ref) {
3563
3563
zend_reference *r = Z_REF_P(ref);
3564
3564
3565
3565
if (UNEXPECTED(GC_DELREF(r) == 0)) {
@@ -12781,6 +12781,46 @@ static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_
12781
12781
ZEND_VM_NEXT_OPCODE(); /* Never reached */
12782
12782
}
12783
12783
12784
+ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12785
+ {
12786
+ USE_OPLINE
12787
+ zend_free_op free_op1;
12788
+ zval *value;
12789
+ zval *ref = NULL;
12790
+
12791
+ SAVE_OPLINE();
12792
+ value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
12793
+
12794
+ if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) {
12795
+ if ((IS_TMP_VAR|IS_VAR) & IS_VAR) {
12796
+ ref = value;
12797
+ }
12798
+ value = Z_REFVAL_P(value);
12799
+ }
12800
+
12801
+ if (Z_TYPE_P(value) > IS_NULL) {
12802
+ zval *result = EX_VAR(opline->result.var);
12803
+ ZVAL_COPY_VALUE(result, value);
12804
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST) {
12805
+ if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
12806
+ } else if ((IS_TMP_VAR|IS_VAR) == IS_CV) {
12807
+ if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
12808
+ } else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && ref) {
12809
+ zend_reference *r = Z_REF_P(ref);
12810
+
12811
+ if (UNEXPECTED(GC_DELREF(r) == 0)) {
12812
+ efree_size(r, sizeof(zend_reference));
12813
+ } else if (Z_OPT_REFCOUNTED_P(result)) {
12814
+ Z_ADDREF_P(result);
12815
+ }
12816
+ }
12817
+ ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
12818
+ }
12819
+
12820
+ zval_ptr_dtor_nogc(free_op1);
12821
+ ZEND_VM_NEXT_OPCODE();
12822
+ }
12823
+
12784
12824
static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
12785
12825
{
12786
12826
USE_OPLINE
@@ -18393,46 +18433,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_
18393
18433
ZEND_VM_NEXT_OPCODE();
18394
18434
}
18395
18435
18396
- static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18397
- {
18398
- USE_OPLINE
18399
- zend_free_op free_op1;
18400
- zval *value;
18401
- zval *ref = NULL;
18402
-
18403
- SAVE_OPLINE();
18404
- value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
18405
-
18406
- if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) {
18407
- if (IS_TMP_VAR == IS_VAR) {
18408
- ref = value;
18409
- }
18410
- value = Z_REFVAL_P(value);
18411
- }
18412
-
18413
- if (Z_TYPE_P(value) > IS_NULL) {
18414
- zval *result = EX_VAR(opline->result.var);
18415
- ZVAL_COPY_VALUE(result, value);
18416
- if (IS_TMP_VAR == IS_CONST) {
18417
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
18418
- } else if (IS_TMP_VAR == IS_CV) {
18419
- if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
18420
- } else if (IS_TMP_VAR == IS_VAR && ref) {
18421
- zend_reference *r = Z_REF_P(ref);
18422
-
18423
- if (UNEXPECTED(GC_DELREF(r) == 0)) {
18424
- efree_size(r, sizeof(zend_reference));
18425
- } else if (Z_OPT_REFCOUNTED_P(result)) {
18426
- Z_ADDREF_P(result);
18427
- }
18428
- }
18429
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
18430
- }
18431
-
18432
- zval_ptr_dtor_nogc(free_op1);
18433
- ZEND_VM_NEXT_OPCODE();
18434
- }
18435
-
18436
18436
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
18437
18437
{
18438
18438
USE_OPLINE
@@ -21755,46 +21755,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_
21755
21755
ZEND_VM_NEXT_OPCODE();
21756
21756
}
21757
21757
21758
- static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21759
- {
21760
- USE_OPLINE
21761
- zend_free_op free_op1;
21762
- zval *value;
21763
- zval *ref = NULL;
21764
-
21765
- SAVE_OPLINE();
21766
- value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC);
21767
-
21768
- if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) {
21769
- if (IS_VAR == IS_VAR) {
21770
- ref = value;
21771
- }
21772
- value = Z_REFVAL_P(value);
21773
- }
21774
-
21775
- if (Z_TYPE_P(value) > IS_NULL) {
21776
- zval *result = EX_VAR(opline->result.var);
21777
- ZVAL_COPY_VALUE(result, value);
21778
- if (IS_VAR == IS_CONST) {
21779
- if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
21780
- } else if (IS_VAR == IS_CV) {
21781
- if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
21782
- } else if (IS_VAR == IS_VAR && ref) {
21783
- zend_reference *r = Z_REF_P(ref);
21784
-
21785
- if (UNEXPECTED(GC_DELREF(r) == 0)) {
21786
- efree_size(r, sizeof(zend_reference));
21787
- } else if (Z_OPT_REFCOUNTED_P(result)) {
21788
- Z_ADDREF_P(result);
21789
- }
21790
- }
21791
- ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0);
21792
- }
21793
-
21794
- zval_ptr_dtor_nogc(free_op1);
21795
- ZEND_VM_NEXT_OPCODE();
21796
- }
21797
-
21798
21758
static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
21799
21759
{
21800
21760
USE_OPLINE
@@ -37965,8 +37925,8 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
37965
37925
SAVE_OPLINE();
37966
37926
value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC);
37967
37927
37968
- if ((IS_CV == IS_VAR || IS_CV == IS_CV ) && Z_ISREF_P(value)) {
37969
- if (IS_CV == IS_VAR) {
37928
+ if ((IS_CV & ( IS_VAR| IS_CV) ) && Z_ISREF_P(value)) {
37929
+ if (IS_CV & IS_VAR) {
37970
37930
ref = value;
37971
37931
}
37972
37932
value = Z_REFVAL_P(value);
@@ -37979,7 +37939,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_
37979
37939
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result);
37980
37940
} else if (IS_CV == IS_CV) {
37981
37941
if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result);
37982
- } else if (IS_CV == IS_VAR && ref) {
37942
+ } else if (( IS_CV & IS_VAR) && ref) {
37983
37943
zend_reference *r = Z_REF_P(ref);
37984
37944
37985
37945
if (UNEXPECTED(GC_DELREF(r) == 0)) {
@@ -54125,8 +54085,8 @@ ZEND_API void execute_ex(zend_execute_data *ex)
54125
54085
(void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_LABEL,
54126
54086
(void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL,
54127
54087
(void*)&&ZEND_COALESCE_SPEC_CONST_LABEL,
54128
- (void*)&&ZEND_COALESCE_SPEC_TMP_LABEL ,
54129
- (void*)&&ZEND_COALESCE_SPEC_VAR_LABEL ,
54088
+ (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL ,
54089
+ (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL ,
54130
54090
(void*)&&ZEND_NULL_LABEL,
54131
54091
(void*)&&ZEND_COALESCE_SPEC_CV_LABEL,
54132
54092
(void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL,
@@ -56879,6 +56839,10 @@ ZEND_API void execute_ex(zend_execute_data *ex)
56879
56839
VM_TRACE(ZEND_EXIT_SPEC_TMPVAR)
56880
56840
ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56881
56841
HYBRID_BREAK();
56842
+ HYBRID_CASE(ZEND_COALESCE_SPEC_TMPVAR):
56843
+ VM_TRACE(ZEND_COALESCE_SPEC_TMPVAR)
56844
+ ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
56845
+ HYBRID_BREAK();
56882
56846
HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR):
56883
56847
VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR)
56884
56848
ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -57441,10 +57405,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
57441
57405
VM_TRACE(ZEND_JMP_SET_SPEC_TMP)
57442
57406
ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57443
57407
HYBRID_BREAK();
57444
- HYBRID_CASE(ZEND_COALESCE_SPEC_TMP):
57445
- VM_TRACE(ZEND_COALESCE_SPEC_TMP)
57446
- ZEND_COALESCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57447
- HYBRID_BREAK();
57448
57408
HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP):
57449
57409
VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP)
57450
57410
ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -57759,10 +57719,6 @@ ZEND_API void execute_ex(zend_execute_data *ex)
57759
57719
VM_TRACE(ZEND_JMP_SET_SPEC_VAR)
57760
57720
ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57761
57721
HYBRID_BREAK();
57762
- HYBRID_CASE(ZEND_COALESCE_SPEC_VAR):
57763
- VM_TRACE(ZEND_COALESCE_SPEC_VAR)
57764
- ZEND_COALESCE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
57765
- HYBRID_BREAK();
57766
57722
HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR):
57767
57723
VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR)
57768
57724
ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU);
@@ -63628,8 +63584,8 @@ void zend_vm_init(void)
63628
63584
ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER,
63629
63585
ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER,
63630
63586
ZEND_COALESCE_SPEC_CONST_HANDLER,
63631
- ZEND_COALESCE_SPEC_TMP_HANDLER ,
63632
- ZEND_COALESCE_SPEC_VAR_HANDLER ,
63587
+ ZEND_COALESCE_SPEC_TMPVAR_HANDLER ,
63588
+ ZEND_COALESCE_SPEC_TMPVAR_HANDLER ,
63633
63589
ZEND_NULL_HANDLER,
63634
63590
ZEND_COALESCE_SPEC_CV_HANDLER,
63635
63591
ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER,
0 commit comments