@@ -3759,7 +3759,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_CONST(int type
3759
3759
zend_class_entry *ce;
3760
3760
3761
3761
if (IS_CONST == IS_CONST) {
3762
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
3762
+ if (IS_CONST == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
3763
+
3764
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
3765
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
3766
+
3767
+ /* check if static properties were destoyed */
3768
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
3769
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
3770
+ }
3771
+
3772
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
3773
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
3774
+ ZVAL_UNREF(retval);
3775
+ }
3776
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
3777
+ } else {
3778
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
3779
+ }
3780
+ ZEND_VM_NEXT_OPCODE();
3781
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
3763
3782
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
3764
3783
} else {
3765
3784
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -5252,7 +5271,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_VAR(int type,
5252
5271
zend_class_entry *ce;
5253
5272
5254
5273
if (IS_VAR == IS_CONST) {
5255
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
5274
+ if (IS_CONST == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
5275
+
5276
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5277
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
5278
+
5279
+ /* check if static properties were destoyed */
5280
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
5281
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
5282
+ }
5283
+
5284
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
5285
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
5286
+ ZVAL_UNREF(retval);
5287
+ }
5288
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
5289
+ } else {
5290
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
5291
+ }
5292
+ ZEND_VM_NEXT_OPCODE();
5293
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
5256
5294
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
5257
5295
} else {
5258
5296
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -5677,7 +5715,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int typ
5677
5715
zend_class_entry *ce;
5678
5716
5679
5717
if (IS_UNUSED == IS_CONST) {
5680
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
5718
+ if (IS_CONST == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
5719
+
5720
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
5721
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
5722
+
5723
+ /* check if static properties were destoyed */
5724
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
5725
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
5726
+ }
5727
+
5728
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
5729
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
5730
+ ZVAL_UNREF(retval);
5731
+ }
5732
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
5733
+ } else {
5734
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
5735
+ }
5736
+ ZEND_VM_NEXT_OPCODE();
5737
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
5681
5738
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
5682
5739
} else {
5683
5740
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -25092,7 +25149,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_CONST(int type, Z
25092
25149
zend_class_entry *ce;
25093
25150
25094
25151
if (IS_CONST == IS_CONST) {
25095
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
25152
+ if (IS_CV == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
25153
+
25154
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
25155
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
25156
+
25157
+ /* check if static properties were destoyed */
25158
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
25159
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
25160
+ }
25161
+
25162
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
25163
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
25164
+ ZVAL_UNREF(retval);
25165
+ }
25166
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
25167
+ } else {
25168
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
25169
+ }
25170
+ ZEND_VM_NEXT_OPCODE();
25171
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
25096
25172
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
25097
25173
} else {
25098
25174
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -26916,7 +26992,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_VAR(int type, ZEN
26916
26992
zend_class_entry *ce;
26917
26993
26918
26994
if (IS_VAR == IS_CONST) {
26919
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
26995
+ if (IS_CV == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
26996
+
26997
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
26998
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
26999
+
27000
+ /* check if static properties were destoyed */
27001
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
27002
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
27003
+ }
27004
+
27005
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
27006
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
27007
+ ZVAL_UNREF(retval);
27008
+ }
27009
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
27010
+ } else {
27011
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
27012
+ }
27013
+ ZEND_VM_NEXT_OPCODE();
27014
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
26920
27015
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
26921
27016
} else {
26922
27017
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -27762,7 +27857,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type,
27762
27857
zend_class_entry *ce;
27763
27858
27764
27859
if (IS_UNUSED == IS_CONST) {
27765
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
27860
+ if (IS_CV == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
27861
+
27862
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
27863
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
27864
+
27865
+ /* check if static properties were destoyed */
27866
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
27867
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
27868
+ }
27869
+
27870
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
27871
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
27872
+ ZVAL_UNREF(retval);
27873
+ }
27874
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
27875
+ } else {
27876
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
27877
+ }
27878
+ ZEND_VM_NEXT_OPCODE();
27879
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
27766
27880
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
27767
27881
} else {
27768
27882
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -33125,7 +33239,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_CONST(int typ
33125
33239
zend_class_entry *ce;
33126
33240
33127
33241
if (IS_CONST == IS_CONST) {
33128
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
33242
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
33243
+
33244
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
33245
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
33246
+
33247
+ /* check if static properties were destoyed */
33248
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
33249
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
33250
+ }
33251
+
33252
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
33253
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
33254
+ ZVAL_UNREF(retval);
33255
+ }
33256
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
33257
+ } else {
33258
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
33259
+ }
33260
+ ZEND_VM_NEXT_OPCODE();
33261
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
33129
33262
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
33130
33263
} else {
33131
33264
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -33896,7 +34029,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_VAR(int type,
33896
34029
zend_class_entry *ce;
33897
34030
33898
34031
if (IS_VAR == IS_CONST) {
33899
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
34032
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
34033
+
34034
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
34035
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
34036
+
34037
+ /* check if static properties were destoyed */
34038
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34039
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
34040
+ }
34041
+
34042
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
34043
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
34044
+ ZVAL_UNREF(retval);
34045
+ }
34046
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
34047
+ } else {
34048
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
34049
+ }
34050
+ ZEND_VM_NEXT_OPCODE();
34051
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
33900
34052
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
33901
34053
} else {
33902
34054
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
@@ -34234,7 +34386,26 @@ static int ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int ty
34234
34386
zend_class_entry *ce;
34235
34387
34236
34388
if (IS_UNUSED == IS_CONST) {
34237
- if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
34389
+ if ((IS_TMP_VAR|IS_VAR) == IS_CONST && CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)))) {
34390
+
34391
+ ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)));
34392
+ retval = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op1)) + 1);
34393
+
34394
+ /* check if static properties were destoyed */
34395
+ if (UNEXPECTED(CE_STATIC_MEMBERS(ce) == NULL)) {
34396
+ zend_error_noreturn(E_ERROR, "Access to undeclared static property: %s::$%s", ce->name->val, name->val);
34397
+ }
34398
+
34399
+ if (type == BP_VAR_R || type == BP_VAR_IS) {
34400
+ if (/*type == BP_VAR_R &&*/ Z_ISREF_P(retval) && Z_REFCOUNT_P(retval) == 1) {
34401
+ ZVAL_UNREF(retval);
34402
+ }
34403
+ ZVAL_COPY(EX_VAR(opline->result.var), retval);
34404
+ } else {
34405
+ ZVAL_INDIRECT(EX_VAR(opline->result.var), retval);
34406
+ }
34407
+ ZEND_VM_NEXT_OPCODE();
34408
+ } else if (CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)))) {
34238
34409
ce = CACHED_PTR(Z_CACHE_SLOT_P(EX_CONSTANT(opline->op2)));
34239
34410
} else {
34240
34411
ce = zend_fetch_class_by_name(Z_STR_P(EX_CONSTANT(opline->op2)), EX_CONSTANT(opline->op2) + 1, 0);
0 commit comments