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
6 changes: 5 additions & 1 deletion src/definedness.ml
Original file line number Diff line number Diff line change
Expand Up @@ -198,4 +198,8 @@ and decs msgs decs : f =
M.disjoint_union (map_of_set Eager e) (map_of_set Delayed d) |>
M.filter (fun v _ -> M.mem v defWhen = false)

let check_prog msgs prog = ignore (decs msgs prog.it)
let check_prog prog =
Diag.with_message_store (fun msgs ->
ignore (decs msgs prog.it);
Some ()
)
2 changes: 1 addition & 1 deletion src/definedness.mli
Original file line number Diff line number Diff line change
@@ -1 +1 @@
val check_prog : Diag.msg_store -> Syntax.prog -> unit
val check_prog : Syntax.prog -> unit Diag.result
14 changes: 12 additions & 2 deletions src/pipeline.ml
Original file line number Diff line number Diff line change
Expand Up @@ -137,6 +137,14 @@ let typecheck_library senv filename prog : Typing.scope Diag.result =
phase "Checking" prog.Source.note;
Typing.check_library senv (filename, prog)

(* Definedness checking *)

let defindeness_prog prog : unit Diag.result =
phase "Definedness" prog.Source.note;
Definedness.check_prog prog

let defindeness_progs progs : unit Diag.result =
Diag.traverse_ defindeness_prog progs

(* Imported file loading *)

Expand Down Expand Up @@ -189,11 +197,12 @@ let chase_imports senv0 imports : (Syntax.libraries * Typing.scope) Diag.result
Diag.bind (Resolve_import.resolve prog base) (fun more_imports ->
Diag.bind (go_set more_imports) (fun () ->
Diag.bind (typecheck_library !senv f prog) (fun sscope ->
Diag.bind (defindeness_prog prog) (fun () ->
libraries := (f, prog) :: !libraries; (* NB: Conceptually an append *)
senv := Typing.adjoin_scope !senv sscope;
pending := remove f !pending;
Diag.return ()
)))))
))))))
end
and go_set todo = Diag.traverse_ go (elements todo)
in
Expand All @@ -208,8 +217,9 @@ let load_progs parse senv : load_result =
(List.map snd rs) in
Diag.bind (chase_imports senv libraries) (fun (libraries, senv') ->
Diag.bind (typecheck_progs senv' progs') (fun senv'' ->
Diag.bind (defindeness_progs progs') (fun _ ->
Diag.return (libraries, progs', senv'')
))))
)))))

let load_decl parse_one senv : load_decl_result =
Diag.bind parse_one (fun parsed ->
Expand Down
2 changes: 0 additions & 2 deletions src/typing.ml
Original file line number Diff line number Diff line change
Expand Up @@ -1492,7 +1492,6 @@ let infer_prog scope prog : (T.typ * scope) Diag.result =
(fun prog ->
let env = env_of_scope msgs scope in
let res = infer_block env prog.it prog.at in
Definedness.check_prog msgs prog;
res
)
prog
Expand All @@ -1513,7 +1512,6 @@ let check_library scope (filename, prog) : scope Diag.result =
(fun prog ->
let env = env_of_scope msgs scope in
let typ = infer_library env prog.it prog.at in
Definedness.check_prog msgs prog;
library_scope filename typ
)
prog
Expand Down
63 changes: 0 additions & 63 deletions test/fail/ok/ast81-clash.run-ir.ok

This file was deleted.

63 changes: 0 additions & 63 deletions test/fail/ok/ast81-clash.run-low.ok

This file was deleted.

63 changes: 0 additions & 63 deletions test/fail/ok/ast81-clash.run.ok

This file was deleted.

2 changes: 1 addition & 1 deletion test/fail/ok/ast81-clash.tc.ok
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Fatal error: exception Env.Make(X).Clash("x")
ast81-clash.as:8.11-8.12: type error, duplicate definition for x in block
63 changes: 0 additions & 63 deletions test/fail/ok/ast81-clash.wasm.stderr.ok

This file was deleted.

25 changes: 0 additions & 25 deletions test/fail/ok/decl-clash.run-ir.ok

This file was deleted.

25 changes: 0 additions & 25 deletions test/fail/ok/decl-clash.run-low.ok

This file was deleted.

Loading