diff options
| author | Marijn Haverbeke <[email protected]> | 2011-03-25 16:28:16 +0100 |
|---|---|---|
| committer | Marijn Haverbeke <[email protected]> | 2011-03-27 14:11:23 +0200 |
| commit | 6ecdc04788334420db05d9894e18d1d7a605ab4f (patch) | |
| tree | aba6169530f041b59507490b9ab28b1ac2835d18 /src/comp/front | |
| parent | shootout: Hoist out the vector indexing on nbody; don't rely on LICM, which i... (diff) | |
| download | rust-6ecdc04788334420db05d9894e18d1d7a605ab4f.tar.xz rust-6ecdc04788334420db05d9894e18d1d7a605ab4f.zip | |
Add support for break and cont to rustc
Testing proper cleanup is hampered by
https://github.com/graydon/rust/issues/293
Diffstat (limited to 'src/comp/front')
| -rw-r--r-- | src/comp/front/ast.rs | 2 | ||||
| -rw-r--r-- | src/comp/front/lexer.rs | 2 | ||||
| -rw-r--r-- | src/comp/front/parser.rs | 10 | ||||
| -rw-r--r-- | src/comp/front/token.rs | 6 |
4 files changed, 20 insertions, 0 deletions
diff --git a/src/comp/front/ast.rs b/src/comp/front/ast.rs index c1e363b7..b1dbd80e 100644 --- a/src/comp/front/ast.rs +++ b/src/comp/front/ast.rs @@ -246,6 +246,8 @@ tag expr_ { expr_path(path, option.t[def], ann); expr_ext(path, vec[@expr], option.t[@expr], @expr, ann); expr_fail; + expr_break; + expr_cont; expr_ret(option.t[@expr]); expr_put(option.t[@expr]); expr_be(@expr); diff --git a/src/comp/front/lexer.rs b/src/comp/front/lexer.rs index a793a920..878940b7 100644 --- a/src/comp/front/lexer.rs +++ b/src/comp/front/lexer.rs @@ -111,6 +111,8 @@ impure fn new_reader(io.reader rdr, str filename) -> reader keywords.insert("for", token.FOR); keywords.insert("each", token.EACH); + keywords.insert("break", token.BREAK); + keywords.insert("cont", token.CONT); keywords.insert("put", token.PUT); keywords.insert("ret", token.RET); keywords.insert("be", token.BE); diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index dad41e2e..c8130b0b 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -829,6 +829,16 @@ impure fn parse_bottom_expr(parser p) -> @ast.expr { } } + case (token.BREAK) { + p.bump(); + ex = ast.expr_break; + } + + case (token.CONT) { + p.bump(); + ex = ast.expr_cont; + } + case (token.PUT) { p.bump(); alt (p.peek()) { diff --git a/src/comp/front/token.rs b/src/comp/front/token.rs index 9d5f0dfd..bb0cea80 100644 --- a/src/comp/front/token.rs +++ b/src/comp/front/token.rs @@ -74,6 +74,9 @@ tag token { ALT; CASE; + BREAK; + CONT; + FAIL; DROP; @@ -242,6 +245,9 @@ fn to_str(token t) -> str { case (ALT) { ret "alt"; } case (CASE) { ret "case"; } + case (BREAK) { ret "break"; } + case (CONT) { ret "cont"; } + case (FAIL) { ret "fail"; } case (DROP) { ret "drop"; } |