summaryrefslogtreecommitdiff
path: root/codegen/valaccodememberaccessmodule.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2010-10-09 18:16:32 +0200
committerJürg Billeter <j@bitron.ch>2010-10-09 18:16:32 +0200
commit4bdcea830d293f2ccaf038dbd68a052054eb49eb (patch)
treeaa286de94afc82db08b7008a1487744b23dee536 /codegen/valaccodememberaccessmodule.vala
parent8a87738d05dd889ac6da55e222cd35a6d203957d (diff)
downloadvala-4bdcea830d293f2ccaf038dbd68a052054eb49eb.tar.gz
codegen: Use set_delegate_target for local variable access
Diffstat (limited to 'codegen/valaccodememberaccessmodule.vala')
-rw-r--r--codegen/valaccodememberaccessmodule.vala13
1 files changed, 13 insertions, 0 deletions
diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala
index a997c09fc..a0d61158f 100644
--- a/codegen/valaccodememberaccessmodule.vala
+++ b/codegen/valaccodememberaccessmodule.vala
@@ -433,6 +433,9 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
for (int dim = 1; dim <= array_type.rank; dim++) {
append_array_size (expr, new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_array_length_cname (get_variable_cname (local.name), dim)));
}
+ } else if (local.variable_type is DelegateType) {
+ set_delegate_target (expr, new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_delegate_target_cname (get_variable_cname (local.name))));
+ set_delegate_target_destroy_notify (expr, new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (block))), get_delegate_target_destroy_notify_cname (get_variable_cname (local.name))));
}
} else {
set_cvalue (expr, get_variable_cexpression (local.name));
@@ -440,6 +443,16 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
for (int dim = 1; dim <= array_type.rank; dim++) {
append_array_size (expr, get_variable_cexpression (get_array_length_cname (get_variable_cname (local.name), dim)));
}
+ } else if (local.variable_type is DelegateType) {
+ if (current_method != null && current_method.coroutine) {
+ set_delegate_target (expr, new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_delegate_target_cname (get_variable_cname (local.name))));
+ set_delegate_target_destroy_notify (expr, new CCodeMemberAccess.pointer (new CCodeIdentifier ("data"), get_delegate_target_destroy_notify_cname (get_variable_cname (local.name))));
+ } else {
+ set_delegate_target (expr, new CCodeIdentifier (get_delegate_target_cname (get_variable_cname (local.name))));
+ if (expr.value_type.value_owned) {
+ set_delegate_target_destroy_notify (expr, new CCodeIdentifier (get_delegate_target_destroy_notify_cname (get_variable_cname (local.name))));
+ }
+ }
}
if (expr.parent_node is ReturnStatement &&