From: Jürg Billeter Date: Sat, 26 Jun 2010 19:48:52 +0000 (+0200) Subject: dova: Fix closures in static methods X-Git-Tag: 0.9.3~93 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=63be9bcd2611af372428f231da15220db5b931a4;p=thirdparty%2Fvala.git dova: Fix closures in static methods --- 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 ())));