MethodInfo [] mi;
Type t = missing.Type;
+ if (!t.IsInterface)
+ continue;
+
if (t is TypeBuilder){
TypeContainer iface;
if (m == null)
continue;
+ string mname = TypeManager.GetMethodName (m);
+
//
// `need_proxy' is not null when we're implementing an
// interface indexer and this is Clear(One/All) operation.
// for an interface indexer).
//
if (name == null){
- if (m.Name != tm.get_indexer_name && m.Name != tm.set_indexer_name)
+ if (mname != tm.get_indexer_name && mname != tm.set_indexer_name)
continue;
- } else if ((need_proxy == null) && (name != m.Name))
+ } else if ((need_proxy == null) && (name != mname))
continue;
if (!TypeManager.IsEqual (ret_type, m.ReturnType)){
// a proxy if the implementation's IndexerName doesn't
// match the IndexerName in the interface.
bool name_matches = false;
- if (name == m.Name || m.Name == tm.get_indexer_name || m.Name == tm.set_indexer_name)
+ if (name == mname || mname == tm.get_indexer_name || mname == tm.set_indexer_name)
name_matches = true;
if ((t == null) && (need_proxy != null) && !name_matches)
CallingConventions.Standard | CallingConventions.HasThis,
parent_method.ReturnType, args);
+ ParameterData pd = Invocation.GetParameterData (iface_method);
+ proxy.DefineParameter (0, ParameterAttributes.None, "");
+ for (int i = 0; i < pd.Count; i++) {
+ string name = pd.ParameterName (i);
+ ParameterAttributes attr = Parameter.GetParameterAttributes (pd.ParameterModifier (i));
+ ParameterBuilder pb = proxy.DefineParameter (i + 1, attr, name);
+ }
+
int top = args.Length;
ILGenerator ig = proxy.GetILGenerator ();
for (i = 0; i < top; i++){
Type type = pending_implementations [i].type;
int j = 0;
-
+
foreach (MethodInfo mi in pending_implementations [i].methods){
if (mi == null)
continue;
if (pending_implementations [i].found [j]) {
string[] methodLabel = TypeManager.CSharpSignature (mi).Split ('.');
- Report.Error (536, container.Location, "'{0}' does not implement interface member '{1}'. '{2}.{3}' is either static, not public, or has the wrong return type",
- container.Name, TypeManager.CSharpSignature (mi), container.Name, methodLabel[methodLabel.Length - 1]);
+ Report.Error (536, container.Location,
+ "'{0}' does not implement interface member '{1}'. '{2}.{3}' " +
+ "is either static, not public, or has the wrong return type",
+ container.Name, TypeManager.CSharpSignature (mi),
+ container.Name, methodLabel[methodLabel.Length - 1]);
}
else {
Report.Error (535, container.Location, "'{0}' does not implement interface member '{1}'",