public object VisitReturnStatementAST([NotNull] ReturnStatementASTContext context) { // Revisando que el return se encuentre en una función bool inMethod = false; RuleContext ctx = context.Parent; while (!(ctx is MethodDeclContext || ctx is ProgramContext)) { ctx = ctx.Parent; if (ctx is MethodDeclContext) { inMethod = true; } } if (!inMethod) { InsertError(context.Start, "No se permite utilizar un return fuera de un método"); } // Retorna una lista con el tipo que está retornando List <Pair <string, IToken> > returnedTypes = new List <Pair <string, IToken> >(); if (context.expr() != null) { returnedTypes.Add(new Pair <string, IToken>(Visit(context.expr()) as string, context.Start)); } else { returnedTypes.Add(new Pair <string, IToken>("void", context.Start)); } return(returnedTypes); }
public object VisitReturnStatementAST([NotNull] ReturnStatementASTContext context) { if (context.expr() == null) { AddLine("RETURN"); } else { Visit(context.expr()); AddLine("RETURN_VALUE"); } return(null); }