]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Remove fallback in delegate target handling
authorJürg Billeter <j@bitron.ch>
Sun, 17 Oct 2010 18:33:54 +0000 (20:33 +0200)
committerJürg Billeter <j@bitron.ch>
Thu, 21 Oct 2010 09:58:13 +0000 (11:58 +0200)
codegen/valaccodebasemodule.vala
codegen/valaccodedelegatemodule.vala
codegen/valaccodememberaccessmodule.vala
vala/valamethod.vala

index 678d139b558569fe7b9bcf3aafaf73ecc28a25d8..51a145abcc6c1b02e1c9be6b71c1014b2d9dd1ba 100644 (file)
@@ -3602,6 +3602,7 @@ public class Vala.CCodeBaseModule : CodeGenerator {
                        }
                } else if (delegate_type != null && delegate_type.delegate_symbol.has_target) {
                        set_delegate_target (expr, new CCodeConstant ("NULL"));
+                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                }
        }
 
index 86734f28643ab4115bd2ce9e426579c2c94d523d..8fc161050d72b88728937e0d571ca3c4c9b3bb4a 100644 (file)
@@ -129,17 +129,9 @@ public class Vala.CCodeDelegateModule : CCodeArrayModule {
        }
 
        public override CCodeExpression get_delegate_target_cexpression (Expression delegate_expr, out CCodeExpression delegate_target_destroy_notify) {
-               delegate_target_destroy_notify = new CCodeConstant ("NULL");
+               delegate_target_destroy_notify = get_delegate_target_destroy_notify (delegate_expr);
 
-               if (get_delegate_target_destroy_notify (delegate_expr) != null) {
-                       delegate_target_destroy_notify = get_delegate_target_destroy_notify (delegate_expr);
-               }
-               var target_expr = get_delegate_target (delegate_expr);
-               if (target_expr == null) {
-                       return new CCodeConstant ("NULL");
-               } else {
-                       return target_expr;
-               }
+               return get_delegate_target (delegate_expr);
        }
 
        public override string get_delegate_target_destroy_notify_cname (string delegate_cname) {
index c17a6f6c5b6bf15a7512af5bdab95e259ca5207d..6f57813cd12b39ae1ea386046c062d5b8ab32eda 100644 (file)
@@ -92,6 +92,7 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                        }
 
                        if (expr.target_type is DelegateType) {
+                               set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                                if (m.binding == MemberBinding.STATIC) {
                                        set_delegate_target (expr, new CCodeConstant ("NULL"));
                                } else if (m.is_async_callback) {
@@ -203,6 +204,7 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                        string target_cname = get_delegate_target_cname (field.get_cname ());
                                        string target_destroy_notify_cname = get_delegate_target_destroy_notify_cname (field.get_cname ());
 
+                                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                                        if (field.no_delegate_target) {
                                                set_delegate_target (expr, new CCodeConstant ("NULL"));
                                        } else {
@@ -271,6 +273,7 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                }
                                        }
                                } else if (field.variable_type is DelegateType) {
+                                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                                        if (field.no_delegate_target) {
                                                set_delegate_target (expr, new CCodeConstant ("NULL"));
                                        } else {
@@ -502,6 +505,8 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                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))));
+                                               } else {
+                                                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                                                }
                                        }
                                }
@@ -594,6 +599,8 @@ public class Vala.CCodeMemberAccessModule : CCodeControlFlowModule {
                                                set_delegate_target (expr, target_expr);
                                                if (expr.value_type.value_owned) {
                                                        set_delegate_target_destroy_notify (expr, delegate_target_destroy_notify);
+                                               } else {
+                                                       set_delegate_target_destroy_notify (expr, new CCodeConstant ("NULL"));
                                                }
                                        }
                                }
index d48d356d4a77e9b35e933ae40e90e8fba2723593..6d61d6c48938edd69ee7c104f1beb72b250e6a30 100644 (file)
@@ -1115,6 +1115,7 @@ public class Vala.Method : Symbol {
 
                var callback_param = new FormalParameter ("_callback_", callback_type);
                callback_param.initializer = new NullLiteral (source_reference);
+               callback_param.initializer.target_type = callback_type.copy ();
                callback_param.cparameter_position = -1;
                callback_param.cdelegate_target_parameter_position = -0.9;