summaryrefslogtreecommitdiff
path: root/codegen/valaccodemethodcallmodule.vala
diff options
context:
space:
mode:
Diffstat (limited to 'codegen/valaccodemethodcallmodule.vala')
-rw-r--r--codegen/valaccodemethodcallmodule.vala6
1 files changed, 5 insertions, 1 deletions
diff --git a/codegen/valaccodemethodcallmodule.vala b/codegen/valaccodemethodcallmodule.vala
index 56e19e412..0e800cba8 100644
--- a/codegen/valaccodemethodcallmodule.vala
+++ b/codegen/valaccodemethodcallmodule.vala
@@ -321,7 +321,11 @@ public class Vala.CCodeMethodCallModule : CCodeAssignmentModule {
ccode.add_assignment (get_this_cexpression (), new CCodeCastExpression (ccall, get_ccode_name (current_class) + "*"));
if (current_method.body.captured) {
- ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (current_method.body))), "self"), get_this_cexpression ());
+ // capture self after setting it
+ var ref_call = new CCodeFunctionCall (get_dup_func_expression (new ObjectType (current_class), expr.source_reference));
+ ref_call.add_argument (get_this_cexpression ());
+
+ ccode.add_assignment (new CCodeMemberAccess.pointer (get_variable_cexpression ("_data%d_".printf (get_block_id (current_method.body))), "self"), ref_call);
}
if (!current_class.is_compact && current_class.get_type_parameters ().size > 0) {