Ejemplo n.º 1
0
        public override Unit VisitBreakStatement(BreakAST breakStm)
        {
            ILGenerator il = code.Method.GetILGenerator();

            //saltando a donde me dice mi padre.
            il.Emit(OpCodes.Br, code.EndCurrentLoop);

            return(Unit.Create());
        }
Ejemplo n.º 2
0
        public override bool VisitBreakStatement(BreakAST breakStm)
        {
            var other = _other as BreakAST;

            if (other == null)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 3
0
        public override bool VisitBreakStatement(BreakAST breakStm)
        {
            breakStm.CurrentScope = _scope;

            if (!_scope.IsInLoop)
            {
                _errorListener.Add(new AnalysisError(AnalysisError.LoadMessage("Break"), breakStm.Line, breakStm.Columns));
                breakStm.ReturnType = TigerType.GetType <ErrorType>();
                return(false);
            }
            breakStm.BreakeableLoop = _scope.ContainerLoop;
            breakStm.ReturnType     = TigerType.GetType <NoType>();
            return(true);
        }
Ejemplo n.º 4
0
        private static ASTNode MemberMethod(bool isCycle)
        {
            ASTNode node;

            if (!isRawToken)
            {
                GetNextToken();
            }
            else
            {
                isRawToken = false;
            }
            switch (curTok.token)
            {
            case Tokens.Token.SEMILICON:
                break;

            case Tokens.Token.TYPE:
                node = ParseType(false, false);
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.ID:
                node = ParseId("", false);
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.CREMENT:
                node = ParseCrement();
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.K_FOR:
                return(ParseFor());

            case Tokens.Token.K_IF:
                bufferTok = curTok;
                return(ParseIf());

            case Tokens.Token.K_ELSE:
                if (bufferTok.token != Tokens.Token.K_IF)
                {
                    ConsoleHelper.WriteErrorAST("No condition if", curTok.y, curTok.x);
                }
                return(ParseElse());

            case Tokens.Token.K_WHILE:
                return(ParseWhile());

            case Tokens.Token.K_CONTINUE:
            case Tokens.Token.K_BREAK:
                if (!isCycle)
                {
                    ConsoleHelper.WriteErrorAST("No external loop to interrupt or continue", curTok.y, curTok.x);
                }
                if (curTok.token == Tokens.Token.K_BREAK)
                {
                    node = new BreakAST();
                }
                else
                {
                    node = new ContinueAST();
                }

                GetNextToken();
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.K_RETURN:
                node = ParseReturn();
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.CONSOLE:
                node = ParseConsoleCommand();
                GetNextToken();
                CheckupClosedToken(Tokens.Token.SEMILICON);
                return(node);

            case Tokens.Token.BRACE_R:
                return(null);

            default:
                return(null);
            }
            return(null);
        }
Ejemplo n.º 5
0
 public abstract T VisitBreakStatement(BreakAST breakStm);