From 63be9bcd2611af372428f231da15220db5b931a4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sat, 26 Jun 2010 21:48:52 +0200 Subject: [PATCH] dova: Fix closures in static methods --- codegen/valadovabasemodule.vala | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/codegen/valadovabasemodule.vala b/codegen/valadovabasemodule.vala index 77befcc80..59b5fbaea 100644 --- a/codegen/valadovabasemodule.vala +++ b/codegen/valadovabasemodule.vala @@ -2234,21 +2234,23 @@ internal class Vala.DovaBaseModule : CCodeModule { if (target_type is DelegateType && expression_type is MethodType) { var deleg_type = (DelegateType) target_type; var method_type = (MethodType) expression_type; - CCodeExpression delegate_target = new CCodeConstant ("NULL"); - if (method_type.method_symbol.binding == MemberBinding.INSTANCE) { - if (expr is LambdaExpression) { - var lambda = (LambdaExpression) expr; - if (lambda.method.closure) { - int block_id = get_block_id (current_closure_block); - delegate_target = get_variable_cexpression ("_data%d_".printf (block_id)); - } else if (get_this_type () != null) { - delegate_target = new CCodeIdentifier ("this"); - } else { - delegate_target = new CCodeConstant ("NULL"); - } + CCodeExpression delegate_target; + if (expr is LambdaExpression) { + var lambda = (LambdaExpression) expr; + if (lambda.method.closure) { + int block_id = get_block_id (current_closure_block); + delegate_target = get_variable_cexpression ("_data%d_".printf (block_id)); + } else if (get_this_type () != null) { + delegate_target = new CCodeIdentifier ("this"); } else { + delegate_target = new CCodeConstant ("NULL"); + } + } else { + if (method_type.method_symbol.binding == MemberBinding.INSTANCE) { var ma = (MemberAccess) expr; delegate_target = (CCodeExpression) get_ccodenode (ma.inner); + } else { + delegate_target = new CCodeConstant ("NULL"); } } var ccall = new CCodeFunctionCall (new CCodeIdentifier ("%s_new".printf (deleg_type.delegate_symbol.get_lower_case_cname ()))); -- 2.47.3