/// Verifies whether the delegate in question is compatible with this one in
/// order to determine if instantiation from the same is possible.
/// </summary>
- public static bool VerifyDelegate (EmitContext ec, Type delegate_type, Type probe_type, Location loc)
+ public static bool VerifyDelegate (EmitContext ec, Type delegate_type, Location loc)
{
Expression ml = Expression.MemberLookup (
ec.ContainerType, delegate_type, "Invoke", loc);
Argument a = (Argument) Arguments [0];
- if (!a.ResolveMethodGroup (ec, loc))
+ if (!a.ResolveMethodGroup (ec))
return null;
Expression e = a.Expr;
if (e is AnonymousMethod && RootContext.Version != LanguageVersion.ISO_1)
- return ((AnonymousMethod) e).Compatible (ec, type, false);
+ return ((AnonymousMethod) e).Compatible (ec, type);
MethodGroupExpr mg = e as MethodGroupExpr;
if (mg != null)
return ResolveMethodGroupExpr (ec, mg);
- Type e_type = e.Type;
-
- if (!TypeManager.IsDelegateType (e_type)) {
+ if (!TypeManager.IsDelegateType (e.Type)) {
Report.Error (149, loc, "Method name expected");
return null;
}
// This is what MS' compiler reports. We could always choose
// to be more verbose and actually give delegate-level specifics
- if (!Delegate.VerifyDelegate (ec, type, e_type, loc)) {
- Report.Error (29, loc, "Cannot implicitly convert type '" + e_type + "' " +
+ if (!Delegate.VerifyDelegate (ec, type, loc)) {
+ Report.Error (29, loc, "Cannot implicitly convert type '" + e.Type + "' " +
"to type '" + type + "'");
return null;
}