private static void EmitArgsToTuple(FunctionDefinition fd, CodeGen icg, SignatureInfo sigInfo, int cnt) { if ((fd.Flags & FunctionAttributes.ArgumentList) != 0) { // transform params object[] into tuple on call... LocalBuilder lb = icg.DeclareLocal(typeof(object)); Slot argsSlot = new LocalSlot(lb, icg); int index; if ((fd.Flags & FunctionAttributes.KeywordDictionary) != 0) { index = sigInfo.ParamNames.Length - 2; icg.EmitArgGet(cnt - 2); } else { index = sigInfo.ParamNames.Length - 1; icg.EmitArgGet(cnt - 1); } icg.EmitCall(typeof(Tuple), "MakeTuple"); argsSlot.EmitSet(icg); lb.SetLocalSymInfo(sigInfo.ParamNames[index].GetString()); icg.Names.SetSlot(sigInfo.ParamNames[index], argsSlot); } }