linux-packaging-mono/mono/tests/bug-335131.2.cs
Xamarin Public Jenkins (auto-signing) 6bdd276d05 Imported Upstream version 5.0.0.42
Former-commit-id: fd56571888259555122d8a0f58c68838229cea2b
2017-04-10 11:41:01 +00:00

80 lines
2.2 KiB
C#

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");
}
}