]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Use TargetValue instead of Expression for field instance
authorLuca Bruno <lucabru@src.gnome.org>
Sun, 6 Mar 2011 15:38:32 +0000 (16:38 +0100)
committerJürg Billeter <j@bitron.ch>
Thu, 10 Mar 2011 18:18:57 +0000 (19:18 +0100)
codegen/valaccodeassignmentmodule.vala
codegen/valaccodebasemodule.vala
codegen/valaccodememberaccessmodule.vala
codegen/valadovaassignmentmodule.vala
codegen/valadovamemberaccessmodule.vala
vala/valaassignment.vala
vala/valacodegenerator.vala

index 83552a6f99f60951976caca59093bf24ea96edc9..b22cbafb0a2692af27bda3ae96be6f3af0865ee1 100644 (file)
@@ -233,7 +233,7 @@ public class Vala.CCodeAssignmentModule : CCodeMemberAccessModule {
                store_variable (param, get_parameter_cvalue (param), value, false);
        }
 
-       public override void store_field (Field field, Expression? instance, TargetValue value) {
+       public override void store_field (Field field, TargetValue? instance, TargetValue value) {
                if (requires_destroy (field.variable_type)) {
                        /* unref old value */
                        ccode.add_expression (destroy_field (field, instance));
index 0522c03e4be1fa65b84152005488a27357e9659a..3a464c43da373fa3192cb9054a3deacaf40fdb12 100644 (file)
@@ -1012,7 +1012,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                        set_cvalue (this_access, new CCodeIdentifier ("self"));
                                }
 
-                               ccode.add_expression (destroy_field (f, this_access));
+                               ccode.add_expression (destroy_field (f, this_access.target_value));
 
                                pop_context ();
                        }
@@ -2981,7 +2981,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                return destroy_variable (param, get_parameter_cvalue (param));
        }
 
-       public CCodeExpression destroy_field (Field field, Expression? instance) {
+       public CCodeExpression destroy_field (Field field, TargetValue? instance) {
                return destroy_variable (field, get_field_cvalue (field, instance));
        }
 
@@ -3719,7 +3719,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
 
        public abstract TargetValue get_parameter_cvalue (Parameter param);
 
-       public abstract TargetValue get_field_cvalue (Field field, Expression? instance);
+       public abstract TargetValue get_field_cvalue (Field field, TargetValue? instance);
 
        public virtual string get_delegate_target_cname (string delegate_cname) {
                assert_not_reached ();
@@ -5760,7 +5760,7 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
                                        this_access.value_type = get_data_type_for_symbol ((TypeSymbol) f.parent_symbol);
                                        set_cvalue (this_access, new CCodeIdentifier ("(*self)"));
 
-                                       ccode.add_expression (destroy_field (f, this_access));
+                                       ccode.add_expression (destroy_field (f, this_access.target_value));
                                }
                        }
                }
index 7ddad75bdfa8b56f68e3240018aadc554f03df73..991319dc92b59d9c2ce3c8e397cba21a30c9d883 100644 (file)
@@ -121,7 +121,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        set_cvalue (expr, get_array_length_cexpression (expr.inner, 1));
                } else if (expr.symbol_reference is Field) {
                        var field = (Field) expr.symbol_reference;
-                       expr.target_value = load_field (field, expr.inner);
+                       expr.target_value = load_field (field, expr.inner != null ? expr.inner.target_value : null);
                } else if (expr.symbol_reference is EnumValue) {
                        var ev = (EnumValue) expr.symbol_reference;
 
@@ -492,7 +492,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
        }
 
        /* Returns lvalue access to the given field */
-       public override TargetValue get_field_cvalue (Field field, Expression? instance) {
+       public override TargetValue get_field_cvalue (Field field, TargetValue? instance) {
                var result = new GLibValue (field.variable_type.copy ());
 
                var array_type = field.variable_type as ArrayType;
@@ -501,7 +501,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        CCodeExpression pub_inst = null;
 
                        if (instance != null) {
-                               pub_inst = get_cvalue (instance);
+                               pub_inst = get_cvalue_ (instance);
                        }
 
                        var instance_target_type = get_data_type_for_symbol ((TypeSymbol) field.parent_symbol);
@@ -586,7 +586,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        } else {
                                // Accessing the field of an instance
                                var k = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT_GET_CLASS"));
-                               k.add_argument (get_cvalue (instance));
+                               k.add_argument (get_cvalue_ (instance));
                                klass = k;
                        }
                        cast.add_argument (klass);
@@ -679,7 +679,7 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
        }
 
        /* Returns unowned access to the given field */
