diff options
Diffstat (limited to 'typing/env.ml')
| -rw-r--r-- | typing/env.ml | 12 |
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; |
