/// <summary> /// Gets an instruction representing a load-by-value from the given argument. /// </summary> /// <param name="argument">argument to load</param> /// <returns>Load instruction</returns> public static MsilInstruction AsValueLoad(this MsilArgument argument) { switch (argument.Position) { case 0: return(new MsilInstruction(OpCodes.Ldarg_0)); case 1: return(new MsilInstruction(OpCodes.Ldarg_1)); case 2: return(new MsilInstruction(OpCodes.Ldarg_2)); case 3: return(new MsilInstruction(OpCodes.Ldarg_3)); default: return(new MsilInstruction(argument.Position < 0xFF ? OpCodes.Ldarg_S : OpCodes.Ldarg).InlineValue(argument)); } }
/// <summary> /// Gets an instruction representing a load-by-reference from the given argument. /// </summary> /// <param name="argument">argument to load</param> /// <returns>Reference load instruction</returns> public static MsilInstruction AsReferenceLoad(this MsilArgument argument) { return(new MsilInstruction(argument.Position < 0xFF ? OpCodes.Ldarga_S : OpCodes.Ldarga).InlineValue(argument)); }
/// <summary> /// Gets an instruction representing a store-by-value to the given argument. /// </summary> /// <param name="argument">argument to write to</param> /// <returns>Store instruction</returns> public static MsilInstruction AsValueStore(this MsilArgument argument) { return(new MsilInstruction(argument.Position < 0xFF ? OpCodes.Starg_S : OpCodes.Starg).InlineValue(argument)); }