]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dova: Fix closures in static methods
authorJürg Billeter <j@bitron.ch>
Sat, 26 Jun 2010 19:48:52 +0000 (21:48 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 26 Jun 2010 19:49:07 +0000 (21:49 +0200)
codegen/valadovabasemodule.vala

index 77befcc802a52c36a078a5f6c131788d3a11cae7..59b5fbaea4ffda989834d1cb772cb677bf8c2a9e 100644 (file)
@@ -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 ())));