vala r2427 - in trunk: . gobject vala



Author: ryanl
Date: Wed Feb 11 01:02:37 2009
New Revision: 2427
URL: http://svn.gnome.org/viewvc/vala?rev=2427&view=rev

Log:
2009-02-11  Ryan Lortie  <desrt desrt ca>

        Bug 571256 â [CCode (async_only = true)] formal parameter annotation

        * vala/valacodewriter.vala:
        * vala/valaformalparameter.vala:
        * gobject/valaccodemethodcallmodule.vala:

        Allow emitting some C code arguments only in the case that we are
        calling the asynchronous version of a yielding function.  This helps
        with the io_priority oddity in GIO.



Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodemethodcallmodule.vala
   trunk/vala/valacodewriter.vala
   trunk/vala/valaformalparameter.vala

Modified: trunk/gobject/valaccodemethodcallmodule.vala
==============================================================================
--- trunk/gobject/valaccodemethodcallmodule.vala	(original)
+++ trunk/gobject/valaccodemethodcallmodule.vala	Wed Feb 11 01:02:37 2009
@@ -212,6 +212,25 @@
 				var param = params_it.get ();
 				ellipsis = param.params_array || param.ellipsis;
 				if (!ellipsis) {
+					if (param.async_only &&
+                                          /* only skip if we are in a sync function (or property handler) */
+                                            (current_method == null || !current_method.coroutine) &&
+                                          /* and not manually starting async */
+					    (ma == null || ma.member_name != "begin")) {
+						/* [CCode (async_only = true)] and we're making a
+						 * synchronous version of the call.  Emit the arg
+						 * at the start of a comma expression so that we
+						 * get any side effects but otherwise ignore the
+						 * value.
+						 */
+						var comma = new CCodeCommaExpression ();
+						comma.append_expression ((CCodeExpression) arg.ccodenode);
+						comma.append_expression (ccall_expr);
+						ccall_expr = comma;
+
+						continue;
+					}
+
 					// if the vala argument expands to multiple C arguments,
 					// we have to make sure that the C arguments don't depend
 					// on each other as there is no guaranteed argument

Modified: trunk/vala/valacodewriter.vala
==============================================================================
--- trunk/vala/valacodewriter.vala	(original)
+++ trunk/vala/valacodewriter.vala	Wed Feb 11 01:02:37 2009
@@ -726,6 +726,10 @@
 				ccode_params.append_printf ("%sdelegate_target_pos = %g", separator, param.cdelegate_target_parameter_position);
 				separator = ", ";
 			}
+			if (param.async_only) {
+				ccode_params.append_printf ("%sasync_only = true", separator);
+				separator = ", ";
+			}
 
 			if (ccode_params.len > 0) {
 				write_string ("[CCode (%s)] ".printf (ccode_params.str));

Modified: trunk/vala/valaformalparameter.vala
==============================================================================
--- trunk/vala/valaformalparameter.vala	(original)
+++ trunk/vala/valaformalparameter.vala	Wed Feb 11 01:02:37 2009
@@ -89,6 +89,12 @@
 	public double cdelegate_target_parameter_position { get; set; }
 
 	/**
+	 * Specifies that the argument should only be emitted for async
+	 * calls (ie: from yielding functions).
+	 */
+	public bool async_only { get; set; }
+
+	/**
 	 * Specifies the type of the parameter in the C function.
 	 */
 	public string? ctype { get; set; }
@@ -157,6 +163,9 @@
 		if (a.has_argument ("delegate_target_pos")) {
 			cdelegate_target_parameter_position = a.get_double ("delegate_target_pos");
 		}
+		if (a.has_argument ("async_only")) {
+			async_only = a.get_bool ("async_only");
+		}
 	}
 
 	/**



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