Skip to content

Commit 0863114

Browse files
committed
Include the statements on the LHS of a binop when desugaring. Closes #117.
1 parent e6fa75a commit 0863114

File tree

1 file changed

+57
-56
lines changed

1 file changed

+57
-56
lines changed

src/boot/fe/item.ml

Lines changed: 57 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -507,68 +507,69 @@ and parse_stmts (ps:pstate) : Ast.stmt array =
507507

508508
| _ ->
509509
let (lstmts, lval) = ctxt "stmt: lval" parse_lval ps in
510-
begin
511-
match peek ps with
510+
let stmts =
511+
match peek ps with
512512

513-
SEMI -> (bump ps; lstmts)
513+
SEMI -> (bump ps; [| |])
514514

515-
| EQ -> parse_init lval ps
515+
| EQ -> parse_init lval ps
516516

517-
| OPEQ binop_token ->
518-
bump ps;
519-
let (stmts, rhs) =
520-
ctxt "stmt: opeq rhs" parse_expr_atom ps
521-
in
522-
let binop =
523-
match binop_token with
524-
PLUS -> Ast.BINOP_add
525-
| MINUS -> Ast.BINOP_sub
526-
| STAR -> Ast.BINOP_mul
527-
| SLASH -> Ast.BINOP_div
528-
| PERCENT -> Ast.BINOP_mod
529-
| AND -> Ast.BINOP_and
530-
| OR -> Ast.BINOP_or
531-
| CARET -> Ast.BINOP_xor
532-
| LSL -> Ast.BINOP_lsl
533-
| LSR -> Ast.BINOP_lsr
534-
| ASR -> Ast.BINOP_asr
535-
| _ -> raise (err "unknown opeq token" ps)
536-
in
537-
expect ps SEMI;
538-
spans ps stmts apos
539-
(Ast.STMT_copy_binop (lval, binop, rhs))
517+
| OPEQ binop_token ->
518+
bump ps;
519+
let (stmts, rhs) =
520+
ctxt "stmt: opeq rhs" parse_expr_atom ps
521+
in
522+
let binop =
523+
match binop_token with
524+
PLUS -> Ast.BINOP_add
525+
| MINUS -> Ast.BINOP_sub
526+
| STAR -> Ast.BINOP_mul
527+
| SLASH -> Ast.BINOP_div
528+
| PERCENT -> Ast.BINOP_mod
529+
| AND -> Ast.BINOP_and
530+
| OR -> Ast.BINOP_or
531+
| CARET -> Ast.BINOP_xor
532+
| LSL -> Ast.BINOP_lsl
533+
| LSR -> Ast.BINOP_lsr
534+
| ASR -> Ast.BINOP_asr
535+
| _ -> raise (err "unknown opeq token" ps)
536+
in
537+
expect ps SEMI;
538+
spans ps stmts apos
539+
(Ast.STMT_copy_binop (lval, binop, rhs))
540540

541-
| LARROW ->
542-
bump ps;
543-
let (stmts, rhs) = ctxt "stmt: recv rhs" parse_lval ps in
544-
let _ = expect ps SEMI in
545-
spans ps stmts apos (Ast.STMT_recv (lval, rhs))
541+
| LARROW ->
542+
bump ps;
543+
let (stmts, rhs) = ctxt "stmt: recv rhs" parse_lval ps in
544+
let _ = expect ps SEMI in
545+
spans ps stmts apos (Ast.STMT_recv (lval, rhs))
546546

547-
| SEND ->
548-
bump ps;
549-
let (stmts, rhs) =
550-
ctxt "stmt: send rhs" parse_expr_atom ps
551-
in
552-
let _ = expect ps SEMI in
553-
let bpos = lexpos ps in
554-
let (src, copy) = match rhs with
555-
Ast.ATOM_lval lv -> (lv, [| |])
556-
| _ ->
557-
let (_, tmp, tempdecl) =
558-
build_tmp ps slot_auto apos bpos
559-
in
560-
let copy = span ps apos bpos
561-
(Ast.STMT_copy (tmp, Ast.EXPR_atom rhs)) in
562-
((clone_lval ps tmp), [| tempdecl; copy |])
563-
in
564-
let send =
565-
span ps apos bpos
566-
(Ast.STMT_send (lval, src))
567-
in
568-
Array.concat [ stmts; copy; [| send |] ]
547+
| SEND ->
548+
bump ps;
549+
let (stmts, rhs) =
550+
ctxt "stmt: send rhs" parse_expr_atom ps
551+
in
552+
let _ = expect ps SEMI in
553+
let bpos = lexpos ps in
554+
let (src, copy) = match rhs with
555+
Ast.ATOM_lval lv -> (lv, [| |])
556+
| _ ->
557+
let (_, tmp, tempdecl) =
558+
build_tmp ps slot_auto apos bpos
559+
in
560+
let copy = span ps apos bpos
561+
(Ast.STMT_copy (tmp, Ast.EXPR_atom rhs)) in
562+
((clone_lval ps tmp), [| tempdecl; copy |])
563+
in
564+
let send =
565+
span ps apos bpos
566+
(Ast.STMT_send (lval, src))
567+
in
568+
Array.concat [ stmts; copy; [| send |] ]
569569

570-
| _ -> raise (unexpected ps)
571-
end
570+
| _ -> raise (unexpected ps)
571+
in
572+
Array.append lstmts stmts
572573

573574

574575
and parse_ty_param (iref:int ref) (ps:pstate) : Ast.ty_param identified =

0 commit comments

Comments
 (0)