Mercurial > projects > dang
diff sema/Visitor.d @ 11:642c6a998fd9
Support for while statements and fixed scope for if
author | Anders Halager <halager@gmail.com> |
---|---|
date | Fri, 18 Apr 2008 13:45:39 +0200 |
parents | 2c5a8f4c254a |
children | e331e4e816e4 |
line wrap: on
line diff
--- a/sema/Visitor.d Fri Apr 18 13:01:11 2008 +0200 +++ b/sema/Visitor.d Fri Apr 18 13:45:39 2008 +0200 @@ -47,6 +47,8 @@ return visitExpStmt(cast(ExpStmt)stmt); case StmtType.If: return visitIfStmt(cast(IfStmt)stmt); + case StmtType.While: + return visitWhileStmt(cast(WhileStmt)stmt); default: throw new Exception("Unknown statement type"); } @@ -124,7 +126,20 @@ StmtT visitIfStmt(IfStmt s) { visitExp(s.cond); - foreach (stmt; s.then) + foreach (stmt; s.then_body) + visitStmt(stmt); + foreach (stmt; s.else_body) + visitStmt(stmt); + static if (is(StmtT == void)) + return; + else + return StmtT.init; + } + + StmtT visitWhileStmt(WhileStmt s) + { + visitExp(s.cond); + foreach (stmt; s.stmts) visitStmt(stmt); static if (is(StmtT == void)) return;