Skip to content

Commit

Permalink
Comment why unit-erasure is needed in MiniRust
Browse files Browse the repository at this point in the history
  • Loading branch information
R1kM committed Aug 21, 2024
1 parent 684c18e commit a62fa60
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/PrintMiniRust.ml
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,11 @@ and print_expression_with_block env (e: expr): document =
and print_statements env (e: expr): document =
match e with
| Let ({ typ = Unit; _ }, Unit, e2) ->
(* Special-case: if we have a unit (probably due to an erased node), we omit it *)
(* Special-case: if we have a unit (probably due to an erased node), we omit it.
Note, there already is a similar pass (Simplify.let_to_sequence) operating
on Ast, however, the Ast to MiniRust translation reintroduces unit statements,
e.g., when erasing push/pop_frame or free nodes. We thus need an additional
handling here *)
print_statements (push env (`GoneUnit)) e2
| Let ({ typ = Unit; _ }, e1, e2) ->
print_expr env max_int e1 ^^ semi ^^ hardline ^^
Expand Down

0 comments on commit a62fa60

Please sign in to comment.