2 // Permission is hereby granted, free of charge, to any person obtaining
3 // a copy of this software and associated documentation files (the
4 // "Software"), to deal in the Software without restriction, including
5 // without limitation the rights to use, copy, modify, merge, publish,
6 // distribute, sublicense, and/or sell copies of the Software, and to
7 // permit persons to whom the Software is furnished to do so, subject to
8 // the following conditions:
10 // The above copyright notice and this permission notice shall be
11 // included in all copies or substantial portions of the Software.
13 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
14 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
15 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
16 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
17 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
18 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
19 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 // Copyright (C) Lluis Sanchez Gual, 2004
27 using System.Collections;
28 using System.Reflection;
29 using System.Reflection.Emit;
31 namespace Mono.CodeGeneration
33 public class CodeModule
36 static CodeModule sharedModule;
38 public CodeModule (string name)
40 AppDomain myDomain = System.Threading.Thread.GetDomain();
41 AssemblyName myAsmName = new AssemblyName();
42 myAsmName.Name = name;
44 AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly (myAsmName, AssemblyBuilderAccess.Run);
46 AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly (myAsmName, AssemblyBuilderAccess.RunAndSave);
48 module = myAsmBuilder.DefineDynamicModule (name);
51 public static CodeModule Shared
54 if (sharedModule == null)
55 sharedModule = new CodeModule ("SharedModule");
60 public CodeClass CreateClass (string name)
62 return CreateClass (name, TypeAttributes.Public, typeof(object));
65 public CodeClass CreateClass (string name, Type baseType, params Type[] interfaces)
67 return CreateClass (name, TypeAttributes.Public, baseType, interfaces);
70 public CodeClass CreateClass (string name, TypeAttributes attr, Type baseType, params Type[] interfaces)
72 return new CodeClass (module, name, attr, baseType, interfaces);
75 public ModuleBuilder ModuleBuilder
77 get { return module; }