summaryrefslogtreecommitdiff
path: root/typing/env.ml
diff options
context:
space:
mode:
Diffstat (limited to 'typing/env.ml')
-rw-r--r--typing/env.ml12
1 files changed, 7 insertions, 5 deletions
diff --git a/typing/env.ml b/typing/env.ml
index 060363b2be..ddaa92e28a 100644
--- a/typing/env.ml
+++ b/typing/env.ml
@@ -719,9 +719,8 @@ let imported_units() =
let save_signature sg modname filename =
Btype.cleanup_abbrev ();
- let comps =
- components_of_module empty Subst.identity
- (Pident(Ident.create_persistent modname)) (Tmty_signature sg) in
+ Subst.reset_for_saving ();
+ let sg = Subst.signature (Subst.for_saving Subst.identity) sg in
let oc = open_out_bin filename in
try
output_string oc cmi_magic_number;
@@ -730,16 +729,19 @@ let save_signature sg modname filename =
let crc = Digest.file filename in
let crcs = (modname, crc) :: imported_units() in
output_value oc crcs;
+ close_out oc;
(* Enter signature in persistent table so that imported_unit()
will also return its crc *)
+ let comps =
+ components_of_module empty Subst.identity
+ (Pident(Ident.create_persistent modname)) (Tmty_signature sg) in
let ps =
{ ps_name = modname;
ps_sig = sg;
ps_comps = comps;
ps_crcs = crcs;
ps_filename = filename } in
- Hashtbl.add persistent_structures modname ps;
- close_out oc
+ Hashtbl.add persistent_structures modname ps
with exn ->
close_out oc;
remove_file filename;