diff options
| author | Graydon Hoare <[email protected]> | 2011-02-14 18:17:31 -0800 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2011-02-14 18:17:31 -0800 |
| commit | 4a72a23171d87fb5a0f9b7ad039944856b93bf0f (patch) | |
| tree | c89be3ff4f534ad3d506456a818b5ab7f92a591d /src/comp/front/parser.rs | |
| parent | Add basic front-end support for expr_put. (diff) | |
| download | rust-4a72a23171d87fb5a0f9b7ad039944856b93bf0f.tar.xz rust-4a72a23171d87fb5a0f9b7ad039944856b93bf0f.zip | |
Add basic front-end support for 'for each' loops.
Diffstat (limited to 'src/comp/front/parser.rs')
| -rw-r--r-- | src/comp/front/parser.rs | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index a779d013..ddadc789 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -1049,8 +1049,14 @@ impure fn parse_head_local(parser p) -> @ast.decl { impure fn parse_for_expr(parser p) -> @ast.expr { auto lo = p.get_span(); auto hi = lo; + auto is_each = false; expect(p, token.FOR); + if (p.peek() == token.EACH) { + is_each = true; + p.bump(); + } + expect (p, token.LPAREN); auto decl = parse_head_local(p); @@ -1060,9 +1066,16 @@ impure fn parse_for_expr(parser p) -> @ast.expr { expect(p, token.RPAREN); auto body = parse_block(p); hi = body.span; - ret @spanned(lo, hi, ast.expr_for(decl, seq, body, ast.ann_none)); + if (is_each) { + ret @spanned(lo, hi, ast.expr_for_each(decl, seq, body, + ast.ann_none)); + } else { + ret @spanned(lo, hi, ast.expr_for(decl, seq, body, + ast.ann_none)); + } } + impure fn parse_while_expr(parser p) -> @ast.expr { auto lo = p.get_span(); auto hi = lo; @@ -1422,6 +1435,8 @@ fn stmt_ends_with_semi(@ast.stmt stmt) -> bool { case (ast.expr_cast(_,_,_)) { ret true; } case (ast.expr_if(_,_,_,_,_)) { ret false; } case (ast.expr_for(_,_,_,_)) { ret false; } + case (ast.expr_for_each(_,_,_,_)) + { ret false; } case (ast.expr_while(_,_,_)) { ret false; } case (ast.expr_do_while(_,_,_)) { ret false; } case (ast.expr_alt(_,_,_)) { ret false; } |