Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 10 additions & 3 deletions src/await.ml
Original file line number Diff line number Diff line change
Expand Up @@ -418,12 +418,19 @@ and c_exp' context exp k =
| NewObjE _ -> exp

and c_block context decs exp k =
declare_decs decs (c_decs context decs (meta T.unit (fun _ -> c_exp context exp k)))
let is_typ dec =
match dec.it with
| TypD _ -> true
| _ -> false
in
let (typ_decs,val_decs) = List.partition is_typ decs in
blockE typ_decs
(declare_decs val_decs (c_decs context val_decs (meta T.unit (fun _ -> c_exp context exp k))))

and c_dec context dec (k:kont) =
match dec.it with
| TypD _ ->
k -@- unitE
assert false
| LetD (pat,exp) ->
let patenv,pat' = rename_pat pat in
let block exp =
Expand Down Expand Up @@ -462,7 +469,7 @@ and c_decs context decs k =

and declare_dec dec exp : exp =
match dec.it with
| TypD _ -> exp
| TypD _ -> assert false
| LetD (pat, _) -> declare_pat pat exp
| VarD (id, exp1) -> declare_id id (T.Mut (typ exp1)) exp

Expand Down
3 changes: 3 additions & 0 deletions src/construct.ml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@ let dec_eff dec = match dec.it with
| LetD (_,e) | VarD (_,e) -> eff e

let blockE decs exp =
match decs with
| [] -> exp
| _ ->
let es = List.map dec_eff decs in
let typ = typ exp in
let e = List.fold_left max_eff (eff exp) es in
Expand Down
13 changes: 13 additions & 0 deletions test/run-dfinity/AST-66.as
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// test cps conversion of async blocks with type decs

let _ = async{
type T = Null;
await { async (null:T) };
};

let _ = async{
type T = U;
let _ = await { async (null:T) };
type U = Null;
await { async (null:T) };
};
1 change: 1 addition & 0 deletions test/run-dfinity/ok/AST-66.dvm-run.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Top-level code done.