From: Jürg Billeter Date: Sun, 17 Oct 2010 18:33:54 +0000 (+0200) Subject: codegen: Remove fallback in delegate target handling X-Git-Tag: 0.11.1~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f261f2e0c3d50675a67d9d5009ae37c30d9ccfa8;p=thirdparty%2Fvala.git codegen: Remove fallback in delegate target handling --- diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index 678d139b5..51a145abc 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -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")); } } diff --git a/codegen/valaccodedelegatemodule.vala b/codegen/valaccodedelegatemodule.vala index 86734f286..8fc161050 100644 --- a/codegen/valaccodedelegatemodule.vala +++ b/codegen/valaccodedelegatemodule.vala @@ -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) { diff --git a/codegen/valaccodememberaccessmodule.vala b/codegen/valaccodememberaccessmodule.vala index c17a6f6c5..6f57813cd 100644 --- a/codegen/valaccodememberaccessmodule.vala +++ b/codegen/valaccodememberaccessmodule.vala @@ -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")); } } } diff --git a/vala/valamethod.vala b/vala/valamethod.vala index d48d356d4..6d61d6c48 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -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;