vala r1060 - in trunk: . gobject



Author: rasa
Date: Thu Feb 28 09:04:31 2008
New Revision: 1060
URL: http://svn.gnome.org/viewvc/vala?rev=1060&view=rev

Log:
2008-02-28  Raffaele Sandrini  <raffaele sandrini ch>

	* gobject/valaccodegeneratormethod.vala: fix instance delegate handling
	  for virtual method wrappers


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodegeneratormethod.vala

Modified: trunk/gobject/valaccodegeneratormethod.vala
==============================================================================
--- trunk/gobject/valaccodegeneratormethod.vala	(original)
+++ trunk/gobject/valaccodegeneratormethod.vala	Thu Feb 28 09:04:31 2008
@@ -479,6 +479,16 @@
 
 				cparam_map.set (get_param_pos (param.cparameter_position), (CCodeFormalParameter) param.ccodenode);
 				carg_map.set (get_param_pos (param.cparameter_position), new CCodeIdentifier (param.name));
+
+				if (param.type_reference is DelegateType) {
+					var deleg_type = (DelegateType) param.type_reference;
+					var d = deleg_type.delegate_symbol;
+					if (d.instance) {
+						var cparam = new CCodeFormalParameter (get_delegate_target_cname (param.name), "void*");
+						cparam_map.set (get_param_pos (param.cdelegate_target_parameter_position), cparam);
+						carg_map.set (get_param_pos (param.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
+					}
+				}
 			}
 
 			// return array length if appropriate
@@ -490,6 +500,15 @@
 					cparam_map.set (get_param_pos (m.carray_length_parameter_position), cparam);
 					carg_map.set (get_param_pos (m.carray_length_parameter_position), new CCodeIdentifier (cparam.name));
 				}
+			} else if (creturn_type is DelegateType) {
+				// return delegate target if appropriate
+				var deleg_type = (DelegateType) creturn_type;
+				var d = deleg_type.delegate_symbol;
+				if (d.instance) {
+					var cparam = new CCodeFormalParameter (get_delegate_target_cname ("result"), "void*");
+					cparam_map.set (get_param_pos (m.cdelegate_target_parameter_position), cparam);
+					carg_map.set (get_param_pos (m.cdelegate_target_parameter_position), new CCodeIdentifier (cparam.name));
+				}
 			}
 
 			if (m.get_error_domains ().size > 0) {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]