return null;
Type ret_type = method.method.ReturnType;
- Parameters args = method.method.ParameterInfo;
+ ParametersCompiled args = method.method.ParameterInfo;
int arg_len = args.Count;
bool is_indexer = method.method is Indexer.SetIndexerMethod || method.method is Indexer.GetIndexerMethod;
void DefineProxy (Type iface, MethodInfo base_method, MethodInfo iface_method,
AParametersCollection param)
{
- MethodBuilder proxy;
+ // TODO: Handle nested iface names
+ string proxy_name = SimpleName.RemoveGenericArity (iface.FullName) + "." + iface_method.Name;
- string proxy_name = SimpleName.RemoveGenericArity (iface.Name) + '.' + iface_method.Name;
-
- proxy = container.TypeBuilder.DefineMethod (
+ MethodBuilder proxy = container.TypeBuilder.DefineMethod (
proxy_name,
MethodAttributes.HideBySig |
MethodAttributes.NewSlot |
+ MethodAttributes.CheckAccessOnOverride |
MethodAttributes.Virtual,
CallingConventions.Standard | CallingConventions.HasThis,
base_method.ReturnType, param.GetEmitTypes ());
- AParametersCollection pd = TypeManager.GetParameterData (iface_method);
- proxy.DefineParameter (0, ParameterAttributes.None, "");
- for (int i = 0; i < pd.Count; i++) {
- string name = pd.FixedParameters [i].Name;
- ParameterAttributes attr = Parameters.GetParameterAttribute (pd.FixedParameters [i].ModFlags);
+#if GMCS_SOURCE
+ Type[] gargs = iface_method.GetGenericArguments ();
+ if (gargs.Length > 0) {
+ string[] gnames = new string[gargs.Length];
+ for (int i = 0; i < gargs.Length; ++i)
+ gnames[i] = gargs[i].Name;
+
+ proxy.DefineGenericParameters (gnames);
+ }
+#endif
+
+ for (int i = 0; i < param.Count; i++) {
+ string name = param.FixedParameters [i].Name;
+ ParameterAttributes attr = ParametersCompiled.GetParameterAttribute (param.FixedParameters [i].ModFlags);
proxy.DefineParameter (i + 1, attr, name);
}
} else if (!candidate.IsPublic) {
Report.Error (737, container.Location,
"`{0}' does not implement interface member `{1}' and the best implementing candidate `{2}' in not public",
- container.GetSignatureForError (), TypeManager.CSharpSignature (mi, true), TypeManager.CSharpSignature (candidate));
+ container.GetSignatureForError (), TypeManager.CSharpSignature (mi, true), TypeManager.CSharpSignature (candidate, true));
} else {
Report.Error (738, container.Location,
"`{0}' does not implement interface member `{1}' and the best implementing candidate `{2}' return type `{3}' does not match interface member return type `{4}'",