mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Use ZEND_ACC_CALL_VIA_TRAMPOLINE instead of ZEND_ACC_CALL_VIA_HANDLER. Keep ZEND_ACC_CALL_VIA_HANDLER for compatibility.
This commit is contained in:
parent
0a8403a2a0
commit
9ae61e33e2
8 changed files with 49 additions and 46 deletions
|
@ -3079,7 +3079,7 @@ get_function_via_handler:
|
|||
if (strict_class &&
|
||||
(!fcc->function_handler->common.scope ||
|
||||
!instanceof_function(ce_org, fcc->function_handler->common.scope))) {
|
||||
if ((fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0) {
|
||||
if (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
zend_string_release(fcc->function_handler->common.function_name);
|
||||
}
|
||||
|
@ -3087,7 +3087,7 @@ get_function_via_handler:
|
|||
}
|
||||
} else {
|
||||
retval = 1;
|
||||
call_via_handler = (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
|
||||
call_via_handler = (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -3099,7 +3099,7 @@ get_function_via_handler:
|
|||
}
|
||||
if (fcc->function_handler) {
|
||||
retval = 1;
|
||||
call_via_handler = (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
|
||||
call_via_handler = (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0;
|
||||
if (call_via_handler && !fcc->object && EG(current_execute_data) && Z_OBJ(EG(current_execute_data)->This) &&
|
||||
instanceof_function(Z_OBJCE(EG(current_execute_data)->This), fcc->calling_scope)) {
|
||||
fcc->object = Z_OBJ(EG(current_execute_data)->This);
|
||||
|
@ -3241,7 +3241,7 @@ again:
|
|||
ret = zend_is_callable_check_func(check_flags, callable, fcc, 0, error);
|
||||
if (fcc == &fcc_local &&
|
||||
fcc->function_handler &&
|
||||
((fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) ||
|
||||
((fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) ||
|
||||
fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY ||
|
||||
fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
|
||||
if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
|
@ -3328,7 +3328,7 @@ again:
|
|||
ret = zend_is_callable_check_func(check_flags, method, fcc, strict_class, error);
|
||||
if (fcc == &fcc_local &&
|
||||
fcc->function_handler &&
|
||||
((fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) ||
|
||||
((fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) ||
|
||||
fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY ||
|
||||
fcc->function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
|
||||
if (fcc->function_handler->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
|
@ -3403,7 +3403,7 @@ ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_nam
|
|||
add_next_index_str(callable, zend_string_copy(fcc.function_handler->common.function_name));
|
||||
}
|
||||
if (fcc.function_handler &&
|
||||
((fcc.function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) ||
|
||||
((fcc.function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) ||
|
||||
fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION_TEMPORARY ||
|
||||
fcc.function_handler->type == ZEND_OVERLOADED_FUNCTION)) {
|
||||
if (fcc.function_handler->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
|
|
|
@ -1285,7 +1285,7 @@ ZEND_FUNCTION(method_exists)
|
|||
&& Z_OBJ_HT_P(klass)->get_method != NULL
|
||||
&& (func = Z_OBJ_HT_P(klass)->get_method(&Z_OBJ_P(klass), method_name, NULL)) != NULL
|
||||
) {
|
||||
if ((func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0) {
|
||||
if (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
/* Returns true to the fake Closure's __invoke */
|
||||
RETVAL_BOOL(func->common.scope == zend_ce_closure
|
||||
&& zend_string_equals_literal(method_name, ZEND_INVOKE_FUNC_NAME));
|
||||
|
@ -2506,7 +2506,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
|||
if (prev_call &&
|
||||
prev_call->func &&
|
||||
!ZEND_USER_CODE(prev_call->func->common.type) &&
|
||||
!(prev_call->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER)) {
|
||||
!(prev_call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
break;
|
||||
}
|
||||
if (prev->func && ZEND_USER_CODE(prev->func->common.type)) {
|
||||
|
|
|
@ -226,8 +226,11 @@ typedef struct _zend_try_catch_element {
|
|||
#define ZEND_ACC_CLOSURE 0x100000
|
||||
#define ZEND_ACC_GENERATOR 0x800000
|
||||
|
||||
/* function flag for internal user call handlers __call, __callstatic */
|
||||
#define ZEND_ACC_CALL_VIA_HANDLER 0x200000
|
||||
/* call through user function trampoline. e.g. __call, __callstatic */
|
||||
#define ZEND_ACC_CALL_VIA_TRAMPOLINE 0x200000
|
||||
|
||||
/* call through internal function handler. e.g. Closure::invoke() */
|
||||
#define ZEND_ACC_CALL_VIA_HANDLER ZEND_ACC_CALL_VIA_TRAMPOLINE
|
||||
|
||||
/* disable inline caching */
|
||||
#define ZEND_ACC_NEVER_CACHE 0x400000
|
||||
|
|
|
@ -803,7 +803,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
|
|||
Z_ADDREF_P(arg);
|
||||
} else {
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0 ) {
|
||||
!(func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -827,7 +827,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
|
|||
}
|
||||
|
||||
if (func->type == ZEND_USER_FUNCTION) {
|
||||
int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
|
||||
int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0;
|
||||
EG(scope) = func->common.scope;
|
||||
call->symbol_table = fci->symbol_table;
|
||||
if (UNEXPECTED(func->op_array.fn_flags & ZEND_ACC_CLOSURE)) {
|
||||
|
@ -845,7 +845,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache) /
|
|||
fci_cache->initialized = 0;
|
||||
}
|
||||
} else if (func->type == ZEND_INTERNAL_FUNCTION) {
|
||||
int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
|
||||
int call_via_handler = (func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) != 0;
|
||||
ZVAL_NULL(fci->retval);
|
||||
if (func->common.scope) {
|
||||
EG(scope) = func->common.scope;
|
||||
|
|
|
@ -1007,7 +1007,7 @@ ZEND_API zend_function *zend_get_call_trampoline_func(zend_class_entry *ce, zend
|
|||
}
|
||||
|
||||
func->type = ZEND_USER_FUNCTION;
|
||||
func->fn_flags = ZEND_ACC_CALL_VIA_HANDLER | ZEND_ACC_PUBLIC;
|
||||
func->fn_flags = ZEND_ACC_CALL_VIA_TRAMPOLINE | ZEND_ACC_PUBLIC;
|
||||
if (is_static) {
|
||||
func->fn_flags |= ZEND_ACC_STATIC;
|
||||
}
|
||||
|
|
|
@ -2890,7 +2890,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMPVAR|UNUSED|CV, CONST|TMPVAR|CV)
|
|||
}
|
||||
if (OP2_TYPE == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -2978,7 +2978,7 @@ ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, CONST|VAR, CONST|TMPVAR|UNUSE
|
|||
}
|
||||
if (OP2_TYPE == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (OP1_TYPE == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -4433,7 +4433,7 @@ ZEND_VM_C_LABEL(send_array):
|
|||
Z_ADDREF_P(arg);
|
||||
} else{
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0) {
|
||||
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -4494,7 +4494,7 @@ ZEND_VM_HANDLER(120, ZEND_SEND_USER, VAR|CV, ANY)
|
|||
Z_ADDREF_P(arg);
|
||||
} else {
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0) {
|
||||
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -6937,7 +6937,7 @@ ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY)
|
|||
}
|
||||
OBJ_RELEASE(Z_OBJ(call->This));
|
||||
}
|
||||
if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
zend_string_release(call->func->common.function_name);
|
||||
zend_free_trampoline(call->func);
|
||||
}
|
||||
|
|
|
@ -1168,7 +1168,7 @@ send_array:
|
|||
Z_ADDREF_P(arg);
|
||||
} else{
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0) {
|
||||
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -1551,7 +1551,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(
|
|||
}
|
||||
OBJ_RELEASE(Z_OBJ(call->This));
|
||||
}
|
||||
if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
zend_string_release(call->func->common.function_name);
|
||||
zend_free_trampoline(call->func);
|
||||
}
|
||||
|
@ -5194,7 +5194,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
|||
}
|
||||
if (IS_CONST == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_CONST == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -7143,7 +7143,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
|||
}
|
||||
if (IS_UNUSED == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_CONST == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -8651,7 +8651,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
|||
}
|
||||
if (IS_CV == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_CONST == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -10240,7 +10240,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_C
|
|||
}
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_CONST == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -14150,7 +14150,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEN
|
|||
Z_ADDREF_P(arg);
|
||||
} else {
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0) {
|
||||
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -16298,7 +16298,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
|||
}
|
||||
if (IS_CONST == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_VAR == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -17893,7 +17893,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
|||
}
|
||||
if (IS_UNUSED == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_VAR == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -19580,7 +19580,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
|||
}
|
||||
if (IS_CV == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_VAR == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -21222,7 +21222,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_V
|
|||
}
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0)) {
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) {
|
||||
if (IS_VAR == IS_CONST) {
|
||||
CACHE_PTR(Z_CACHE_SLOT_P(function_name), fbc);
|
||||
} else {
|
||||
|
@ -22679,7 +22679,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
|
|||
}
|
||||
if (IS_CONST == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -25072,7 +25072,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_C
|
|||
}
|
||||
if (IS_CV == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -26581,7 +26581,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_T
|
|||
}
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -27720,7 +27720,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND
|
|||
Z_ADDREF_P(arg);
|
||||
} else {
|
||||
if (Z_ISREF_P(arg) &&
|
||||
(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) == 0) {
|
||||
!(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
/* don't separate references for __call */
|
||||
arg = Z_REFVAL_P(arg);
|
||||
}
|
||||
|
@ -30663,7 +30663,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST
|
|||
}
|
||||
if (IS_CONST == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -35622,7 +35622,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HA
|
|||
}
|
||||
if (IS_CV == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -38152,7 +38152,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVA
|
|||
}
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -40226,7 +40226,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
|
|||
}
|
||||
if (IS_CONST == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -42233,7 +42233,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_C
|
|||
}
|
||||
if (IS_CV == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
@ -43251,7 +43251,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_T
|
|||
}
|
||||
if ((IS_TMP_VAR|IS_VAR) == IS_CONST &&
|
||||
EXPECTED(fbc->type <= ZEND_USER_FUNCTION) &&
|
||||
EXPECTED((fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_HANDLER|ZEND_ACC_NEVER_CACHE)) == 0) &&
|
||||
EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) &&
|
||||
EXPECTED(obj == orig_obj)) {
|
||||
CACHE_POLYMORPHIC_PTR(Z_CACHE_SLOT_P(function_name), called_scope, fbc);
|
||||
}
|
||||
|
|
|
@ -265,7 +265,7 @@ static void _default_lookup_entry(zval *object, char *name, int name_len, zval *
|
|||
static zend_function *_copy_function(zend_function *fptr) /* {{{ */
|
||||
{
|
||||
if (fptr
|
||||
&& (fptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0)
|
||||
&& (fptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
|
||||
{
|
||||
zend_function *copy_fptr;
|
||||
copy_fptr = emalloc(sizeof(zend_function));
|
||||
|
@ -282,7 +282,7 @@ static zend_function *_copy_function(zend_function *fptr) /* {{{ */
|
|||
static void _free_function(zend_function *fptr) /* {{{ */
|
||||
{
|
||||
if (fptr
|
||||
&& (fptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0)
|
||||
&& (fptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
|
||||
{
|
||||
zend_string_release(fptr->internal_function.function_name);
|
||||
zend_free_trampoline(fptr);
|
||||
|
@ -2236,7 +2236,7 @@ ZEND_METHOD(reflection_parameter, __construct)
|
|||
if (Z_TYPE_P(parameter) == IS_LONG) {
|
||||
position= (int)Z_LVAL_P(parameter);
|
||||
if (position < 0 || (uint32_t)position >= num_args) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
zend_string_release(fptr->common.function_name);
|
||||
}
|
||||
|
@ -2274,7 +2274,7 @@ ZEND_METHOD(reflection_parameter, __construct)
|
|||
}
|
||||
}
|
||||
if (position == -1) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) {
|
||||
if (fptr->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) {
|
||||
if (fptr->type != ZEND_OVERLOADED_FUNCTION) {
|
||||
zend_string_release(fptr->common.function_name);
|
||||
}
|
||||
|
@ -2840,7 +2840,7 @@ ZEND_METHOD(reflection_method, getClosure)
|
|||
|
||||
/* This is an original closure object and __invoke is to be called. */
|
||||
if (Z_OBJCE_P(obj) == zend_ce_closure &&
|
||||
(mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0)
|
||||
(mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE))
|
||||
{
|
||||
RETURN_ZVAL(obj, 1, 0);
|
||||
} else {
|
||||
|
@ -3041,7 +3041,7 @@ ZEND_METHOD(reflection_method, invokeArgs)
|
|||
/*
|
||||
* Copy the zend_function when calling via handler (e.g. Closure::__invoke())
|
||||
*/
|
||||
if ((mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0) {
|
||||
if ((mptr->internal_function.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) {
|
||||
fcc.function_handler = _copy_function(mptr);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue