]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix lvalue access to fields
authorLuca Bruno <lucabru@src.gnome.org>
Wed, 16 Mar 2011 14:25:36 +0000 (15:25 +0100)
committerLuca Bruno <lucabru@src.gnome.org>
Fri, 8 Apr 2011 18:45:07 +0000 (20:45 +0200)
codegen/valaccodememberaccessmodule.vala
tests/delegates/delegates.vala

index 7c14732fa4a3f4d9ac27d4d0588464481f2465ab..2fb81fb503963ce96ef8a71dbb82c1d63ca39cac 100644 (file)
@@ -121,7 +121,11 @@ 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 != null ? expr.inner.target_value : null);
+                       if (expr.lvalue) {
+                               expr.target_value = get_field_cvalue (field, expr.inner != null ? expr.inner.target_value : null);
+                       } else {
+                               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;
 
index e80fd3fe83f73a7b33791896289d51ca84416771..50024198c5afa244fd9c4ddf352155401fcb9b44 100644 (file)
@@ -22,6 +22,8 @@ interface Maman.Foo : Object {
 class Maman.Bar : Object, Foo {
        const DelegateStruct const_delegate_struct = { do_void_action };
 
+       InstanceCallback callback_field;
+
        public Bar () {
        }
 
@@ -68,6 +70,10 @@ class Maman.Bar : Object, Foo {
                call_instance_delegate (bar.foo_method);
        }
 
+       void test_field_reference_transfer () {
+               var foo = (owned) callback_field;
+       }
+
        public static int main () {
                stdout.printf ("Delegate Test: 1");