2009-02-18 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / pending.cs
index 9cc30e213d862be9a8ab111b99a06dea14b0f36f..bdb10bc2ac1dffc7ce9df64750af1227f28aef3c 100644 (file)
@@ -359,7 +359,7 @@ namespace Mono.CSharp {
                                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;
 
@@ -472,23 +472,32 @@ namespace Mono.CSharp {
                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);
                        }