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()); }
public override bool VisitBreakStatement(BreakAST breakStm) { var other = _other as BreakAST; if (other == null) { return(false); } return(true); }
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); }
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); }
public abstract T VisitBreakStatement(BreakAST breakStm);