aboutsummaryrefslogtreecommitdiff
path: root/src/boot
diff options
context:
space:
mode:
authorPatrick Walton <[email protected]>2010-07-19 17:18:53 -0700
committerPatrick Walton <[email protected]>2010-07-19 17:52:31 -0700
commit0863114a051843e97c0ada81dbe09a4bffa4d348 (patch)
tree34dba68fea9484a024335f27cadfd7b9f71eb789 /src/boot
parentFix argv.rs under the LLVM compiler. (diff)
downloadrust-0863114a051843e97c0ada81dbe09a4bffa4d348.tar.xz
rust-0863114a051843e97c0ada81dbe09a4bffa4d348.zip
Include the statements on the LHS of a binop when desugaring. Closes #117.
Diffstat (limited to 'src/boot')
-rw-r--r--src/boot/fe/item.ml113
1 files changed, 57 insertions, 56 deletions
diff --git a/src/boot/fe/item.ml b/src/boot/fe/item.ml
index d0042ebf..69fe5fc2 100644
--- a/src/boot/fe/item.ml
+++ b/src/boot/fe/item.ml
@@ -507,68 +507,69 @@ and parse_stmts (ps:pstate) : Ast.stmt array =
| _ ->
let (lstmts, lval) = ctxt "stmt: lval" parse_lval ps in
- begin
- match peek ps with
+ let stmts =
+ match peek ps with
- SEMI -> (bump ps; lstmts)
+ SEMI -> (bump ps; [| |])
- | EQ -> parse_init lval ps
+ | EQ -> parse_init lval ps
- | OPEQ binop_token ->
- bump ps;
- let (stmts, rhs) =
- ctxt "stmt: opeq rhs" parse_expr_atom ps
- in
- let binop =
- match binop_token with
- PLUS -> Ast.BINOP_add
- | MINUS -> Ast.BINOP_sub
- | STAR -> Ast.BINOP_mul
- | SLASH -> Ast.BINOP_div
- | PERCENT -> Ast.BINOP_mod
- | AND -> Ast.BINOP_and
- | OR -> Ast.BINOP_or
- | CARET -> Ast.BINOP_xor
- | LSL -> Ast.BINOP_lsl
- | LSR -> Ast.BINOP_lsr
- | ASR -> Ast.BINOP_asr
- | _ -> raise (err "unknown opeq token" ps)
- in
- expect ps SEMI;
- spans ps stmts apos
- (Ast.STMT_copy_binop (lval, binop, rhs))
+ | OPEQ binop_token ->
+ bump ps;
+ let (stmts, rhs) =
+ ctxt "stmt: opeq rhs" parse_expr_atom ps
+ in
+ let binop =
+ match binop_token with
+ PLUS -> Ast.BINOP_add
+ | MINUS -> Ast.BINOP_sub
+ | STAR -> Ast.BINOP_mul
+ | SLASH -> Ast.BINOP_div
+ | PERCENT -> Ast.BINOP_mod
+ | AND -> Ast.BINOP_and
+ | OR -> Ast.BINOP_or
+ | CARET -> Ast.BINOP_xor
+ | LSL -> Ast.BINOP_lsl
+ | LSR -> Ast.BINOP_lsr
+ | ASR -> Ast.BINOP_asr
+ | _ -> raise (err "unknown opeq token" ps)
+ in
+ expect ps SEMI;
+ spans ps stmts apos
+ (Ast.STMT_copy_binop (lval, binop, rhs))
- | LARROW ->
- bump ps;
- let (stmts, rhs) = ctxt "stmt: recv rhs" parse_lval ps in
- let _ = expect ps SEMI in
- spans ps stmts apos (Ast.STMT_recv (lval, rhs))
+ | LARROW ->
+ bump ps;
+ let (stmts, rhs) = ctxt "stmt: recv rhs" parse_lval ps in
+ let _ = expect ps SEMI in
+ spans ps stmts apos (Ast.STMT_recv (lval, rhs))
- | SEND ->
- bump ps;
- let (stmts, rhs) =
- ctxt "stmt: send rhs" parse_expr_atom ps
- in
- let _ = expect ps SEMI in
- let bpos = lexpos ps in
- let (src, copy) = match rhs with
- Ast.ATOM_lval lv -> (lv, [| |])
- | _ ->
- let (_, tmp, tempdecl) =
- build_tmp ps slot_auto apos bpos
- in
- let copy = span ps apos bpos
- (Ast.STMT_copy (tmp, Ast.EXPR_atom rhs)) in
- ((clone_lval ps tmp), [| tempdecl; copy |])
- in
- let send =
- span ps apos bpos
- (Ast.STMT_send (lval, src))
- in
- Array.concat [ stmts; copy; [| send |] ]
+ | SEND ->
+ bump ps;
+ let (stmts, rhs) =
+ ctxt "stmt: send rhs" parse_expr_atom ps
+ in
+ let _ = expect ps SEMI in
+ let bpos = lexpos ps in
+ let (src, copy) = match rhs with
+ Ast.ATOM_lval lv -> (lv, [| |])
+ | _ ->
+ let (_, tmp, tempdecl) =
+ build_tmp ps slot_auto apos bpos
+ in
+ let copy = span ps apos bpos
+ (Ast.STMT_copy (tmp, Ast.EXPR_atom rhs)) in
+ ((clone_lval ps tmp), [| tempdecl; copy |])
+ in
+ let send =
+ span ps apos bpos
+ (Ast.STMT_send (lval, src))
+ in
+ Array.concat [ stmts; copy; [| send |] ]
- | _ -> raise (unexpected ps)
- end
+ | _ -> raise (unexpected ps)
+ in
+ Array.append lstmts stmts
and parse_ty_param (iref:int ref) (ps:pstate) : Ast.ty_param identified =