cvs: ZendEngine2(PHP_5_3) / zend_vm_def.h zend_vm_execute.h

[email protected] ("Dmitry Stogov")
Newsgroups php.zend-engine.cvs
Message-ID <cvsdmitry1208772919@cvsserver>
dmitry		Mon Apr 21 10:15:19 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /ZendEngine2	zend_vm_def.h zend_vm_execute.h 
  Log:
  Optimized function call helper
dmitry-20080421101519.txt (text/plain, 9.4 KB)
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?r1=1.59.2.29.2.48.2.47&r2=1.59.2.29.2.48.2.48&diff_format=u
Index: ZendEngine2/zend_vm_def.h
diff -u ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.47 ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.48
--- ZendEngine2/zend_vm_def.h:1.59.2.29.2.48.2.47	Fri Apr 11 09:43:27 2008
+++ ZendEngine2/zend_vm_def.h	Mon Apr 21 10:14:20 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.47 2008/04/11 09:43:27 dmitry Exp $ */
+/* $Id: zend_vm_def.h,v 1.59.2.29.2.48.2.48 2008/04/21 10:14:20 dmitry Exp $ */
 
 /* If you change this file, please regenerate the zend_vm_execute.h and
  * zend_vm_opcodes.h files by running:
@@ -2122,10 +2122,9 @@
 	zend_ptr_stack_3_pop(&EG(arg_types_stack), (void*)&EX(called_scope), (void**)&ex_object, (void**)&EX(fbc));
 	EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
 
-	EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
-
 	if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
 		ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
+		EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 		EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 
 		if (EX(function_state).function->common.arg_info) {
@@ -2145,20 +2144,12 @@
 			zend_execute_internal(EXECUTE_DATA, RETURN_VALUE_USED(opline) TSRMLS_CC);
 		}
 
-/*	We shouldn't fix bad extensions here,
-    because it can break proper ones (Bug #34045)
-		if (!EX(function_state).function->common.return_reference) {
-			Z_UNSET_ISREF_P(EX_T(opline->result.u.var).var.ptr);
-			Z_SET_REFCOUNT_P(EX_T(opline->result.u.var).var.ptr, 1);
-		}
-*/
 		if (!RETURN_VALUE_USED(opline)) {
 			zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
 		}
 	} else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
 		zval **original_return_value = EG(return_value_ptr_ptr);
 
-		EX_T(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]);*/
 			EG(active_symbol_table) = *(EG(symtable_cache_ptr)--);
@@ -2167,18 +2158,18 @@
 			zend_hash_init(EG(active_symbol_table), 0, NULL, ZVAL_PTR_DTOR, 0);
 			/*printf("Cache miss!  Initialized %x\n", EG(active_symbol_table));*/
 		}
-		EG(return_value_ptr_ptr) = RETURN_VALUE_USED(opline) ? &EX_T(opline->result.u.var).var.ptr : NULL;
-		EG(active_op_array) = (zend_op_array *) EX(function_state).function;
 
-		zend_execute(EG(active_op_array) TSRMLS_CC);
-		EX_T(opline->result.u.var).var.fcall_returned_reference = EG(active_op_array)->return_reference;
-
-		if (RETURN_VALUE_USED(opline)) {
-			if (!EX_T(opline->result.u.var).var.ptr && !EG(exception)) {
-				ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
-			}
+		EG(active_op_array) = &EX(function_state).function->op_array;
+		EG(return_value_ptr_ptr) = NULL;
+		if (RETURN_VALUE_USED(opline)) {			
+			EG(return_value_ptr_ptr) = &EX_T(opline->result.u.var).var.ptr;
+			EX_T(opline->result.u.var).var.ptr = NULL;
+			EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+			EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 		}
 
+		zend_execute(EG(active_op_array) TSRMLS_CC);
+
 		EG(opline_ptr) = &EX(opline);
 		EG(active_op_array) = EX(op_array);
 		EG(return_value_ptr_ptr)=original_return_value;
@@ -2213,35 +2204,33 @@
 			Z_UNSET_ISREF_P(EX_T(opline->result.u.var).var.ptr);
 			Z_SET_REFCOUNT_P(EX_T(opline->result.u.var).var.ptr, 1);
 			EX_T(opline->result.u.var).var.fcall_returned_reference = 0;
+			EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 		}
 	}
 
 	EX(function_state).function = (zend_function *) EX(op_array);
 	EX(function_state).arguments = NULL;
 
