public static ILGenerator PushArgumentsOntoStack(this ILGenerator generator, ParameterInfo[] parameters) { for (int i = 0; i < parameters.Length; i++) { generator.AndPushArgument1OntoStack() .AndPushInt32AsInt32OntoStack(i) .AndPushElementFromArrayAtIndexOnStackOntoStack(); generator.AndUnboxValueTypeArgument(parameters[i].ParameterType); } return(generator); }
public static Label EnsureCorrectNumberOfArgumentsHaveBeenSupplied(this ILGenerator generator, ParameterInfo[] parameters) { Label argsGood = generator.DefineLabel(); generator .AndPushArgument1OntoStack() .AndPushArrayLengthOntoStack() .AndPushInt32AsInt32OntoStack(parameters.Length) .AndGotoLabelIfTop2ItemsOnStackAreEqual(argsGood); return(argsGood); }