From: Jürg Billeter Date: Tue, 21 Dec 2010 17:37:14 +0000 (+0100) Subject: codegen: Use separate C statements for D-Bus object registration X-Git-Tag: 0.11.3~38 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=13d8390153e817437e28c78956d1f6aa8d734853;p=thirdparty%2Fvala.git codegen: Use separate C statements for D-Bus object registration --- diff --git a/codegen/valadbusservermodule.vala b/codegen/valadbusservermodule.vala index cb95b9b08..d9acbd421 100644 --- a/codegen/valadbusservermodule.vala +++ b/codegen/valadbusservermodule.vala @@ -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) { diff --git a/codegen/valagdbusclientmodule.vala b/codegen/valagdbusclientmodule.vala index 4b945f3f7..f81320f65 100644 --- a/codegen/valagdbusclientmodule.vala +++ b/codegen/valagdbusclientmodule.vala @@ -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) { diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala index 688b2d7e3..096539d84 100644 --- a/codegen/valagdbusservermodule.vala +++ b/codegen/valagdbusservermodule.vala @@ -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) {