2010-06-17 Geoff Norton <gnorton@novell.com>
[mono.git] / mono / tests / bug-335131.2.cs
blob2452f9635780baf66c4641caf0c30e2cd1ccf7a7
1 using System;
2 using System.Reflection;
3 using System.Reflection.Emit;
6 class Bla<T> {
7 public T t;
9 public class Entry
11 public static int Main()
13 Bla<int> d = new Bla<int>();
14 d.t = 99;
15 Instance();
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;
24 return 0;
27 public static void Instance()
29 AssemblyName name = new AssemblyName("Instance");
30 AssemblyBuilder asmbuild = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
31 ModuleBuilder mod = asmbuild.DefineDynamicModule("Instance.exe");
33 TypeBuilder G = mod.DefineType("G", TypeAttributes.Public);
34 Type T = G.DefineGenericParameters("T")[0];
35 Type GObj = G.MakeGenericType(new Type[] { typeof(object) });
37 ConstructorBuilder Ctor = G.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
39 ILGenerator il = Ctor.GetILGenerator();
40 il.Emit(OpCodes.Ldarg_0);
41 il.Emit(OpCodes.Call, typeof(object).GetConstructor(new Type[0]));
42 il.Emit(OpCodes.Ret);
45 MethodBuilder Bar = G.DefineMethod("Bar", MethodAttributes.Public);
47 ILGenerator il = Bar.GetILGenerator();
48 il.Emit(OpCodes.Ret);
51 MethodBuilder Foo = G.DefineMethod("Foo", MethodAttributes.Public | MethodAttributes.Static );
53 ILGenerator il = Foo.GetILGenerator();
54 il.Emit(OpCodes.Newobj, Ctor);
55 il.Emit(OpCodes.Call, Bar);
56 il.Emit(OpCodes.Ret);
59 TypeBuilder M = mod.DefineType("M", TypeAttributes.Public);
62 MethodBuilder main = M.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static );
64 ILGenerator il = main.GetILGenerator();
65 il.Emit(OpCodes.Call, TypeBuilder.GetMethod (GObj, Foo));
66 il.Emit(OpCodes.Ret);
69 asmbuild.SetEntryPoint (main);
70 G.CreateType();
71 M.CreateType();
73 asmbuild.Save("Instance.exe");
76 Console.WriteLine("ok");