]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Generate async ready functions only if needed
authorJürg Billeter <j@bitron.ch>
Tue, 21 Dec 2010 20:24:13 +0000 (21:24 +0100)
committerJürg Billeter <j@bitron.ch>
Tue, 21 Dec 2010 20:24:13 +0000 (21:24 +0100)
codegen/valaccodebasemodule.vala
codegen/valaccodemethodcallmodule.vala
codegen/valagasyncmodule.vala
codegen/valagdbusclientmodule.vala

index bc7af35b5df0c22867388d694ba7d45e092f9a3f..d6592e93905a61d4c8a1bddc4696241b76e88cfc 100644 (file)
@@ -5910,6 +5910,10 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
        public virtual void add_simple_check (CodeNode node, bool always_fails = false) {
        }
 
+       public virtual string generate_ready_function (Method m) {
+               return "";
+       }
+
        public CCodeExpression? get_cvalue (Expression expr) {
                if (expr.target_value == null) {
                        return null;
index 0ba0e4eeb0966a9f6f5d82fc70f3c8e986312bdf..f1ec0d859fe55c078af5bea41396081b8df18cdd 100644 (file)
@@ -580,7 +580,7 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                if (m != null && m.coroutine) {
                        if (expr.is_yield_expression) {
                                // asynchronous call
-                               in_arg_map.set (get_param_pos (-1), new CCodeIdentifier (current_method.get_cname () + "_ready"));
+                               in_arg_map.set (get_param_pos (-1), new CCodeIdentifier (generate_ready_function (current_method)));
                                in_arg_map.set (get_param_pos (-0.9), new CCodeIdentifier ("data"));
                        }
                }
index 816cb38518b07eb89f32e88fd2c763eb9c61d2e5..783cd143e39c5ae921d33a761b9c2412d9508401 100644 (file)
@@ -360,7 +360,6 @@ public class Vala.GAsyncModule : GSignalModule {
                                append_function (generate_free_function (m));
                                generate_async_function (m);
                                generate_finish_function (m);
-                               append_function (generate_ready_function (m));
 
                                // append the _co function
                                base.visit_method (m);
@@ -483,12 +482,18 @@ public class Vala.GAsyncModule : GSignalModule {
                pop_context ();
        }
 
-       CCodeFunction generate_ready_function (Method m) {
+       public override string generate_ready_function (Method m) {
                // generate ready callback handler
+
                var dataname = Symbol.lower_case_to_camel_case (m.get_cname ()) + "Data";
 
                var readyfunc = new CCodeFunction (m.get_cname () + "_ready", "void");
 
+               if (!add_wrapper (readyfunc.name)) {
+                       // wrapper already defined
+                       return readyfunc.name;
+               }
+
                readyfunc.add_parameter (new CCodeParameter ("source_object", "GObject*"));
                readyfunc.add_parameter (new CCodeParameter ("_res_", "GAsyncResult*"));
                readyfunc.add_parameter (new CCodeParameter ("_user_data_", "gpointer"));
@@ -510,7 +515,9 @@ public class Vala.GAsyncModule : GSignalModule {
 
                readyfunc.block = readyblock;
 
-               return readyfunc;
+               append_function (readyfunc);
+
+               return readyfunc.name;
        }
 
        public override void generate_virtual_method_declaration (Method m, CCodeFile decl_space, CCodeStruct type_struct) {
index f81320f65857487f3088c5422a559954b0be47e1..e1be9ba439948b471668001708388fa4d03dc859 100644 (file)
@@ -254,7 +254,7 @@ public class Vala.GDBusClientModule : GDBusModule {
                if (bus_get_proxy_async || conn_get_proxy_async) {
                        if (expr.is_yield_expression) {
                                // asynchronous call
-                               ccall.add_argument (new CCodeIdentifier (current_method.get_cname () + "_ready"));
+                               ccall.add_argument (new CCodeIdentifier (generate_ready_function (current_method)));
                                ccall.add_argument (new CCodeIdentifier ("data"));
                        }
                } else {