X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Focaml%2Fgrafite%2FgrafiteMarshal.ml;h=e786d500154f4747b0128bdcf323178793278244;hb=d3e3b22ce9cca9e4ca80f75a6bdc4c2df93efb0b;hp=8b4f8858b8bf8f3b33b0b50f0670c1499d370d80;hpb=dbb9f64a437b4abda0b9f47a527ab6135d596e28;p=helm.git diff --git a/helm/ocaml/grafite/grafiteMarshal.ml b/helm/ocaml/grafite/grafiteMarshal.ml index 8b4f8858b..e786d5001 100644 --- a/helm/ocaml/grafite/grafiteMarshal.ml +++ b/helm/ocaml/grafite/grafiteMarshal.ml @@ -23,75 +23,38 @@ * http://helm.cs.unibo.it/ *) -exception Checksum_failure of string -exception Corrupt_moo of string -exception Version_mismatch of string +(* $Id$ *) -type ast_command = (Cic.term, Cic.obj) GrafiteAst.command +type ast_command = Cic.obj GrafiteAst.command type moo = ast_command list -let marshal_flags = [] +let format_name = "grafite" + +let save_moo_to_file ~fname moo = + HMarshal.save ~fmt:format_name ~version:GrafiteAst.magic ~fname moo + +let load_moo_from_file ~fname = + let raw = HMarshal.load ~fmt:format_name ~version:GrafiteAst.magic ~fname in + (raw: moo) let rehash_cmd_uris = - let rehash_uri uri = UriManager.uri_of_string (UriManager.string_of_uri uri) in + let rehash_uri uri = + UriManager.uri_of_string (UriManager.string_of_uri uri) in function | GrafiteAst.Default (loc, name, uris) -> let uris = List.map rehash_uri uris in GrafiteAst.Default (loc, name, uris) - | GrafiteAst.Interpretation (loc, dsc, args, cic_appl_pattern) -> - let rec aux = - function - | CicNotationPt.UriPattern uri -> - CicNotationPt.UriPattern (rehash_uri uri) - | CicNotationPt.ApplPattern args -> - CicNotationPt.ApplPattern (List.map aux args) - | CicNotationPt.VarPattern _ - | CicNotationPt.ImplicitPattern as pat -> pat - in - let appl_pattern = aux cic_appl_pattern in - GrafiteAst.Interpretation (loc, dsc, args, appl_pattern) - | GrafiteAst.Coercion (loc, term, close) -> - GrafiteAst.Coercion (loc, CicUtil.rehash_term term, close) - | GrafiteAst.Notation _ - | GrafiteAst.Alias _ as cmd -> cmd + | GrafiteAst.Coercion (loc, uri, close) -> + GrafiteAst.Coercion (loc, rehash_uri uri, close) | cmd -> prerr_endline "Found a command not expected in a .moo:"; - prerr_endline (GrafiteAstPp.pp_cic_command cmd); + let obj_pp _ = assert false in + prerr_endline (GrafiteAstPp.pp_command ~obj_pp cmd); assert false -(** .moo file format - * - an integer -- magic number -- denoting the version of the dumped data - * structure. Different magic numbers stand for incompatible data structures - * - an integer -- checksum -- denoting the hash value (computed with - * Hashtbl.hash) of the string representation of the dumped data structur - * - marshalled data: list of GrafiteAst.command - *) - -let save_moo ~fname moo = - let oc = open_out fname in - let marshalled = Marshal.to_string (List.rev moo) marshal_flags in - let checksum = Hashtbl.hash marshalled in - output_binary_int oc GrafiteAst.magic; - output_binary_int oc checksum; - output_string oc marshalled; - close_out oc +let save_moo ~fname moo = save_moo_to_file ~fname (List.rev moo) let load_moo ~fname = - let ic = open_in fname in - HExtlib.finally - (fun () -> close_in ic) - (fun () -> - try - let moo_magic = input_binary_int ic in - if moo_magic <> GrafiteAst.magic then raise (Version_mismatch fname); - let moo_checksum = input_binary_int ic in - let marshalled = HExtlib.input_all ic in - let checksum = Hashtbl.hash marshalled in - if checksum <> moo_checksum then raise (Checksum_failure fname); - let (moo:moo) = - Marshal.from_string marshalled 0 - in - List.map rehash_cmd_uris moo - with End_of_file -> raise (Corrupt_moo fname)) - () + let moo = load_moo_from_file ~fname in + List.map rehash_cmd_uris moo