internal override void Emit(CodeEmitter ilgen)
{
base.Emit(ilgen);
// unbox leaves a pointer to the value of the stack (instead of the value)
// so we have to copy the value into a local variable and load the address
// of the local onto the stack
LocalBuilder local = ilgen.DeclareLocal(Type);
ilgen.Emit(OpCodes.Stloc, local);
ilgen.Emit(OpCodes.Ldloca, local);
}