public void VisitReturn(IndentWriter context, AstStatement.ReturnStmt returnStmt)
 {
     context.WriteLine($"return {{");
     context.Indent();
     this.PrintExpression(context, returnStmt.Expression, returnStmt.Scope);
     context.Unindent();
     context.WriteLine("}");
 }
        public List <Instruction> VisitReturn(object context, AstStatement.ReturnStmt returnStmt)
        {
            var scope         = returnStmt.Scope;
            var returnAddress = scope.GetHeapLayoutUntil(scope.GlobalScope.ReturnAddress);

            var list = new List <Instruction>();

            list.Add(WriteLocal, returnAddress);
            list.AddRange(returnStmt.Expression.Accept(scope, this));
            list.Add(ReadLocal, returnAddress);
            return(list);
        }
 public AstStatement VisitReturn(Scope context, AstStatement.ReturnStmt returnStmt)
 {
     returnStmt.Expression = returnStmt.Expression?.Accept(context, this);
     return(returnStmt);
 }
Example #4
0
 public Tree VisitReturn(object c, AstStatement.ReturnStmt returnStmt)
 => new Tree("return", Expr(returnStmt.Expression));