[vala] codegen: Fix returning local variables



commit b4895d675fe6a955ae6323c39fa076f7c61279cf
Author: Luca Bruno <lucabru src gnome org>
Date:   Sun Jul 10 09:26:59 2011 +0200

    codegen: Fix returning local variables

 codegen/valaccodememberaccessmodule.vala |   20 +++++++++++++++-----
 1 files changed, 15 insertions(+), 5 deletions(-)
---
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index 12278d0..95a4389 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -277,11 +277,6 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 			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) {
-				expr.target_value = get_local_cvalue (local);
-			} else {
-				expr.target_value = load_local (local);
-			}
 
 			if (expr.parent_node is ReturnStatement &&
 			    current_return_type.value_owned &&
@@ -297,6 +292,21 @@ public abstract class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
 
 				// don't unref variable
 				local.active = false;
+
+				var glib_value = (GLibValue) get_local_cvalue (local);
+				expr.target_value = glib_value;
+				if (glib_value.delegate_target_cvalue == null) {
+					glib_value.delegate_target_cvalue = new CCodeConstant ("NULL");
+				}
+				if (glib_value.delegate_target_destroy_notify_cvalue == null) {
+					glib_value.delegate_target_destroy_notify_cvalue = new CCodeConstant ("NULL");
+				}
+			} else {
+				if (expr.lvalue) {
+					expr.target_value = get_local_cvalue (local);
+				} else {
+					expr.target_value = load_local (local);
+				}
 			}
 		} else if (expr.symbol_reference is Parameter) {
 			var param = (Parameter) expr.symbol_reference;



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