2010-03-17 Zoltan Varga <vargaz@gmail.com>
[mono.git] / mcs / ilasm / codegen / Class.cs
index 26cd59f6d03d8cdbacc5949e254c646684b496cd..58a946cd1fe27320d4a95cde7b746cec2b19cae7 100644 (file)
@@ -111,7 +111,6 @@ namespace Mono.ILASM {
                        }\r
                }\r
 \r
-\r
                /// <summary>\r
                /// </summary>\r
                /// <param name="cg"></param>\r
@@ -119,17 +118,52 @@ namespace Mono.ILASM {
                {\r
                        codgen = cg;\r
                        \r
+                       TypeBuilder.CreateType();\r
+                       cg.TypeManager[name] = TypeBuilder;\r
+\r
+                       if (methods != null) {\r
+                               foreach (Method m in methods) \r
+                                       m.Resolve (this);\r
+                       }\r
+\r
                        if (methods != null) {\r
                                foreach (Method m in methods) {\r
                                        m.Emit (this);\r
                                        if (m.IsEntryPoint)\r
-                                               cg.SetEntryPoint (m.Info);\r
+                                               cg.SetEntryPoint (m.Builder);\r
                                }\r
-                       }\r
-                       \r
-                       TypeBuilder.CreateType();\r
+                       }       \r
                }\r
+               \r
+               // This can be removed when System.Reflection.Emit.TypeBuilder.GetMethod is implemented\r
+               // TODO: This function needs allot of work\r
+               public MethodInfo GetMethod (string method_name, BindingFlags binding_flags,\r
+                       Type[] param_type_list)\r
+               {\r
+                       foreach (Method method in methods) {\r
+                               if (method.Name != method_name)\r
+                                       continue;\r
+                               ParameterInfo[] param_info = method.Builder.GetParameters ();\r
+                               if (param_info == null) {\r
+                                       if (param_type_list.Length == 0)\r
+                                               return method.Builder;\r
+                                       else\r
+                                               continue;\r
+                               }\r
+                               int size = param_info.Length;\r
+                               if (param_type_list.Length != size)\r
+                                       continue;\r
+                               for (int i=0; i<size; i++) {\r
+                                       if (param_type_list[i] != param_info[i].ParameterType)\r
+                                               goto end;       \r
+                               }\r
 \r
+                               return method.Builder;\r
+                               end: continue;\r
+                       }\r
+       \r
+                       return null;\r
+               }\r
        }\r
 }\r
 \r