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
15 changes: 11 additions & 4 deletions src/definedness.ml
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,18 @@ let close (f,d) =
(* One traversal for each syntactic category, named by that category *)

let rec exp msgs e : f = match e.it with
(* Eager uses are either first-class uses of a variable: *)
| VarE i -> M.singleton i.it Eager
(* Or anything that is occurring in a call (as this may call a closure): *)
| CallE (e1, ts, e2) -> eagerify (exps msgs [e1; e2])
(* And break and return can be thought of as calling a continuation: *)
| BreakE (i, e) -> eagerify (exp msgs e)
| RetE e -> eagerify (exp msgs e)

(* Uses are delayed by function expressions *)
| FuncE (_, s, tp, p, t, e) -> delayify (exp msgs e /// pat msgs p)

(* The rest remaining cases just collect the uses of subexpressions: *)
| LitE l -> M.empty
| PrimE _ -> M.empty
| UnE (_, uo, e) -> exp msgs e
Expand All @@ -97,8 +108,6 @@ let rec exp msgs e : f = match e.it with
| AssignE (e1, e2) -> exps msgs [e1; e2]
| ArrayE (m, es) -> exps msgs es
| IdxE (e1, e2) -> exps msgs [e1; e2]
| FuncE (_, s, tp, p, t, e) -> delayify (exp msgs e /// pat msgs p)
| CallE (e1, ts, e2) -> eagerify (exps msgs [e1; e2])
| BlockE ds -> decs msgs ds
| NotE e -> exp msgs e
| AndE (e1, e2) -> exps msgs [e1; e2]
Expand All @@ -110,8 +119,6 @@ let rec exp msgs e : f = match e.it with
| LoopE (e1, Some e2) -> exps msgs [e1; e2]
| ForE (p, e1, e2) -> exp msgs e1 ++ (exp msgs e2 /// pat msgs p)
| LabelE (i, t, e) -> exp msgs e
| BreakE (i, e) -> exp msgs e
| RetE e -> exp msgs e
| AsyncE e -> exp msgs e
| AwaitE e -> exp msgs e
| AssertE e -> exp msgs e
Expand Down
3 changes: 0 additions & 3 deletions test/fail/ok/branch-before-define.run-ir.ok

This file was deleted.

3 changes: 0 additions & 3 deletions test/fail/ok/branch-before-define.run-low.ok

This file was deleted.

3 changes: 0 additions & 3 deletions test/fail/ok/branch-before-define.run.ok

This file was deleted.

1 change: 1 addition & 0 deletions test/fail/ok/branch-before-define.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
branch-before-define.as:4.7-4.40: definedness error, cannot use g before x has been defined
1 change: 0 additions & 1 deletion test/fail/ok/branch-before-define.wasm-run.ok

This file was deleted.

3 changes: 0 additions & 3 deletions test/fail/ok/return-before-define.run-ir.ok

This file was deleted.

3 changes: 0 additions & 3 deletions test/fail/ok/return-before-define.run-low.ok

This file was deleted.

3 changes: 0 additions & 3 deletions test/fail/ok/return-before-define.run.ok

This file was deleted.

1 change: 1 addition & 0 deletions test/fail/ok/return-before-define.tc.ok
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
return-before-define.as:3.5-3.34: definedness error, cannot use g before x has been defined
1 change: 0 additions & 1 deletion test/fail/ok/return-before-define.wasm-run.ok

This file was deleted.