From: Luca Bruno Date: Sun, 31 Jul 2011 10:35:33 +0000 (+0200) Subject: codegen: Make creation of InitiallyUnowned objects be effect-free X-Git-Tag: 0.13.2~92 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fa4bd4b947a34b2553e6a4e1dfe32fdc5cff5379;p=thirdparty%2Fvala.git codegen: Make creation of InitiallyUnowned objects be effect-free --- diff --git a/codegen/valagobjectmodule.vala b/codegen/valagobjectmodule.vala index 8fe42c02c..08db5cff6 100644 --- a/codegen/valagobjectmodule.vala +++ b/codegen/valagobjectmodule.vala @@ -731,16 +731,13 @@ public class Vala.GObjectModule : GTypeModule { // runtime check to ref_sink the instance if it's a floating type base.visit_method_call (expr); - var temp_var = get_temp_variable (expr.value_type, false, expr, false); - emit_temp_var (temp_var); - ccode.add_assignment (get_variable_cexpression (temp_var.name), get_cvalue (expr)); - var initiallyunowned_ccall = new CCodeFunctionCall (new CCodeIdentifier ("G_IS_INITIALLY_UNOWNED")); - initiallyunowned_ccall.add_argument (get_variable_cexpression (temp_var.name)); + initiallyunowned_ccall.add_argument (get_cvalue (expr)); var sink_ref_ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_object_ref_sink")); - sink_ref_ccall.add_argument (get_variable_cexpression (temp_var.name)); + sink_ref_ccall.add_argument (get_cvalue (expr)); + var cexpr = new CCodeConditionalExpression (initiallyunowned_ccall, sink_ref_ccall, get_cvalue (expr)); - set_cvalue (expr, new CCodeConditionalExpression (initiallyunowned_ccall, sink_ref_ccall, get_variable_cexpression (temp_var.name))); + expr.target_value = store_temp_value (new GLibValue (expr.value_type, cexpr), expr); return; } else if (ma.symbol_reference == gobject_type) { // Object (...) chain up