File: bug-335131.2.cs

package info (click to toggle)
mono 4.6.2.7%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 778,148 kB
  • ctags: 914,052
  • sloc: cs: 5,779,509; xml: 2,773,713; ansic: 432,645; sh: 14,749; makefile: 12,361; perl: 2,488; python: 1,434; cpp: 849; asm: 531; sql: 95; sed: 16; php: 1
file content (79 lines) | stat: -rw-r--r-- 2,191 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Reflection;
using System.Reflection.Emit;


class Bla<T> {
	public T t;
}
public class Entry
{
    public static int Main()
    {
		Bla<int> d = new Bla<int>();	
		d.t = 99;
        Instance();

		AppDomain domain = AppDomain.CreateDomain ("test");
		try {
			domain.ExecuteAssembly ("Instance.exe");
		} catch (Exception e) {
			Console.WriteLine ("assembly has thrown "+e);
			return 1;
		}
        return 0;
    }

    public static void Instance()
    {
        AssemblyName name = new AssemblyName("Instance");
        AssemblyBuilder asmbuild = System.Threading.Thread.GetDomain().DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);
        ModuleBuilder mod = asmbuild.DefineDynamicModule("Instance.exe");

        TypeBuilder G = mod.DefineType("G", TypeAttributes.Public);
        Type T = G.DefineGenericParameters("T")[0];
        Type GObj = G.MakeGenericType(new Type[] { typeof(object) });

         ConstructorBuilder Ctor = G.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, null);
        {
            ILGenerator il = Ctor.GetILGenerator();
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Call, typeof(object).GetConstructor(new Type[0]));
            il.Emit(OpCodes.Ret);
        }
   
		MethodBuilder Bar = G.DefineMethod("Bar", MethodAttributes.Public);
		{
            ILGenerator il = Bar.GetILGenerator();
			il.Emit(OpCodes.Ret);
		}

        MethodBuilder Foo = G.DefineMethod("Foo", MethodAttributes.Public | MethodAttributes.Static );
		{
            ILGenerator il = Foo.GetILGenerator();
		    il.Emit(OpCodes.Newobj, Ctor);
			il.Emit(OpCodes.Call, Bar);
			il.Emit(OpCodes.Ret);
		}

		TypeBuilder M = mod.DefineType("M", TypeAttributes.Public);


       MethodBuilder main = M.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static );
        {
            ILGenerator il = main.GetILGenerator();
            il.Emit(OpCodes.Call, TypeBuilder.GetMethod (GObj, Foo));
            il.Emit(OpCodes.Ret);
        }

		asmbuild.SetEntryPoint (main);
        G.CreateType();
		M.CreateType();

		asmbuild.Save("Instance.exe");

		
		Console.WriteLine("ok");
    }

}