[vala] codegen: Fix lvalue access to fields



commit ad14bf8355f9f5cbc74cb7781a8d72257888f532
Author: Luca Bruno <lucabru src gnome org>
Date:   Wed Mar 16 15:25:36 2011 +0100

    codegen: Fix lvalue access to fields

 codegen/valaccodememberaccessmodule.vala |    6 +++++-
 tests/delegates/delegates.vala           |    6 ++++++
 2 files changed, 11 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 7c14732..2fb81fb 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -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;
 
diff --git a/tests/delegates/delegates.vala b/tests/delegates/delegates.vala
index e80fd3f..5002419 100644
--- a/tests/delegates/delegates.vala
+++ b/tests/delegates/delegates.vala
@@ -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");
 		



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]