- Type dt = delegate_type;
-
- Type[] g_args = null;
- if (TypeManager.IsGenericType (delegate_type)) {
- g_args = TypeManager.GetTypeArguments (delegate_type);
- delegate_type = TypeManager.DropGenericTypeArguments (delegate_type);
- }
-
- Delegate d = TypeManager.LookupDelegate (delegate_type);
- MethodSpec invoke;
- if (d != null) {
- if (g_args != null) {
- invoke = Import.CreateMethod (TypeBuilder.GetMethod (dt, d.InvokeBuilder.MethodBuilder));
-#if MS_COMPATIBLE
-// ParametersCompiled p = (ParametersCompiled) d.Parameters.InflateTypes (g_args, g_args);
-// TypeManager.RegisterMethod (invoke, p);
-#endif
- return invoke;
- }
- return d.InvokeBuilder.Spec;
- }
-
- Expression ml = Expression.MemberLookup (ctx, container_type, null, dt,
- "Invoke", Location.Null);
-
- MethodGroupExpr mg = ml as MethodGroupExpr;
- if (mg == null) {
- ctx.Report.Error (-100, Location.Null, "Internal error: could not find Invoke method!");
- // FIXME: null will cause a crash later
- return null;
- }
+ var invoke = MemberCache.FindMember (delType,
+ MemberFilter.Method (InvokeMethodName, 0, null, null),
+ BindingRestriction.DeclaredOnly);