[Kde-bindings] KDE/kdebindings/php/phpqt/src

Thomas Moenicke tm at php-qt.org
Thu Jul 24 09:37:11 UTC 2008


SVN commit 837222 by moenicke:

* freeing a temp. variable in the static-method-call opcode handler, which is used for lowercasing the method name and finding the corresponding Qt method

CCMAIL: kde-bindings at kde.org



 M  +30 -39    zend_handlers.cpp  


--- trunk/KDE/kdebindings/php/phpqt/src/zend_handlers.cpp #837221:837222
@@ -143,49 +143,40 @@
 int
 ZendHandlers::constantMethodHandler(ZEND_OPCODE_HANDLER_ARGS)
 {
-	zend_op *opline = EX(opline);
-	zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry;
-	union _zend_function *fbc;
-	zval* function_name;
-	char* function_name_strval;
-	int function_name_strlen;
+    zend_op *opline = EX(opline);
+    zend_class_entry *ce = EX_T(opline->op1.u.var).class_entry;
+    union _zend_function *fbc;
+    zval* function_name;
+    char* function_name_strval;
+    int function_name_strlen;
 
-	function_name = &opline->op2.u.constant;
-	Context::setActiveCe( EX_T(opline->op1.u.var).class_entry );
+    function_name = &opline->op2.u.constant;
 
-	if (Z_TYPE_P(function_name) != IS_STRING) {
-		php_error(E_ERROR, "Function name must be a string");
-	}
+    if (Z_TYPE_P(function_name) != IS_STRING)
+        php_error(E_ERROR, "Function name must be a string");
 
-	// get method name
-  	function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
- 	function_name_strlen = function_name->value.str.len;
+    // get method name
+    function_name_strval = zend_str_tolower_dup(function_name->value.str.val, function_name->value.str.len);
+    function_name_strlen = function_name->value.str.len;
 
-	// call proxyMethod if method is not defined in userspace
-	if(zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void**) &fbc) == FAILURE)
-	{
-		zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
-		zend_bool is_const = (IS_CONST == IS_CONST);
+    // call proxyMethod if method is not defined in userspace
+    if(zend_hash_find(&ce->function_table, function_name_strval, function_name_strlen+1, (void**) &fbc) == FAILURE)
+    {
+        zend_ptr_stack_3_push(&EG(arg_types_stack), EX(fbc), EX(object), NULL);
 
-		if(zend_hash_find(&ce->function_table, "staticproxymethod", 18, (void**) &fbc) != FAILURE)
-		{
-
-			//! TODO	darn! we have a lowersized string here!
-			Context::setMethodName( PQ::findRealMethodName( function_name->value.str.val ) );
-			EX(fbc) = fbc;
-
-			if(!is_const){ efree(function_name_strval); }
-			EX(opline)++;
-			ZEND_VM_CONTINUE();
-
-		}
-
-		if(!is_const){ efree(function_name_strval); }
-
-	}  // end try call proxyMethod
-
-  	return originalConstantMethodHandler(execute_data);
-
+        if(zend_hash_find(&ce->function_table, "staticproxymethod", 18, (void**) &fbc) != FAILURE)
+        {
+            Context::setActiveCe( EX_T(opline->op1.u.var).class_entry );
+            //! TODO we might have a lowersized string here
+            Context::setMethodName( PQ::findRealMethodName( function_name->value.str.val ) );
+            EX(fbc) = fbc;
+            efree(function_name_strval);
+            EX(opline)++;
+            ZEND_VM_CONTINUE(); // expands to return 0
+        }
+    }  // end try call proxyMethod
+    efree(function_name_strval);
+    return originalConstantMethodHandler(execute_data);
 }
 
 /*!
@@ -233,7 +224,7 @@
 	for(int i = 20; i <= 25; i++){
 	    phpqt_opcode_handlers[(ZEND_CLONE*25) + i] = cloneHandler;
 	}
-	
+
 	// ZEND_FETCH_CONSTANT = 99 => 2475, line 29050 in 5.2.4
 	phpqt_opcode_handlers[(ZEND_FETCH_CONSTANT*25) + 0] = constantHandler;
 	// replace and store ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_HANDLER, 29400



More information about the Kde-bindings mailing list