-	if (EG(This)) {
-		if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
-			if (IS_CTOR_USED(EX(called_scope))) {
-				Z_DELREF_P(EG(This));
-			}
-			if (Z_REFCOUNT_P(EG(This)) == 1) {
-				zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
+	if (should_change_scope) {
+		if (EG(This)) {
+			if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
+				if (IS_CTOR_USED(EX(called_scope))) {
+					Z_DELREF_P(EG(This));
+				}
+				if (Z_REFCOUNT_P(EG(This)) == 1) {
+					zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
+				}
 			}
-		}
-		if (should_change_scope) {
 			zval_ptr_dtor(&EG(This));
 		}
-	}
-
-	EX(object) = ex_object;
-	EX(called_scope) = DECODE_CTOR(EX(called_scope));
-
-	if (should_change_scope) {
 		EG(This) = current_this;
 		EG(scope) = current_scope;
 		EG(called_scope) = current_called_scope;
 	}
 
+	EX(object) = ex_object;
+	EX(called_scope) = DECODE_CTOR(EX(called_scope));
+
 	zend_vm_stack_clear_multiple(TSRMLS_C);
 
 	if (EG(exception)) {
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_execute.h?r1=1.62.2.30.2.49.2.46&r2=1.62.2.30.2.49.2.47&diff_format=u
Index: ZendEngine2/zend_vm_execute.h
diff -u ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.46 ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.47
--- ZendEngine2/zend_vm_execute.h:1.62.2.30.2.49.2.46	Fri Apr 11 09:43:28 2008
+++ ZendEngine2/zend_vm_execute.h	Mon Apr 21 10:14:20 2008
@@ -169,10 +169,9 @@
 	zend_ptr_stack_3_pop(&EG(arg_types_stack), (void*)&EX(called_scope), (void**)&ex_object, (void**)&EX(fbc));
 	EX(function_state).arguments = zend_vm_stack_push_args(opline->extended_value TSRMLS_CC);
 
-	EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
-
 	if (EX(function_state).function->type == ZEND_INTERNAL_FUNCTION) {
 		ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
+		EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 		EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 
 		if (EX(function_state).function->common.arg_info) {
@@ -192,20 +191,12 @@
 			zend_execute_internal(execute_data, RETURN_VALUE_USED(opline) TSRMLS_CC);
 		}
 
-/*	We shouldn't fix bad extensions here,
-    because it can break proper ones (Bug #34045)
-		if (!EX(function_state).function->common.return_reference) {
-			Z_UNSET_ISREF_P(EX_T(opline->result.u.var).var.ptr);
-			Z_SET_REFCOUNT_P(EX_T(opline->result.u.var).var.ptr, 1);
-		}
-*/
 		if (!RETURN_VALUE_USED(opline)) {
 			zval_ptr_dtor(&EX_T(opline->result.u.var).var.ptr);
 		}
 	} else if (EX(function_state).function->type == ZEND_USER_FUNCTION) {
 		zval **original_return_value = EG(return_value_ptr_ptr);
 
-		EX_T(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]);*/
 			EG(active_symbol_table) = *(EG(symtable_cache_ptr)--);
@@ -214,18 +205,18 @@
 			zend_hash_init(EG(active_symbol_table), 0, NULL, ZVAL_PTR_DTOR, 0);
 			/*printf("Cache miss!  Initialized %x\n", EG(active_symbol_table));*/
 		}
-		EG(return_value_ptr_ptr) = RETURN_VALUE_USED(opline) ? &EX_T(opline->result.u.var).var.ptr : NULL;
-		EG(active_op_array) = (zend_op_array *) EX(function_state).function;
-
-		zend_execute(EG(active_op_array) TSRMLS_CC);
-		EX_T(opline->result.u.var).var.fcall_returned_reference = EG(active_op_array)->return_reference;
 
+		EG(active_op_array) = &EX(function_state).function->op_array;
+		EG(return_value_ptr_ptr) = NULL;
 		if (RETURN_VALUE_USED(opline)) {
-			if (!EX_T(opline->result.u.var).var.ptr && !EG(exception)) {
-				ALLOC_INIT_ZVAL(EX_T(opline->result.u.var).var.ptr);
-			}
+			EG(return_value_ptr_ptr) = &EX_T(opline->result.u.var).var.ptr;
+			EX_T(opline->result.u.var).var.ptr = NULL;
+			EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
+			EX_T(opline->result.u.var).var.fcall_returned_reference = EX(function_state).function->common.return_reference;
 		}
 
+		zend_execute(EG(active_op_array) TSRMLS_CC);
+
 		EG(opline_ptr) = &EX(opline);
 		EG(active_op_array) = EX(op_array);
 		EG(return_value_ptr_ptr)=original_return_value;
@@ -260,35 +251,33 @@
 			Z_UNSET_ISREF_P(EX_T(opline->result.u.var).var.ptr);
 			Z_SET_REFCOUNT_P(EX_T(opline->result.u.var).var.ptr, 1);
 			EX_T(opline->result.u.var).var.fcall_returned_reference = 0;
+			EX_T(opline->result.u.var).var.ptr_ptr = &EX_T(opline->result.u.var).var.ptr;
 		}
 	}
 
 	EX(function_state).function = (zend_function *) EX(op_array);
 	EX(function_state).arguments = NULL;
 
-	if (EG(This)) {
-		if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
-			if (IS_CTOR_USED(EX(called_scope))) {
-				Z_DELREF_P(EG(This));
-			}
-			if (Z_REFCOUNT_P(EG(This)) == 1) {
-				zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
+	if (should_change_scope) {
+		if (EG(This)) {
+			if (EG(exception) && IS_CTOR_CALL(EX(called_scope))) {
+				if (IS_CTOR_USED(EX(called_scope))) {
+					Z_DELREF_P(EG(This));
+				}
+				if (Z_REFCOUNT_P(EG(This)) == 1) {
+					zend_object_store_ctor_failed(EG(This) TSRMLS_CC);
+				}
 			}
-		}
-		if (should_change_scope) {
 			zval_ptr_dtor(&EG(This));
 		}
-	}
-
-	EX(object) = ex_object;
-	EX(called_scope) = DECODE_CTOR(EX(called_scope));
-
-	if (should_change_scope) {
 		EG(This) = current_this;
 		EG(scope) = current_scope;
 		EG(called_scope) = current_called_scope;
 	}
 
+	EX(object) = ex_object;
+	EX(called_scope) = DECODE_CTOR(EX(called_scope));
+
 	zend_vm_stack_clear_multiple(TSRMLS_C);
 
 	if (EG(exception)) {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.