]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use separate C statements for D-Bus object registration
authorJürg Billeter <j@bitron.ch>
Tue, 21 Dec 2010 17:37:14 +0000 (18:37 +0100)
committerJürg Billeter <j@bitron.ch>
Tue, 21 Dec 2010 17:53:51 +0000 (18:53 +0100)
codegen/valadbusservermodule.vala
codegen/valagdbusclientmodule.vala
codegen/valagdbusservermodule.vala

index cb95b9b08034fed93bf87e455b2e875ba259ed6b..d9acbd421b377e38f92c9779edb25c4ad8cce5c9 100644 (file)
@@ -1664,7 +1664,8 @@ public class Vala.DBusServerModule : DBusClientModule {
                }
                cregister.add_argument (get_cvalue (path_arg));
                cregister.add_argument (get_cvalue (obj_arg));
-               set_cvalue (expr, cregister);
+
+               ccode.add_expression (cregister);
        }
 
        bool type_implements_dbus_interface (ObjectTypeSymbol sym) {
index 4b945f3f746c1a9a1f1635b1cb8880c5fa789ab9..f81320f65857487f3088c5422a559954b0be47e1 100644 (file)
@@ -300,7 +300,13 @@ public class Vala.GDBusClientModule : GDBusModule {
                        }
                }
 
-               set_cvalue (expr, ccall);
+               var temp_var = get_temp_variable (expr.value_type, expr.value_type.value_owned);
+               var temp_ref = get_variable_cexpression (temp_var.name);
+
+               emit_temp_var (temp_var);
+
+               ccode.add_expression (new CCodeAssignment (temp_ref, ccall));
+               set_cvalue (expr, temp_ref);
        }
 
        string generate_dbus_signal_handler (Signal sig, ObjectTypeSymbol sym) {
index 688b2d7e3b1c4c0a17d1c930a64bfa0a43a10bb3..096539d84edad01a309d48ba15727962711f3f49 100644 (file)
@@ -1139,7 +1139,18 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                cregister.add_argument (get_cvalue (ma.inner));
                cregister.add_argument (get_cvalue (path_arg));
                cregister.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression ("_inner_error_")));
-               set_cvalue (expr, cregister);
+
+               if (expr.parent_node is ExpressionStatement) {
+                       ccode.add_expression (cregister);
+               } else {
+                       var temp_var = get_temp_variable (expr.value_type, expr.value_type.value_owned);
+                       var temp_ref = get_variable_cexpression (temp_var.name);
+
+                       emit_temp_var (temp_var);
+
+                       ccode.add_expression (new CCodeAssignment (temp_ref, cregister));
+                       set_cvalue (expr, temp_ref);
+               }
        }
 
        public override void generate_class_declaration (Class cl, CCodeFile decl_space) {