2 // (C) Sergey Chaban (serge@wildwestsoftware.com)
\r
5 using System.Collections;
\r
6 using System.Reflection;
\r
7 using System.Reflection.Emit;
\r
9 namespace Mono.ILASM {
\r
13 public class ClassName {
\r
15 private string name;
\r
16 private string assembly;
\r
17 private string module;
\r
22 /// <param name="name"></param>
\r
23 public ClassName (string name) {
\r
25 this.assembly = String.Empty;
\r
26 this.module = String.Empty;
\r
30 public string Name {
\r
42 public class Class {
\r
44 private string name;
\r
47 private ClassName baseClass;
\r
49 // implements clause
\r
50 private ArrayList interfaces;
\r
52 private ArrayList methods;
\r
54 private TypeBuilder tb;
\r
56 private CodeGen codgen;
\r
58 private TypeAttributes attrs;
\r
64 /// <param name="name"></param>
\r
65 public Class (string name)
\r
74 /// <param name="m"></param>
\r
75 public void AddMethod (Method m)
\r
77 if (methods == null) methods = new ArrayList ();
\r
84 public CodeGen CodeGen {
\r
93 public TypeAttributes Attrs {
\r
105 public TypeBuilder TypeBuilder {
\r
107 if (tb == null && codgen != null) {
\r
108 tb = codgen.ModBuilder.DefineType (name, Attrs);
\r
116 /// <param name="cg"></param>
\r
117 public void Emit (CodeGen cg)
\r
121 TypeBuilder.CreateType();
\r
122 cg.TypeManager[name] = TypeBuilder;
\r
124 if (methods != null) {
\r
125 foreach (Method m in methods)
\r
129 if (methods != null) {
\r
130 foreach (Method m in methods) {
\r
132 if (m.IsEntryPoint)
\r
133 cg.SetEntryPoint (m.Builder);
\r
138 // This can be removed when System.Reflection.Emit.TypeBuilder.GetMethod is implemented
\r
139 // TODO: This function needs allot of work
\r
140 public MethodInfo GetMethod (string method_name, BindingFlags binding_flags,
\r
141 Type[] param_type_list)
\r
143 foreach (Method method in methods) {
\r
144 if (method.Name != method_name)
\r
146 ParameterInfo[] param_info = method.Builder.GetParameters ();
\r
147 if (param_info == null) {
\r
148 if (param_type_list.Length == 0)
\r
149 return method.Builder;
\r
153 int size = param_info.Length;
\r
154 if (param_type_list.Length != size)
\r
156 for (int i=0; i<size; i++) {
\r
157 if (param_type_list[i] != param_info[i].ParameterType)
\r
161 return method.Builder;
\r