-       public override TargetValue load_field (Field field, Expression? instance) {
+       public override TargetValue load_field (Field field, TargetValue? instance) {
                return load_variable (field, get_field_cvalue (field, instance));
        }
 }
index e2123144a44f9d6ecd7ccc9a6181134d1178e4f8..831baa683aaebdc07b26066ee43da3762c7df6e6 100644 (file)
@@ -149,7 +149,7 @@ public class Vala.DovaAssignmentModule : DovaMemberAccessModule {
                store_variable (param, get_parameter_cvalue (param), value, false);
        }
 
-       public override void store_field (Field field, Expression? instance, TargetValue value) {
+       public override void store_field (Field field, TargetValue? instance, TargetValue value) {
                store_variable (field, get_field_cvalue (field, instance), value, false);
        }
 }
index 8538db037b5920d98d5a78f86059dc3f724f2b00..20629fb88bcd6a0b774f7f8df0b3e3133ac9412a 100644 (file)
@@ -98,7 +98,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
                        set_cvalue (expr, ccall);
                } else if (expr.symbol_reference is Field) {
                        var f = (Field) expr.symbol_reference;
-                       expr.target_value = load_field (f, expr.inner);
+                       expr.target_value = load_field (f, expr.inner != null ? expr.inner.target_value : null);
                } else if (expr.symbol_reference is EnumValue) {
                        var ev = (EnumValue) expr.symbol_reference;
 
@@ -243,14 +243,14 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
                return result;
        }
 
-       public TargetValue get_field_cvalue (Field f, Expression? instance) {
+       public TargetValue get_field_cvalue (Field f, TargetValue? instance) {
                var result = new DovaValue (f.variable_type);
 
                if (f.binding == MemberBinding.INSTANCE) {
                        CCodeExpression pub_inst = null;
 
                        if (instance != null) {
-                               pub_inst = get_cvalue (instance);
+                               pub_inst = get_cvalue_ (instance);
                        }
 
                        var instance_target_type = get_data_type_for_symbol ((TypeSymbol) f.parent_symbol);
@@ -295,7 +295,7 @@ public abstract class Vala.DovaMemberAccessModule : DovaControlFlowModule {
                return load_variable (param, get_parameter_cvalue (param));
        }
 
-       public override TargetValue load_field (Field field, Expression? instance) {
+       public override TargetValue load_field (Field field, TargetValue? instance) {
                return load_variable (field, get_field_cvalue (field, instance));
        }
 }
index 7d34ce501e847095a787c28590c3d1e26deaef29..342dbb43a67c5e9dab39e1e3adf6007149004a35 100644 (file)
@@ -486,7 +486,7 @@ public class Vala.Assignment : Expression {
                                } else if (param != null) {
                                        codegen.store_parameter (param, new_value);
                                } else if (field != null) {
-                                       codegen.store_field (field, instance ? ma.inner : null, new_value);
+                                       codegen.store_field (field, instance && ma.inner != null ? ma.inner.target_value : null, new_value);
                                }
 
                                // when load_variable is changed to use temporary
@@ -497,7 +497,7 @@ public class Vala.Assignment : Expression {
                                } else if (param != null) {
                                        target_value = codegen.load_parameter (param);
                                } else if (field != null) {
-                                       target_value = codegen.load_field (field, instance ? ma.inner : null);
+                                       target_value = codegen.load_field (field, instance && ma.inner != null ? ma.inner.target_value : null);
                                }
 
                                codegen.visit_expression (this);
index a7680324c08512b5603cbb132de8ec09e7a52f9d..f76ea2013cf81d75a2d26ecdd37eece256bda89e 100644 (file)
@@ -42,7 +42,7 @@ public abstract class Vala.CodeGenerator : CodeVisitor {
 
        public abstract void store_parameter (Parameter param, TargetValue value);
 
-       public abstract TargetValue load_field (Field field, Expression? instance);
+       public abstract TargetValue load_field (Field field, TargetValue? instance);
 
-       public abstract void store_field (Field field, Expression? instance, TargetValue value);
+       public abstract void store_field (Field field, TargetValue? instance, TargetValue value);
 }