123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354(*
* Copyright (c) 2014 Leo White <leo@lpw25.net>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*)openOr_errortypet=Odoc_model.Lang.Compilation_unit.tletroot(t:Odoc_model.Lang.Compilation_unit.t)=matcht.Odoc_model.Lang.Compilation_unit.idwith|`Root(root,_)->root|_->assertfalseletsavefilet=Fs.Directory.mkdir_p(Fs.File.dirnamefile);letoc=open_out_bin(Fs.File.to_stringfile)inRoot.saveoc(roott);Marshal.to_channeloct[];close_outocletload=letunits=Hashtbl.create23(* because. *)infunfile->letfile=Fs.File.to_stringfileinmatchHashtbl.findunitsfilewith|unit->Okunit|exceptionNot_found->tryletic=open_in_binfileinlet_root=Root.loadfileicinletres=Marshal.from_channelicinclose_inic;Hashtbl.addunitsfileres;Okreswithexn->letmsg=Printf.sprintf"Error while unmarshalling %S: %s\n%!"file(matchexnwith|Failures->s|_->Printexc.to_stringexn)inError(`Msgmsg)