Skip to content

Commit bb243b3

Browse files
committed
Desugar the head stmts all the way out of STMT_for, rather than stashing them in the node. That's only necessary for STMT_while.
1 parent 15ef6c1 commit bb243b3

File tree

6 files changed

+13
-15
lines changed

6 files changed

+13
-15
lines changed

src/boot/fe/ast.ml

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ and stmt_for_each =
283283
and stmt_for =
284284
{
285285
for_slot: (slot identified * ident);
286-
for_seq: ((stmt array) * lval);
286+
for_seq: lval;
287287
for_body: block;
288288
}
289289

@@ -1098,15 +1098,14 @@ and fmt_stmt_body (ff:Format.formatter) (s:stmt) : unit =
10981098

10991099
| STMT_for sfor ->
11001100
let (slot, ident) = sfor.for_slot in
1101-
let (stmts, lval) = sfor.for_seq in
1101+
let lval = sfor.for_seq in
11021102
begin
11031103
fmt_obox ff;
11041104
fmt ff "for (";
11051105
fmt_slot ff slot.node;
11061106
fmt ff " ";
11071107
fmt_ident ff ident;
11081108
fmt ff " in ";
1109-
fmt_stmts ff stmts;
11101109
fmt_lval ff lval;
11111110
fmt ff ") ";
11121111
fmt_obr ff;

src/boot/fe/item.ml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -369,17 +369,18 @@ and parse_stmts (ps:pstate) : Ast.stmt array =
369369
let inner ps =
370370
let slot = (parse_identified_slot_and_ident false ps) in
371371
let _ = (expect ps IN) in
372-
let lval = (parse_lval ps) in
373-
(slot, lval) in
374-
let (slot, seq) =
372+
(slot, (parse_lval ps))
373+
in
374+
let (slot, (stmts, lval)) =
375375
ctxt "stmts: for head" (bracketed LPAREN RPAREN inner) ps
376376
in
377377
let body_block = ctxt "stmts: for body" parse_block ps in
378378
let bpos = lexpos ps in
379-
[| span ps apos bpos
380-
(Ast.STMT_for
379+
Array.append stmts
380+
[| span ps apos bpos
381+
(Ast.STMT_for
381382
{ Ast.for_slot = slot;
382-
Ast.for_seq = seq;
383+
Ast.for_seq = lval;
383384
Ast.for_body = body_block; }) |]
384385
end
385386

src/boot/me/trans.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4021,10 +4021,9 @@ let trans_visitor
40214021
let dst_slot_id = (fst (fo.Ast.for_slot)).id in
40224022
let dst_slot = get_slot cx dst_slot_id in
40234023
let dst_cell = cell_of_block_slot dst_slot_id in
4024-
let (head_stmts, seq) = fo.Ast.for_seq in
4024+
let seq = fo.Ast.for_seq in
40254025
let (seq_cell, seq_ty) = trans_lval seq in
40264026
let unit_ty = seq_unit_ty seq_ty in
4027-
Array.iter trans_stmt head_stmts;
40284027
iter_seq_parts ty_params seq_cell seq_cell unit_ty
40294028
begin
40304029
fun _ src_cell unit_ty _ ->

src/boot/me/type.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1263,7 +1263,7 @@ let process_crate (cx:ctxt) (crate:Ast.crate) : unit =
12631263
let mem_tv = ref TYSPEC_all in
12641264
let seq_tv = ref (TYSPEC_collection mem_tv) in
12651265
let (si, _) = fo.Ast.for_slot in
1266-
let (_, seq) = fo.Ast.for_seq in
1266+
let seq = fo.Ast.for_seq in
12671267
unify_lval rval_ctx seq seq_tv;
12681268
unify_slot lval_ctx si.node (Some si.id) mem_tv
12691269

src/boot/me/typestate.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -533,7 +533,7 @@ let condition_assigning_visitor
533533

534534
| Ast.STMT_for fo ->
535535
let (si, _) = fo.Ast.for_slot in
536-
let (_, lval) = fo.Ast.for_seq in
536+
let lval = fo.Ast.for_seq in
537537
let precond = slot_inits (lval_slots cx lval) in
538538
let block_entry_state = [| Constr_init si.id |] in
539539
raise_pre_post_cond s.id precond;

src/boot/me/walk.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,9 +419,8 @@ and walk_stmt
419419
(s:Ast.stmt_for)
420420
: unit =
421421
let (si,_) = s.Ast.for_slot in
422-
let (ss,lv) = s.Ast.for_seq in
422+
let lv = s.Ast.for_seq in
423423
walk_slot_identified v si;
424-
Array.iter (walk_stmt v) ss;
425424
walk_lval v lv;
426425
walk_block v s.Ast.for_body
427426
in

0 commit comments

Comments
 (0)