Skip to content

Commit 8fdc88a

Browse files
committed
Remove some INDIRECT handling in VM
1 parent 48e7fc9 commit 8fdc88a

File tree

3 files changed

+8
-88
lines changed

3 files changed

+8
-88
lines changed

Zend/zend_execute.c

Lines changed: 1 addition & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2081,31 +2081,7 @@ static zend_always_inline zval *zend_fetch_dimension_address_inner(HashTable *ht
20812081
}
20822082
str_index:
20832083
retval = zend_hash_find_ex(ht, offset_key, ZEND_CONST_COND(dim_type == IS_CONST, 0));
2084-
if (retval) {
2085-
/* support for $GLOBALS[...] */
2086-
if (UNEXPECTED(Z_TYPE_P(retval) == IS_INDIRECT)) {
2087-
retval = Z_INDIRECT_P(retval);
2088-
if (UNEXPECTED(Z_TYPE_P(retval) == IS_UNDEF)) {
2089-
switch (type) {
2090-
case BP_VAR_R:
2091-
zend_undefined_index(offset_key);
2092-
/* break missing intentionally */
2093-
case BP_VAR_UNSET:
2094-
case BP_VAR_IS:
2095-
retval = &EG(uninitialized_zval);
2096-
break;
2097-
case BP_VAR_RW:
2098-
if (UNEXPECTED(zend_undefined_index_write(ht, offset_key))) {
2099-
return NULL;
2100-
}
2101-
/* break missing intentionally */
2102-
case BP_VAR_W:
2103-
ZVAL_NULL(retval);
2104-
break;
2105-
}
2106-
}
2107-
}
2108-
} else {
2084+
if (!retval) {
21092085
switch (type) {
21102086
case BP_VAR_R:
21112087
zend_undefined_index(offset_key);

Zend/zend_vm_def.h

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6678,15 +6678,7 @@ ZEND_VM_C_LABEL(fe_fetch_r_exit):
66786678
value = &p->val;
66796679
value_type = Z_TYPE_INFO_P(value);
66806680
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-
}
6681+
break;
66906682
}
66916683
p++;
66926684
}
@@ -6830,15 +6822,7 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR)
68306822
value = &p->val;
68316823
value_type = Z_TYPE_INFO_P(value);
68326824
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-
}
6825+
break;
68426826
}
68436827
p++;
68446828
}
@@ -9652,15 +9636,7 @@ ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_inf
96529636
value = &p->val;
96539637
value_type = Z_TYPE_INFO_P(value);
96549638
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-
}
9639+
break;
96649640
}
96659641
p++;
96669642
}

Zend/zend_vm_execute.h

Lines changed: 4 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -21598,15 +21598,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE
2159821598
value = &p->val;
2159921599
value_type = Z_TYPE_INFO_P(value);
2160021600
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-
}
21601+
break;
2161021602
}
2161121603
p++;
2161221604
}
@@ -21750,15 +21742,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z
2175021742
value = &p->val;
2175121743
value_type = Z_TYPE_INFO_P(value);
2175221744
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-
}
21745+
break;
2176221746
}
2176321747
p++;
2176421748
}
@@ -30795,15 +30779,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3079530779
value = &p->val;
3079630780
value_type = Z_TYPE_INFO_P(value);
3079730781
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-
}
30782+
break;
3080730783
}
3080830784
p++;
3080930785
}
@@ -30847,15 +30823,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_
3084730823
value = &p->val;
3084830824
value_type = Z_TYPE_INFO_P(value);
3084930825
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-
}
30826+
break;
3085930827
}
3086030828
p++;
3086130829
}

0 commit comments

Comments
 (0)