vala r2221 - in trunk: . gobject
- From: juergbi svn gnome org
- To: svn-commits-list gnome org
- Subject: vala r2221 - in trunk: . gobject
- Date: Fri, 19 Dec 2008 14:06:19 +0000 (UTC)
Author: juergbi
Date: Fri Dec 19 14:06:19 2008
New Revision: 2221
URL: http://svn.gnome.org/viewvc/vala?rev=2221&view=rev
Log:
2008-12-19 JÃrg Billeter <j bitron ch>
* gobject/valaccodememberaccessmodule.vala:
Use closure struct to access local variables and parameters in
coroutines
Modified:
trunk/ChangeLog
trunk/gobject/valaccodememberaccessmodule.vala
Modified: trunk/gobject/valaccodememberaccessmodule.vala
==============================================================================
--- trunk/gobject/valaccodememberaccessmodule.vala (original)
+++ trunk/gobject/valaccodememberaccessmodule.vala Fri Dec 19 14:06:19 2008
@@ -250,32 +250,47 @@
expr.ccodenode = new CCodeConstant (ev.get_cname ());
} else if (expr.symbol_reference is LocalVariable) {
var local = (LocalVariable) expr.symbol_reference;
- expr.ccodenode = new CCodeIdentifier (get_variable_cname (local.name));
+ 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));
+ }
} else if (expr.symbol_reference is FormalParameter) {
var p = (FormalParameter) expr.symbol_reference;
if (p.name == "this") {
- var st = current_type_symbol as Struct;
- if (st != null && !st.is_simple_type ()) {
- expr.ccodenode = new CCodeIdentifier ("(*self)");
+ if (current_method != null && current_method.coroutine) {
+ // use closure
+ expr.ccodenode = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), "self");
} else {
- expr.ccodenode = new CCodeIdentifier ("self");
+ var st = current_type_symbol as Struct;
+ if (st != null && !st.is_simple_type ()) {
+ expr.ccodenode = new CCodeIdentifier ("(*self)");
+ } else {
+ expr.ccodenode = new CCodeIdentifier ("self");
+ }
}
} else {
- var type_as_struct = p.parameter_type.data_type as Struct;
- if (p.direction != ParameterDirection.IN
- || (type_as_struct != null && !type_as_struct.is_simple_type () && !p.parameter_type.nullable)) {
- expr.ccodenode = new CCodeIdentifier ("(*%s)".printf (p.name));
+ if (current_method != null && current_method.coroutine) {
+ // use closure
+ expr.ccodenode = new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), p.name);
} else {
- // Property setters of non simple structs shall replace all occurences
- // of the "value" formal parameter with a dereferencing version of that
- // parameter.
- if (current_property_accessor != null &&
- current_property_accessor.writable &&
- current_property_accessor.value_parameter == p &&
- current_property_accessor.prop.property_type.is_real_struct_type ()) {
- expr.ccodenode = new CCodeIdentifier ("(*value)");
+ var type_as_struct = p.parameter_type.data_type as Struct;
+ if (p.direction != ParameterDirection.IN
+ || (type_as_struct != null && !type_as_struct.is_simple_type () && !p.parameter_type.nullable)) {
+ expr.ccodenode = new CCodeIdentifier ("(*%s)".printf (p.name));
} else {
- expr.ccodenode = new CCodeIdentifier (p.name);
+ // Property setters of non simple structs shall replace all occurences
+ // of the "value" formal parameter with a dereferencing version of that
+ // parameter.
+ if (current_property_accessor != null &&
+ current_property_accessor.writable &&
+ current_property_accessor.value_parameter == p &&
+ current_property_accessor.prop.property_type.is_real_struct_type ()) {
+ expr.ccodenode = new CCodeIdentifier ("(*value)");
+ } else {
+ expr.ccodenode = new CCodeIdentifier (p.name);
+ }
}
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]