protected override void PreEmit(CodeEmitter ilgen)
{
CodeEmitterLocal[] locals = new CodeEmitterLocal[args.Length];
for (int i = args.Length - 1; i >= 0; i--)
{
Type type = args[i];
if (type.IsByRef)
{
type = ArrayTypeWrapper.MakeArrayType(type.GetElementType(), 1);
}
locals[i] = ilgen.DeclareLocal(type);
ilgen.Emit(OpCodes.Stloc, locals[i]);
}
for (int i = 0; i < args.Length; i++)
{
ilgen.Emit(OpCodes.Ldloc, locals[i]);
if (args[i].IsByRef)
{
ilgen.Emit(OpCodes.Ldc_I4_0);
ilgen.Emit(OpCodes.Ldelema, args[i].GetElementType());
}
}
base.PreEmit(ilgen);
}