コード例 #1
0
        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();
        }