Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / tests / bug-335131.2.cs
1 using System;\r
2 using System.Reflection;\r
3 using System.Reflection.Emit;\r
4 \r
5
6 class Bla<T> {
7         public T t;
8 }\r
9 public class Entry\r
10 {\r
11     public static int Main()\r
12     {
13                 Bla<int> d = new Bla<int>();    
14                 d.t = 99;\r
15         Instance();\r
16
17                 AppDomain domain = AppDomain.CreateDomain ("test");
18                 try {
19                         domain.ExecuteAssembly ("Instance.exe");
20                 } catch (Exception e) {
21                         Console.WriteLine ("assembly has thrown "+e);
22                         return 1;
23                 }\r
24         return 0;\r
25     }\r
26 \r
27     public static void Instance()\r
28     {\r
29         AssemblyName name = new AssemblyName("Instance");\r
30         AssemblyBuilder asmbuild = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);\r
31         ModuleBuilder mod = asmbuild.DefineDynamicModule("Instance.exe");\r
32 \r
33         TypeBuilder G = mod.DefineType("G", TypeAttributes.Public);\r
34         Type T = G.DefineGenericParameters("T")[0];\r
35         Type GObj = G.MakeGenericType(new Type[] { typeof(object) });\r
36 \r
37          ConstructorBuilder Ctor = G.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);\r
38         {\r
39             ILGenerator il = Ctor.GetILGenerator();\r
40             il.Emit(OpCodes.Ldarg_0);\r
41             il.Emit(OpCodes.Call, typeof(object).GetConstructor(new Type[0]));\r
42             il.Emit(OpCodes.Ret);\r
43         }\r
44    
45                 MethodBuilder Bar = G.DefineMethod("Bar", MethodAttributes.Public);
46                 {
47             ILGenerator il = Bar.GetILGenerator();
48                         il.Emit(OpCodes.Ret);
49                 }
50
51         MethodBuilder Foo = G.DefineMethod("Foo", MethodAttributes.Public | MethodAttributes.Static );
52                 {
53             ILGenerator il = Foo.GetILGenerator();
54                     il.Emit(OpCodes.Newobj, Ctor);
55                         il.Emit(OpCodes.Call, Bar);
56                         il.Emit(OpCodes.Ret);
57                 }\r
58
59                 TypeBuilder M = mod.DefineType("M", TypeAttributes.Public);
60 \r
61
62        MethodBuilder main = M.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static );\r
63         {\r
64             ILGenerator il = main.GetILGenerator();\r
65             il.Emit(OpCodes.Call, TypeBuilder.GetMethod (GObj, Foo));
66             il.Emit(OpCodes.Ret);\r
67         }
68
69                 asmbuild.SetEntryPoint (main);
70         G.CreateType();
71                 M.CreateType();
72 \r
73                 asmbuild.Save("Instance.exe");
74
75                 
76                 Console.WriteLine("ok");\r
77     }\r
78 \r
79 }