]> granicus.if.org Git - php/commitdiff
Make EG(This) and EG(scope) available to internal methods
authorZeev Suraski <zeev@php.net>
Sun, 16 Feb 2003 19:10:27 +0000 (19:10 +0000)
committerZeev Suraski <zeev@php.net>
Sun, 16 Feb 2003 19:10:27 +0000 (19:10 +0000)
Zend/zend_execute.c

index de4828adad0801b139f4654005f8a56d3d82232e..8c94d0b1dbeba31a0325ce74bb66bdff33b50aff 100644 (file)
@@ -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) {