public object visitStmtBlockStmt(StmtBlock stmt) { beginScope(); resolve(stmt.statements); endScope(); return(null); }
Stmt forStatement() { consume(TokenType.LEFT_PAREN, "Expected '(' after 'for'."); Stmt initStmt; if (match(TokenType.SEMICOLON)) { initStmt = null; } else if (match(TokenType.VAR)) { initStmt = varDeclaration(); } else { initStmt = exprStatement(); } Expr condition = null; if (!check(TokenType.SEMICOLON)) { condition = expression(); } consume(TokenType.SEMICOLON, "Expected ';' after loop condition"); Expr increment = null; if (!check(TokenType.RIGHT_PAREN)) { increment = expression(); } consume(TokenType.RIGHT_PAREN, "Expected ')' after for clauses"); Stmt body = statement(); if (increment != null) { body = new StmtBlock(new List <Stmt>() { body, new StmtExpression(increment) }); } if (condition == null) { condition = new ExprLiteral(true); } body = new StmtWhile(condition, body); if (initStmt != null) { body = new StmtBlock(new List <Stmt>() { initStmt, body }); } return(body); }
public object visitStmtBlockStmt(StmtBlock stmt) { executeBlock(stmt.statements, new Enviroment(enviroment)); return(null); }