vala r2226 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2226 - in trunk: . gobject
- Date: Fri, 19 Dec 2008 18:11:28 +0000 (UTC)
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]