コード例 #1
0
 internal void Function(IList <Tree> trees)
 {
     Labels.Reset();
     System.Lexical.OpenMethod(trees[1].Content, trees[0].Content, trees[2].Children);
     VM.Parser.Instruct.Parse(Const.nop).Push(System.Lexical.StreamWriter);
     this.System.Lexical.EPSInc = System.Lexical.StreamWriter.Offset;
     Insert(Const.add, null, new Tree("esp", Kind.Register), new Tree(System.Lexical.CurrentMethod.DataSize.ToString(), Kind.Numbre));
     for (var j = trees[2].Children.Count - 1; j >= 0; j--)
     {
         Insert(Const.pop, Const.empty, trees[2].Children[j].Children[1]);
     }
     Compiler(trees[3]);
     Insert(Const.label, Const.returnLabel, new Tree(Const.returnLabel, Kind.Label));
     Insert(Const.sub, null, new Tree("esp", Kind.Register), new Tree(System.Lexical.CurrentMethod.DataSize.ToString(), Kind.Numbre));
     VM.Parser.Instruct.Parse(Const.ret).Push(System.Lexical.StreamWriter);
     VM.Parser.Instruct.Parse(Const.rop).Push(System.Lexical.StreamWriter);
     System.Lexical.CloseFunction();
 }