]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use temporary variables when accessing a property
authorLuca Bruno <lucabru@src.gnome.org>
Fri, 17 Jun 2011 11:50:14 +0000 (13:50 +0200)
committerLuca Bruno <lucabru@src.gnome.org>
Wed, 6 Jul 2011 20:32:29 +0000 (22:32 +0200)
codegen/valaccodememberaccessmodule.vala

index f3ea02eb19ac352539db904d01766d25d2e9ce55..2e3d4b3c6347a00f5b7dfd883c359119914eaf62 100644 (file)
@@ -185,7 +185,6 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (vcast, "get_%s".printf (prop.name)));
                                        ccall.add_argument (get_cvalue (expr.inner));
                                        set_cvalue (expr, ccall);
-                                       return;
                                } else if (prop.base_interface_property != null) {
                                        var base_iface = (Interface) prop.base_interface_property.parent_symbol;
                                        string parent_iface_var = "%s_%s_parent_iface".printf (current_class.get_lower_case_cname (null), base_iface.get_lower_case_cname (null));
@@ -193,11 +192,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        var ccall = new CCodeFunctionCall (new CCodeMemberAccess.pointer (new CCodeIdentifier (parent_iface_var), "get_%s".printf (prop.name)));
                                        ccall.add_argument (get_cvalue (expr.inner));
                                        set_cvalue (expr, ccall);
-                                       return;
                                }
-                       }
-
-                       if (prop.binding == MemberBinding.INSTANCE &&
+                       } else if (prop.binding == MemberBinding.INSTANCE &&
                            prop.get_accessor.automatic_body &&
                            current_type_symbol == prop.parent_symbol &&
                            current_type_symbol is Class &&
@@ -305,6 +301,8 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                ccode.add_expression (ccall);
                                set_cvalue (expr, ctemp);
                        }
+                       expr.target_value.value_type = expr.value_type;
+                       expr.target_value = store_temp_value (expr.target_value, expr);
                } else if (expr.symbol_reference is LocalVariable) {
                        var local = (LocalVariable) expr.symbol_reference;
                        if (expr.lvalue) {