Hi, the following patch adds support for an "async" attribute to
vapigen. This can be used in metadata to fix up the binding of
asynchronous methods that don't end in _async like this:
diff --git a/vapi/packages/gio-2.0/gio-2.0.metadata
b/vapi/packages/gio-2.0/gio-2.0.metadata
index 1ca9522..e458e86 100644
--- a/vapi/packages/gio-2.0/gio-2.0.metadata
+++ b/vapi/packages/gio-2.0/gio-2.0.metadata
@@ -48,6 +48,7 @@ GFileMonitor::changed.other_file nullable="1"
g_file_monitor_directory hidden="1"
g_file_monitor_dir hidden="1"
g_file_monitor_file hidden="1"
+g_file_mount_enclosing_volume async="1"
g_file_move.progress_callback_data hidden="1"
g_file_new_for_commandline_arg transfer_ownership="1"
g_file_new_for_path transfer_ownership="1"
Or would it be better to make the parser recognize asynchronous
functions that don't end in _async?
regards
Philipp
diff --git a/vapigen/valagidlparser.vala b/vapigen/valagidlparser.vala
index 6cb068f..efa49dd 100644
--- a/vapigen/valagidlparser.vala
+++ b/vapigen/valagidlparser.vala
@@ -1148,7 +1148,13 @@ public class Vala.GIdlParser : CodeVisitor {
void handle_async_methods (ObjectTypeSymbol type_symbol) {
foreach (Method m in type_symbol.get_methods ()) {
if (m.coroutine) {
- var finish_method = type_symbol.scope.lookup
(m.name.substring (0, m.name.length - "_async".length) + "_finish") as Method;
+ string finish_method_base;
+ if (m.name.has_suffix ("_async")) {
+ finish_method_base = m.name.substring
(0, m.name.length - "_async".length);
+ } else {
+ finish_method_base = m.name;
+ }
+ var finish_method = type_symbol.scope.lookup
(finish_method_base + "_finish") as Method;
if (finish_method != null) {
m.return_type =
finish_method.return_type.copy ();
foreach (var param in
finish_method.get_parameters ()) {
@@ -1520,6 +1526,11 @@ public class Vala.GIdlParser : CodeVisitor {
}
} else if (nv[0] == "vfunc_name") {
m.vfunc_name = eval (nv[1]);
+ } else if (nv[0] == "async") {
+ if (eval (nv[1]) == "1") {
+ // force async function, even
if it doesn't end in _async
+ m.coroutine = true;
+ }
}
}
}
@@ -1558,7 +1569,7 @@ public class Vala.GIdlParser : CodeVisitor {
}
}
- if (param.ty...@interface == "GAsyncReadyCallback" &&
symbol.has_suffix ("_async")) {
+ if (param.ty...@interface == "GAsyncReadyCallback" &&
(symbol.has_suffix ("_async") || m.coroutine)) {
// async method
m.coroutine = true;
continue;
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list