public override void GenerateCode(CodeGeneration.CodeGenerator cg) { var funcinfo = (FunctionInfo)FunctionIDNode.ReferencedThing; funcinfo.Locals = new List <KeyValuePair <string, VariableInfo> >(FunctionScope.GetLocals()); //get it's ILGen var innergenerator = funcinfo.ILMethod.GetILGenerator(); cg.EnterGenerationScope(innergenerator); var paramarr = funcinfo.Parameters.ToArray(); for (int i = 0; i < paramarr.Length; i++) { var parameter = paramarr[i]; //get the variable for the param var paramvarinfo = (VariableInfo)funcinfo.FunctionScope.ResolveVarOrFunction(parameter.Key); //link the var with is Ilvariable paramvarinfo.ILLocalVariable = cg.CreateTigerVar(parameter.Value.GetILType()); //load the argument cg.IlGenerator.Emit(OpCodes.Ldarg, i); cg.IlGenerator.Emit(OpCodes.Stsfld, paramvarinfo.ILLocalVariable); } FunctionBody.GenerateCode(cg); cg.IlGenerator.Emit(OpCodes.Ret); cg.LeaveGenerationScope(); }