]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Drop unnecessary temp variable when methods return a struct
authorLuca Bruno <lucabru@src.gnome.org>
Fri, 26 Aug 2011 20:44:27 +0000 (22:44 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Fri, 26 Aug 2011 20:47:08 +0000 (22:47 +0200)
codegen/valaccodemethodcallmodule.vala

index 7d92d72edb19c917f1fce633fa08c3d9523e23b4..d9ae9a626a0cf548d4c5eb612b52c86ac25c89e0 100644 (file)
@@ -747,13 +747,18 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
                                }
                        }
 
-                       var temp_var = get_temp_variable (result_type, result_type.value_owned);
-                       var temp_ref = get_variable_cexpression (temp_var.name);
+                       if (!return_result_via_out_param) {
+                               var temp_var = get_temp_variable (result_type, result_type.value_owned);
+                               var temp_ref = get_variable_cexpression (temp_var.name);
 
-                       emit_temp_var (temp_var);
+                               emit_temp_var (temp_var);
 
-                       ccode.add_assignment (temp_ref, ccall_expr);
-                       set_cvalue (expr, temp_ref);
+                               ccode.add_assignment (temp_ref, ccall_expr);
+                               set_cvalue (expr, temp_ref);
+                       } else {
+                               set_cvalue (expr, ccall_expr);
+                       }
+                       ((GLibValue) expr.target_value).lvalue = true;
                }
 
                params_it = params.iterator ();