summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2003-02-16 19:10:27 +0000
committerZeev Suraski <zeev@php.net>2003-02-16 19:10:27 +0000
commitf079bb65ff65e9ea35703add37f61279a5590c0c (patch)
tree39347df0fcdcfaf9d1b8c1aacfcbd800e73e9257
parent004947221e14b782697249ed7ece68ef2e040092 (diff)
downloadphp-git-f079bb65ff65e9ea35703add37f61279a5590c0c.tar.gz
Make EG(This) and EG(scope) available to internal methods
-rw-r--r--Zend/zend_execute.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c
index de4828adad..8c94d0b1db 100644
--- a/Zend/zend_execute.c
+++ b/Zend/zend_execute.c
@@ -2587,6 +2587,11 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
EX_T(EX(opline)->result.u.var).var.ptr_ptr = &EX_T(EX(opline)->result.u.var).var.ptr;
+ current_this = EG(This);
+ EG(This) = EX(object);
+ current_scope = EG(scope);
+ EG(scope) = EX(calling_scope);
+
if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
ALLOC_ZVAL(EX_T(EX(opline)->result.u.var).var.ptr);
INIT_ZVAL(*(EX_T(EX(opline)->result.u.var).var.ptr));
@@ -2607,11 +2612,6 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
} else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
HashTable *calling_symbol_table;
- current_this = EG(This);
- EG(This) = EX(object);
- current_scope = EG(scope);
- EG(scope) = EX(calling_scope);
-
EX_T(EX(opline)->result.u.var).var.ptr = NULL;
if (EG(symtable_cache_ptr)>=EG(symtable_cache)) {
/*printf("Cache hit! Reusing %x\n", symtable_cache[symtable_cache_ptr]);*/
@@ -2649,16 +2649,11 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
zend_hash_clean(*EG(symtable_cache_ptr));
}
EG(active_symbol_table) = calling_symbol_table;
- if (EG(This)) {
- zval_ptr_dtor(&EG(This));
- }
- EG(This) = current_this;
- EG(scope) = current_scope;
} else { /* ZEND_OVERLOADED_FUNCTION */
ALLOC_ZVAL(EX_T(EX(opline)->result.u.var).var.ptr);
INIT_ZVAL(*(EX_T(EX(opline)->result.u.var).var.ptr));
- /* Not sure what should be done here if it's a static method */
+ /* Not sure what should be done here if it's a static method */
if (EX(object)) {
Z_OBJ_HT_P(EX(object))->call_method(EX(fbc)->common.function_name, EX(opline)->extended_value, EX_T(EX(opline)->result.u.var).var.ptr, EX(object), return_value_used TSRMLS_CC);
} else {
@@ -2670,6 +2665,11 @@ int zend_do_fcall_common_helper(ZEND_OPCODE_HANDLER_ARGS)
zval_ptr_dtor(&EX_T(EX(opline)->result.u.var).var.ptr);
}
}
+ if (EG(This)) {
+ zval_ptr_dtor(&EG(This));
+ }
+ EG(This) = current_this;
+ EG(scope) = current_scope;
zend_ptr_stack_n_pop(&EG(arg_types_stack), 3, &EX(calling_scope), &EX(object), &EX(fbc));
if(EG(active_namespace) != active_namespace) {