diff options
| author | Graydon Hoare <[email protected]> | 2010-10-19 16:33:11 -0700 |
|---|---|---|
| committer | Graydon Hoare <[email protected]> | 2010-10-19 16:33:11 -0700 |
| commit | 71b1f1d117e2444e4588c67c9aa2772e74ad5678 (patch) | |
| tree | 5ccb7e687c571aa53b5c333e041585daf433912f /src/comp/front/parser.rs | |
| parent | Teach trans to allocate, initialize and load from local variables. (diff) | |
| download | rust-71b1f1d117e2444e4588c67c9aa2772e74ad5678.tar.xz rust-71b1f1d117e2444e4588c67c9aa2772e74ad5678.zip | |
Parse and translate assignments.
Diffstat (limited to 'src/comp/front/parser.rs')
| -rw-r--r-- | src/comp/front/parser.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/comp/front/parser.rs b/src/comp/front/parser.rs index 68603e4a..bf8ca6ca 100644 --- a/src/comp/front/parser.rs +++ b/src/comp/front/parser.rs @@ -564,6 +564,20 @@ io fn parse_or_expr(parser p) -> @ast.expr { ret parse_binary_exprs(p, sub, vec(tup(token.OROR, ast.or))); } +io fn parse_assign_expr(parser p) -> @ast.expr { + auto lo = p.get_span(); + auto lhs = parse_or_expr(p); + alt (p.peek()) { + case (token.EQ) { + p.bump(); + auto rhs = parse_expr(p); + ret @spanned(lo, rhs.span, + ast.expr_assign(lhs, rhs, none[@ast.ty])); + } + } + ret lhs; +} + io fn parse_if_expr(parser p) -> @ast.expr { auto lo = p.get_span(); auto hi = lo; @@ -597,7 +611,7 @@ io fn parse_expr(parser p) -> @ast.expr { ret parse_if_expr(p); } case (_) { - ret parse_or_expr(p); + ret parse_assign_expr(p); } } |