]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Make creation of InitiallyUnowned objects be effect-free
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 31 Jul 2011 10:35:33 +0000 (12:35 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Mon, 1 Aug 2011 11:51:40 +0000 (13:51 +0200)
codegen/valagobjectmodule.vala

index 8fe42c02cb186033cdf2a6545c208798b0bb5b0b..08db5cff607aea43ef90f3a38cf7b30f47b44603 100644 (file)
@@ -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