vala r2427 - in trunk: . gobject vala
- From: ryanl svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2427 - in trunk: . gobject vala
- Date: Wed, 11 Feb 2009 01:02:37 +0000 (UTC)
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]