Skip to content

Commit 8856f92

Browse files
committed
Remove some INDIRECT handling in VM
1 parent 5619f27 commit 8856f92

File tree

3 files changed

+15
-88
lines changed

3 files changed

+15
-88
lines changed

Zend/zend_execute.c

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2089,31 +2089,7 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht
20892089
}
20902090
str_index:
20912091
retval = zend_hash_find_ex(ht, offset_key, ZEND_CONST_COND(dim_type == IS_CONST, 0));
2092-
if (retval) {
2093-
/* support for $GLOBALS[...] */
2094-
if (UNEXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) {
2095-
retval = Z_INDIRECT_P(retval);
2096-
if (UNEXPECTED(Z_TYPE_P(retval) == IS_UNDEF)) {
2097-
switch (type) {
2098-
case BP_VAR_R:
2099-
zend_undefined_index(offset_key);
2100-
/* break missing intentionally */
2101-
case BP_VAR_UNSET:
2102-
case BP_VAR_IS:
2103-
retval = &EG(uninitialized_zval);
2104-
break;
2105-
case BP_VAR_RW:
2106-
if (UNEXPECTED(zend_undefined_index_write(ht, offset_key))) {
2107-
return NULL;
2108-
}
2109-
/* break missing intentionally */
2110-
case BP_VAR_W:
2111-
ZVAL_NULL(retval);
2112-
break;
2113-
}
2114-
}
2115-
}
2116-
} else {
2092+
if (!retval) {
21172093
switch (type) {
21182094
case BP_VAR_R:
21192095
zend_undefined_index(offset_key);

Zend/zend_vm_def.h

Lines changed: 6 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6677,16 +6677,9 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66776677
pos++;
66786678
value = &p->val;
66796679
value_type = Z_TYPE_INFO_P(value);
6680+
ZEND_ASSERT(value_type != IS_INDIRECT);
66806681
if (EXPECTED(value_type != IS_UNDEF)) {
6681-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
6682-
value = Z_INDIRECT_P(value);
6683-
value_type = Z_TYPE_INFO_P(value);
6684-
if (EXPECTED(value_type != IS_UNDEF)) {
6685-
break;
6686-
}
6687-
} else {
6688-
break;
6689-
}
6682+
break;
66906683
}
66916684
p++;
66926685
}
@@ -6829,16 +6822,9 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68296822
pos++;
68306823
value = &p->val;
68316824
value_type = Z_TYPE_INFO_P(value);
6825+
ZEND_ASSERT(value_type != IS_INDIRECT);
68326826
if (EXPECTED(value_type != IS_UNDEF)) {
6833-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
6834-
value = Z_INDIRECT_P(value);
6835-
value_type = Z_TYPE_INFO_P(value);
6836-
if (EXPECTED(value_type != IS_UNDEF)) {
6837-
break;
6838-
}
6839-
} else {
6840-
break;
6841-
}
6827+
break;
68426828
}
68436829
p++;
68446830
}
@@ -9651,16 +9637,9 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
96519637
pos++;
96529638
value = &p->val;
96539639
value_type = Z_TYPE_INFO_P(value);
9640+
ZEND_ASSERT(value_type != IS_INDIRECT);
96549641
if (EXPECTED(value_type != IS_UNDEF)) {
9655-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
9656-
value = Z_INDIRECT_P(value);
9657-
value_type = Z_TYPE_INFO_P(value);
9658-
if (EXPECTED(value_type != IS_UNDEF)) {
9659-
break;
9660-
}
9661-
} else {
9662-
break;
9663-
}
9642+
break;
96649643
}
96659644
p++;
96669645
}

Zend/zend_vm_execute.h

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21597,16 +21597,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2159721597
pos++;
2159821598
value = &p->val;
2159921599
value_type = Z_TYPE_INFO_P(value);
21600+
ZEND_ASSERT(value_type != IS_INDIRECT);
2160021601
if (EXPECTED(value_type != IS_UNDEF)) {
21601-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
21602-
value = Z_INDIRECT_P(value);
21603-
value_type = Z_TYPE_INFO_P(value);
21604-
if (EXPECTED(value_type != IS_UNDEF)) {
21605-
break;
21606-
}
21607-
} else {
21608-
break;
21609-
}
21602+
break;
2161021603
}
2161121604
p++;
2161221605
}
@@ -21749,16 +21742,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2174921742
pos++;
2175021743
value = &p->val;
2175121744
value_type = Z_TYPE_INFO_P(value);
21745+
ZEND_ASSERT(value_type != IS_INDIRECT);
2175221746
if (EXPECTED(value_type != IS_UNDEF)) {
21753-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
21754-
value = Z_INDIRECT_P(value);
21755-
value_type = Z_TYPE_INFO_P(value);
21756-
if (EXPECTED(value_type != IS_UNDEF)) {
21757-
break;
21758-
}
21759-
} else {
21760-
break;
21761-
}
21747+
break;
2176221748
}
2176321749
p++;
2176421750
}
@@ -30794,16 +30780,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3079430780
pos++;
3079530781
value = &p->val;
3079630782
value_type = Z_TYPE_INFO_P(value);
30783+
ZEND_ASSERT(value_type != IS_INDIRECT);
3079730784
if (EXPECTED(value_type != IS_UNDEF)) {
30798-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
30799-
value = Z_INDIRECT_P(value);
30800-
value_type = Z_TYPE_INFO_P(value);
30801-
if (EXPECTED(value_type != IS_UNDEF)) {
30802-
break;
30803-
}
30804-
} else {
30805-
break;
30806-
}
30785+
break;
3080730786
}
3080830787
p++;
3080930788
}
@@ -30846,16 +30825,9 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3084630825
pos++;
3084730826
value = &p->val;
3084830827
value_type = Z_TYPE_INFO_P(value);
30828+
ZEND_ASSERT(value_type != IS_INDIRECT);
3084930829
if (EXPECTED(value_type != IS_UNDEF)) {
30850-
if (UNEXPECTED(value_type == IS_INDIRECT)) {
30851-
value = Z_INDIRECT_P(value);
30852-
value_type = Z_TYPE_INFO_P(value);
30853-
if (EXPECTED(value_type != IS_UNDEF)) {
30854-
break;
30855-
}
30856-
} else {
30857-
break;
30858-
}
30830+
break;
3085930831
}
3086030832
p++;
3086130833
}

0 commit comments

Comments
 (0)