]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use store_temp_value in visit_return_statement
authorLuca Bruno <lucabru@src.gnome.org>
Tue, 14 Jun 2011 09:20:44 +0000 (11:20 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Wed, 6 Jul 2011 20:34:20 +0000 (22:34 +0200)
codegen/valaccodebasemodule.vala

index 12361b696065c6400c90e1e31a68d660d613a4cc..ad127b90d87008b75e305feed4d4601bf0308183 100644 (file)
@@ -3257,15 +3257,12 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
                // return array length if appropriate
                if (((current_method != null && !current_method.no_array_length) || current_property_accessor != null) && current_return_type is ArrayType) {
-                       var return_expr_decl = get_temp_variable (current_return_type, true, stmt, false);
-
-                       ccode.add_assignment (get_variable_cexpression (return_expr_decl.name), get_cvalue (stmt.return_expression));
+                       var temp_value = store_temp_value (stmt.return_expression.target_value, stmt);
 
                        var array_type = (ArrayType) current_return_type;
-
                        for (int dim = 1; dim <= array_type.rank; dim++) {
                                var len_l = get_result_cexpression (get_array_length_cname ("result", dim));
-                               var len_r = get_array_length_cexpression (stmt.return_expression, dim);
+                               var len_r = get_array_length_cvalue (temp_value, dim);
                                if (!is_in_coroutine ()) {
                                        ccode.open_if (len_l);
                                        len_l = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, len_l);
@@ -3276,34 +3273,28 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                }
                        }
 
-                       set_cvalue (stmt.return_expression, get_variable_cexpression (return_expr_decl.name));
-
-                       emit_temp_var (return_expr_decl);
+                       stmt.return_expression.target_value = temp_value;
                } else if ((current_method != null || current_property_accessor != null) && current_return_type is DelegateType) {
                        var delegate_type = (DelegateType) current_return_type;
                        if (delegate_type.delegate_symbol.has_target) {
-                               var return_expr_decl = get_temp_variable (stmt.return_expression.value_type, true, stmt, false);
-
-                               ccode.add_assignment (get_variable_cexpression (return_expr_decl.name), get_cvalue (stmt.return_expression));
+                               var temp_value = store_temp_value (stmt.return_expression.target_value, stmt);
 
                                var target_l = get_result_cexpression (get_delegate_target_cname ("result"));
                                if (!is_in_coroutine ()) {
                                        target_l = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, target_l);
                                }
-                               CCodeExpression target_r_destroy_notify;
-                               var target_r = get_delegate_target_cexpression (stmt.return_expression, out target_r_destroy_notify);
+                               var target_r = get_delegate_target_cvalue (temp_value);
                                ccode.add_assignment (target_l, target_r);
                                if (delegate_type.value_owned) {
                                        var target_l_destroy_notify = get_result_cexpression (get_delegate_target_destroy_notify_cname ("result"));
                                        if (!is_in_coroutine ()) {
                                                target_l_destroy_notify = new CCodeUnaryExpression (CCodeUnaryOperator.POINTER_INDIRECTION, target_l_destroy_notify);
                                        }
+                                       var target_r_destroy_notify = get_delegate_target_destroy_notify_cvalue (temp_value);
                                        ccode.add_assignment (target_l_destroy_notify, target_r_destroy_notify);
                                }
 
-                               set_cvalue (stmt.return_expression, get_variable_cexpression (return_expr_decl.name));
-
-                               emit_temp_var (return_expr_decl);
+                               stmt.return_expression.target_value = temp_value;
                        }
                }