Skip to content

Commit 40551e0

Browse files
committed
Eliminated reference-counting and EG(exception) check
1 parent ad2719c commit 40551e0

File tree

2 files changed

+186
-121
lines changed

2 files changed

+186
-121
lines changed

Zend/zend_vm_def.h

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3086,22 +3086,27 @@ ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV,
30863086
}
30873087
}
30883088

3089+
if (OP2_TYPE != IS_CONST) {
3090+
FREE_OP2();
3091+
}
3092+
30893093
call_info = ZEND_CALL_NESTED_FUNCTION;
30903094
if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) {
30913095
obj = NULL;
3096+
FREE_OP1();
3097+
3098+
if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
3099+
HANDLE_EXCEPTION();
3100+
}
30923101
} else if (OP1_TYPE & (IS_VAR|IS_TMP_VAR|IS_CV)) {
30933102
/* CV may be changed indirectly (e.g. when it's a reference) */
30943103
call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS;
3095-
GC_ADDREF(obj); /* For $this pointer */
3096-
}
3097-
3098-
if (OP2_TYPE != IS_CONST) {
3099-
FREE_OP2();
3100-
}
3101-
FREE_OP1();
3102-
3103-
if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) {
3104-
HANDLE_EXCEPTION();
3104+
if (OP1_TYPE == IS_CV) {
3105+
GC_ADDREF(obj); /* For $this pointer */
3106+
} else if (free_op1 != object) {
3107+
GC_ADDREF(obj); /* For $this pointer */
3108+
FREE_OP1();
3109+
}
31053110
}
31063111

31073112
call = zend_vm_stack_push_call_frame(call_info,

0 commit comments

Comments
 (0)