public void CallBaseConstructorNonGeneric() { AssemblyBuilder assembly = Errors.DefineDynamicAssembly(); ModuleBuilder module = assembly.DefineDynamicModule("RuntimeModule"); TypeBuilder type = module.DefineType("Class", TypeAttributes.Class, typeof(ClassWithCtor)); Sigil.NonGeneric.Emit ctor = Sigil.NonGeneric.Emit.BuildConstructor(Type.EmptyTypes, type, MethodAttributes.Public); ConstructorInfo baseCtor = typeof(ClassWithCtor).GetConstructor(new[] { typeof(string) }); ctor.LoadArgument(0); ctor.LoadConstant("abc123"); ctor.Call(baseCtor); ctor.Return(); ctor.CreateConstructor(); Type createdType = type.CreateType(); ClassWithCtor instance = (ClassWithCtor)Activator.CreateInstance(createdType); Assert.IsInstanceOf(createdType, instance); Assert.AreEqual("abc123", instance.Value); }
public static Sigil.NonGeneric.Emit Box(this Sigil.NonGeneric.Emit emitter, Type typeFrom, bool castIfRefType) { if (typeFrom.IsByRef) { var baseType = typeFrom.GetElementType(); if (baseType.IsPrimitive) { return(emitter.LoadIndirect(baseType).Box(baseType)); } if (baseType.IsValueType) { return(emitter.LoadObject(baseType).Box(baseType)); } if (!baseType.IsValueType) { return(emitter.LoadIndirect(baseType)); } throw new NotSupportedException(typeFrom.FullName + " not supported in this context"); } if (!typeFrom.IsValueType) { return(emitter.CastClass(typeFrom)); } return(emitter.Box(typeFrom)); }
public static Sigil.NonGeneric.Emit Unbox(this Sigil.NonGeneric.Emit emitter, Type typeTo, bool castIfRefType) { if (!typeTo.IsValueType) { return(emitter.CastClass(typeTo)); } return(emitter.Unbox(typeTo)); }