Ejemplo n.º 1
0
        public void Visit(FuncBodyNode n)
        {
            var statements = (StatementsNode)n.GetChildren().Last();

            statements.SymTable = n.SymTable;
            statements.Accept(this);
        }
Ejemplo n.º 2
0
 public void Visit(FuncBodyNode n)
 {
     PrintDOTIDLabel(n);
     PrintDOTParentChild(n);
     foreach (var child in n.GetChildren())
     {
         child.Accept(this);
     }
 }
        public void Visit(FuncBodyNode n)
        {
            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }
        }
Ejemplo n.º 4
0
        public void Visit(FuncBodyNode n)
        {
            var table = (FunctionSymbolTableEntry)n.SymTable;
            var tag   = Utils.GetTag(table);
            var r15   = Registers.R15;

            _writer.WriteTag(tag);
            _writer.WriteInstruction(Instructions.Sw, $"-4({FSPReg})", r15);

            var children = n.GetChildren();

            foreach (var child in children)
            {
                child.Accept(this);
            }

            if (string.Equals(table.ReturnType.Lexeme, TypeConstants.VoidType))
            {
                // Jump to return address
                _writer.WriteInstruction(Instructions.Lw, r15, $"-4({FSPReg})");
                _writer.WriteInstruction(Instructions.Jr, r15);
            }
        }