From d2890963e4540a20954afae0e059810312c9dc4e Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 4 Jul 2014 17:03:44 +0400 Subject: [PATCH] Use values from current_execute_data instead of globals where possible --- Zend/zend_execute.c | 10 +++---- Zend/zend_vm_def.h | 22 +++++++------- Zend/zend_vm_execute.h | 66 +++++++++++++++++++++--------------------- 3 files changed, 49 insertions(+), 49 deletions(-) diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index b4e7f0e51ad..37facb34120 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -991,14 +991,14 @@ static zend_always_inline HashTable *zend_get_target_symbol_table(zend_execute_d EXPECTED(fetch_type == ZEND_FETCH_GLOBAL)) { ht = &EG(symbol_table).ht; } else if (EXPECTED(fetch_type == ZEND_FETCH_STATIC)) { - ZEND_ASSERT(execute_data->func->op_array.static_variables != NULL); - ht = execute_data->func->op_array.static_variables; + ZEND_ASSERT(EX(func)->op_array.static_variables != NULL); + ht = EX(func)->op_array.static_variables; } else { ZEND_ASSERT(fetch_type == ZEND_FETCH_LOCAL); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - ht = &EG(active_symbol_table)->ht; + ht = &EX(symbol_table)->ht; } return ht; } @@ -1633,7 +1633,7 @@ ZEND_API zend_execute_data *zend_create_generator_execute_data(zend_op_array *op EG(current_execute_data)->call->called_scope, EG(current_execute_data)->call->object, NULL TSRMLS_CC); - execute_data->num_args = num_args; + EX(num_args) = num_args; /* copy arguments */ if (num_args > 0) { diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 1cdc5d30210..b865c5aa4d4 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2625,7 +2625,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) call->opline = NULL; call->call = NULL; - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { @@ -2697,7 +2697,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) EX(call) = call->prev_nested_call; zend_vm_stack_free_call_frame(call TSRMLS_CC); } else { - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; i_init_execute_data(call, &fbc->op_array, return_value, VM_FRAME_NESTED_FUNCTION TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { @@ -2722,7 +2722,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) if (EXPECTED(call->object != NULL)) { call->opline = NULL; call->call = NULL; - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; EG(current_execute_data) = call; call->object->handlers->call_method(fbc->common.function_name, call->object, call->num_args, EX_VAR(opline->result.var) TSRMLS_CC); EG(current_execute_data) = call->prev_execute_data; @@ -3539,14 +3539,14 @@ ZEND_VM_HANDLER(110, ZEND_CLONE, CONST|TMP|VAR|UNUSED|CV, ANY) if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -3985,11 +3985,11 @@ ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMP|VAR|CV, ANY) EX(call) = zend_vm_stack_push_call_frame( (zend_function*)new_op_array, 0, 0, EX(called_scope), Z_OBJ(EG(This)), EX(call) TSRMLS_CC); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - EX(call)->prev_execute_data = EG(current_execute_data); + EX(call)->prev_execute_data = execute_data; i_init_execute_data(EX(call), new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); @@ -4827,7 +4827,7 @@ ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY) ZEND_VM_HANDLER(142, ZEND_RAISE_ABSTRACT_ERROR, ANY, ANY) { SAVE_OPLINE(); - zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EG(scope)->name->val, EX(func)->op_array.function_name->val); + zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EX(scope)->name->val, EX(func)->op_array.function_name->val); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } @@ -5345,7 +5345,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) if (closure_is_static || closure_is_being_defined_inside_static_context) { zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(called_scope), NULL TSRMLS_CC); } else { - zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EG(scope), Z_OBJ(EG(This)) ? &EG(This) : NULL TSRMLS_CC); + zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(scope), Z_OBJ(EG(This)) ? &EG(This) : NULL TSRMLS_CC); } CHECK_EXCEPTION(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 28804bf542a..9c178933a64 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -572,7 +572,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) call->opline = NULL; call->call = NULL; - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) { @@ -644,7 +644,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) EX(call) = call->prev_nested_call; zend_vm_stack_free_call_frame(call TSRMLS_CC); } else { - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; i_init_execute_data(call, &fbc->op_array, return_value, VM_FRAME_NESTED_FUNCTION TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { @@ -669,7 +669,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (EXPECTED(call->object != NULL)) { call->opline = NULL; call->call = NULL; - call->prev_execute_data = EG(current_execute_data); + call->prev_execute_data = execute_data; EG(current_execute_data) = call; call->object->handlers->call_method(fbc->common.function_name, call->object, call->num_args, EX_VAR(opline->result.var) TSRMLS_CC); EG(current_execute_data) = call->prev_execute_data; @@ -1054,7 +1054,7 @@ static int ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_AR static int ZEND_FASTCALL ZEND_RAISE_ABSTRACT_ERROR_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { SAVE_OPLINE(); - zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EG(scope)->name->val, EX(func)->op_array.function_name->val); + zend_error_noreturn(E_ERROR, "Cannot call abstract method %s::%s()", EX(scope)->name->val, EX(func)->op_array.function_name->val); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } @@ -2694,14 +2694,14 @@ static int ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -2920,11 +2920,11 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HA EX(call) = zend_vm_stack_push_call_frame( (zend_function*)new_op_array, 0, 0, EX(called_scope), Z_OBJ(EG(This)), EX(call) TSRMLS_CC); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - EX(call)->prev_execute_data = EG(current_execute_data); + EX(call)->prev_execute_data = execute_data; i_init_execute_data(EX(call), new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); @@ -6593,7 +6593,7 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER if (closure_is_static || closure_is_being_defined_inside_static_context) { zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(called_scope), NULL TSRMLS_CC); } else { - zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EG(scope), Z_OBJ(EG(This)) ? &EG(This) : NULL TSRMLS_CC); + zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(scope), Z_OBJ(EG(This)) ? &EG(This) : NULL TSRMLS_CC); } CHECK_EXCEPTION(); @@ -7884,14 +7884,14 @@ static int ZEND_FASTCALL ZEND_CLONE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -8111,11 +8111,11 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMP_HANDLER(ZEND_OPCODE_HAND EX(call) = zend_vm_stack_push_call_frame( (zend_function*)new_op_array, 0, 0, EX(called_scope), Z_OBJ(EG(This)), EX(call) TSRMLS_CC); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - EX(call)->prev_execute_data = EG(current_execute_data); + EX(call)->prev_execute_data = execute_data; i_init_execute_data(EX(call), new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); @@ -13141,14 +13141,14 @@ static int ZEND_FASTCALL ZEND_CLONE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -13369,11 +13369,11 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_VAR_HANDLER(ZEND_OPCODE_HAND EX(call) = zend_vm_stack_push_call_frame( (zend_function*)new_op_array, 0, 0, EX(called_scope), Z_OBJ(EG(This)), EX(call) TSRMLS_CC); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - EX(call)->prev_execute_data = EG(current_execute_data); + EX(call)->prev_execute_data = execute_data; i_init_execute_data(EX(call), new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); @@ -23802,14 +23802,14 @@ static int ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARG if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -30273,14 +30273,14 @@ static int ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ - if (UNEXPECTED(ce != EG(scope))) { - zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(ce != EX(scope))) { + zend_error_noreturn(E_ERROR, "Call to private %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ - if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EG(scope)))) { - zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EG(scope) ? EG(scope)->name->val : ""); + if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), EX(scope)))) { + zend_error_noreturn(E_ERROR, "Call to protected %s::__clone() from context '%s'", ce->name->val, EX(scope) ? EX(scope)->name->val : ""); } } } @@ -30499,11 +30499,11 @@ static int ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDL EX(call) = zend_vm_stack_push_call_frame( (zend_function*)new_op_array, 0, 0, EX(called_scope), Z_OBJ(EG(This)), EX(call) TSRMLS_CC); - if (!EG(active_symbol_table)) { + if (!EX(symbol_table)) { zend_rebuild_symbol_table(TSRMLS_C); } - EX(call)->prev_execute_data = EG(current_execute_data); + EX(call)->prev_execute_data = execute_data; i_init_execute_data(EX(call), new_op_array, return_value, VM_FRAME_NESTED_CODE TSRMLS_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER();