vala r2226 - in trunk: . gobject



Author: juergbi
Date: Fri Dec 19 18:11:28 2008
New Revision: 2226
URL: http://svn.gnome.org/viewvc/vala?rev=2226&view=rev

Log:
2008-12-19  JÃrg Billeter  <j bitron ch>

	* gobject/valaccodebasemodule.vala:
	* gobject/valaccodememberaccessmodule.vala:

	Fix disposing local variables in coroutines


Modified:
   trunk/ChangeLog
   trunk/gobject/valaccodebasemodule.vala
   trunk/gobject/valaccodememberaccessmodule.vala

Modified: trunk/gobject/valaccodebasemodule.vala
==============================================================================
--- trunk/gobject/valaccodebasemodule.vala	(original)
+++ trunk/gobject/valaccodebasemodule.vala	Fri Dec 19 18:11:28 2008
@@ -1345,7 +1345,7 @@
 			if (!local.floating && requires_destroy (local.variable_type)) {
 				var ma = new MemberAccess.simple (local.name);
 				ma.symbol_reference = local;
-				cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma)));
+				cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma)));
 			}
 		}
 
@@ -1355,7 +1355,7 @@
 				if (requires_destroy (param.parameter_type) && param.direction == ParameterDirection.IN) {
 					var ma = new MemberAccess.simple (param.name);
 					ma.symbol_reference = param;
-					cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (param.name)), param.parameter_type, ma)));
+					cblock.add_statement (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (param.name), param.parameter_type, ma)));
 				}
 			}
 		}
@@ -1383,6 +1383,14 @@
 		temp_vars.clear ();
 	}
 
+	public CCodeExpression get_variable_cexpression (string name) {
+		if (current_method != null && current_method.coroutine) {
+			return new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_variable_cname (name));
+		} else {
+			return new CCodeIdentifier (get_variable_cname (name));
+		}
+	}
+
 	public string get_variable_cname (string name) {
 		if (name[0] == '.') {
 			// compiler-internal variable
@@ -2011,7 +2019,7 @@
 			if (local.active && !local.floating && requires_destroy (local.variable_type)) {
 				var ma = new MemberAccess.simple (local.name);
 				ma.symbol_reference = local;
-				cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma)));
+				cfrag.append (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma)));
 			}
 		}
 		
@@ -2035,7 +2043,7 @@
 			if (requires_destroy (param.parameter_type) && param.direction == ParameterDirection.IN) {
 				var ma = new MemberAccess.simple (param.name);
 				ma.symbol_reference = param;
-				cfrag.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier (get_variable_cname (param.name)), param.parameter_type, ma)));
+				cfrag.append (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression (param.name), param.parameter_type, ma)));
 			}
 		}
 	}
@@ -2060,7 +2068,7 @@
 				found = true;
 				var ma = new MemberAccess.simple (local.name);
 				ma.symbol_reference = local;
-				ccomma.append_expression (get_unref_expression (new CCodeIdentifier (get_variable_cname (local.name)), local.variable_type, ma));
+				ccomma.append_expression (get_unref_expression (get_variable_cexpression (local.name), local.variable_type, ma));
 			}
 		}
 		
@@ -2081,7 +2089,7 @@
 				found = true;
 				var ma = new MemberAccess.simple (param.name);
 				ma.symbol_reference = param;
-				ccomma.append_expression (get_unref_expression (new CCodeIdentifier (get_variable_cname (param.name)), param.parameter_type, ma));
+				ccomma.append_expression (get_unref_expression (get_variable_cexpression (param.name), param.parameter_type, ma));
 			}
 		}
 

Modified: trunk/gobject/valaccodememberaccessmodule.vala
==============================================================================
--- trunk/gobject/valaccodememberaccessmodule.vala	(original)
+++ trunk/gobject/valaccodememberaccessmodule.vala	Fri Dec 19 18:11:28 2008
@@ -250,18 +250,13 @@
 			expr.ccodenode = new CCodeConstant (ev.get_cname ());
 		} else if (expr.symbol_reference is LocalVariable) {
 			var local = (LocalVariable) expr.symbol_reference;
-			if (current_method != null && current_method.coroutine) {
-				// use closure
-				expr.ccodenode = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_variable_cname (local.name));
-			} else {
-				expr.ccodenode = new CCodeIdentifier (get_variable_cname (local.name));
-			}
+			expr.ccodenode = get_variable_cexpression (local.name);
 		} else if (expr.symbol_reference is FormalParameter) {
 			var p = (FormalParameter) expr.symbol_reference;
 			if (p.name == "this") {
 				if (current_method != null && current_method.coroutine) {
 					// use closure
-					expr.ccodenode = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "self");
+					expr.ccodenode = get_variable_cexpression ("self");
 				} else {
 					var st = current_type_symbol as Struct;
 					if (st != null && !st.is_simple_type ()) {
@@ -273,7 +268,7 @@
 			} else {
 				if (current_method != null && current_method.coroutine) {
 					// use closure
-					expr.ccodenode = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), p.name);
+					expr.ccodenode = get_variable_cexpression (p.name);
 				} else {
 					var type_as_struct = p.parameter_type.data_type as Struct;
 					if (p.direction != ParameterDirection.IN



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