Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        public object VisitReturnStatementAST([NotNull] ReturnStatementASTContext context)
        {
            if (context.expr() == null)
            {
                AddLine("RETURN");
            }
            else
            {
                Visit(context.expr());

                AddLine("RETURN_VALUE");
            }
            return(null);
        }