public static void RepushActualParameters( this ILGenerator g, bool startAtArgument0, int count )
{
if( count <= 0 ) return;
if( startAtArgument0 )
{
g.Emit( OpCodes.Ldarg_0 );
--count;
}
if( count > 0 )
{
g.Emit( OpCodes.Ldarg_1 );
if( count > 1 )
{
g.Emit( OpCodes.Ldarg_2 );
if( count > 2 )
{
g.Emit( OpCodes.Ldarg_3 );
if( count > 3 )
{
for( int iParam = 4; iParam <= Math.Min( count, 255 ); ++iParam )
{
g.Emit( OpCodes.Ldarg_S, (byte)iParam );
}
if( count > 255 )
{
for( int iParam = 256; iParam <= count; ++iParam )
{
g.Emit( OpCodes.Ldarg, (short)iParam );
}
}
}
}
}
}
}