]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use create_temp_value and load_temp_value on property access
authorLuca Bruno <lucabru@src.gnome.org>
Fri, 8 Jul 2011 21:01:25 +0000 (23:01 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Fri, 8 Jul 2011 21:01:37 +0000 (23:01 +0200)
codegen/valaccodememberaccessmodule.vala

index e09bb2a93d29e2c77280647f887c59f3ce968a69..12278d0bf540faa535b50679ec29a14691bca4d8 100644 (file)
@@ -221,10 +221,9 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        ccall.add_argument (pub_inst);
                                }
 
-                               var temp_var = get_temp_variable (base_property.get_accessor.value_type, base_property.get_accessor.value_type.value_owned);
-                               emit_temp_var (temp_var);
-                               var ctemp = get_variable_cexpression (temp_var.name);
-                               set_cvalue (expr, ctemp);
+                               var temp_value = create_temp_value (base_property.get_accessor.value_type, false, expr);
+                               expr.target_value = load_temp_value (temp_value);
+                               var ctemp = get_cvalue_ (temp_value);
 
                                // Property access to real struct types is handled differently
                                // The value is returned by out parameter
@@ -237,21 +236,12 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        array_type = base_property.property_type as ArrayType;
                                        if (array_type != null && !base_property.no_array_length) {
                                                for (int dim = 1; dim <= array_type.rank; dim++) {
-                                                       temp_var = get_temp_variable (int_type);
-                                                       ctemp = get_variable_cexpression (temp_var.name);
-                                                       emit_temp_var (temp_var);
-                                                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));
-                                                       append_array_length (expr, ctemp);
+                                                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_array_length_cvalue (temp_value, dim)));
                                                }
                                        } else {
                                                delegate_type = base_property.property_type as DelegateType;
                                                if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
-                                                       temp_var = get_temp_variable (new PointerType (new VoidType ()), false, expr, false);
-                                                       ctemp = get_variable_cexpression (temp_var.name);
-                                                       emit_temp_var (temp_var);
-                                                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));
-                                                       set_delegate_target (expr, ctemp);
-                                                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
+                                                       ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_delegate_target_cvalue (temp_value)));
                                                }
                                        }
                                }