X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2Fcomponents%2Fng_library%2FnCicLibrary.ml;h=b509ce813fd8997c713426ffba6301311328573d;hb=0b2cf1b25d45ffb80b27416e057a58e3dc3f257d;hp=a7129177eba6f39d1b7691940ccd1b075dbd3394;hpb=d72aaf7d3c12ecc70208a896e08b120b5031a7cb;p=helm.git diff --git a/matita/components/ng_library/nCicLibrary.ml b/matita/components/ng_library/nCicLibrary.ml index a7129177e..b509ce813 100644 --- a/matita/components/ng_library/nCicLibrary.ml +++ b/matita/components/ng_library/nCicLibrary.ml @@ -146,10 +146,11 @@ let init = load_db;; class virtual status = object - inherit NCic.status + inherit NCicExtraction.status val timestamp = (time0 : timestamp) method timestamp = timestamp method set_timestamp v = {< timestamp = v >} + (*CSC: bug here, we are not copying the NCicExtraction part of the status *) end let time_travel0 (sto,ali) = @@ -215,7 +216,7 @@ module type SerializerType = val dependencies_of: baseuri:NUri.uri -> string list end -module Serializer(D: sig type dumpable_s val get: dumpable_s -> dumpable_status val set: dumpable_s -> dumpable_status -> dumpable_s end) = +module Serializer(D: sig type dumpable_s = private #dumpable_status end) = struct type dumpable_status = D.dumpable_s type 'a register_type = @@ -247,7 +248,6 @@ module Serializer(D: sig type dumpable_s val get: dumpable_s -> dumpable_status end let serialize ~baseuri status = - let status = D.get status in let ch = open_out (ng_path_of_baseuri baseuri) in Marshal.to_channel ch (magic,(status#dump.dependencies,status#dump.objs)) []; close_out ch; @@ -265,12 +265,10 @@ module Serializer(D: sig type dumpable_s val get: dumpable_s -> dumpable_status let require2 ~baseuri ~alias_only status = try - let s = D.get status in let status = - D.set status - (s#set_dump - {s#dump with - includes = baseuri::List.filter ((<>) baseuri) s#dump.includes}) in + status#set_dump + {status#dump with + includes = baseuri::List.filter ((<>) baseuri) status#dump.includes} in let _dependencies,dump = require0 ~baseuri in List.fold_right (!require1 ~alias_only) dump status with @@ -283,7 +281,7 @@ module Serializer(D: sig type dumpable_s val get: dumpable_s -> dumpable_status let aux (baseuri,fname) ~refresh_uri_in_universe:_ ~refresh_uri_in_term:_ ~refresh_uri_in_reference:_ ~alias_only status = let baseuri = refresh_uri baseuri in - if not alias_only && List.mem baseuri (get_transitively_included (D.get status)) then status + if not alias_only && List.mem baseuri (get_transitively_included status) then status else (HLog.warn ("include " ^ (if alias_only then "alias " else "") ^ fname); let status = require2 ~baseuri ~alias_only status in @@ -293,21 +291,18 @@ module Serializer(D: sig type dumpable_s val get: dumpable_s -> dumpable_status register#run "include" aux let require ~baseuri ~fname ~alias_only status = - if not alias_only && List.mem baseuri (get_transitively_included (D.get status)) then status + if not alias_only && List.mem baseuri (get_transitively_included status) then status else (let status = if not alias_only then - let s = D.get status in - D.set status - (s#set_dump {s#dump with dependencies = fname::s#dump.dependencies}) + status#set_dump + {status#dump with dependencies = fname::status#dump.dependencies} else status in let status = require2 ~baseuri ~alias_only status in - let s = D.get status in - D.set status - (s#set_dump - {s#dump with - objs = record_include (baseuri,fname)::s#dump.objs })) + status#set_dump + {status#dump with + objs = record_include (baseuri,fname)::status#dump.objs }) end let fetch_obj status uri = @@ -330,10 +325,10 @@ let aliases_of uri = if NUri.eq uri' uri then Some nref else None) !local_aliases ;; -let add_obj status ((u,_,_,_,_) as obj) = - NCicEnvironment.check_and_add_obj status obj; - storage := (`Obj (u,obj))::!storage; - let _,height,_,_,obj = obj in +let add_obj status ((u,_,_,_,_) as orig_obj) = + NCicEnvironment.check_and_add_obj status orig_obj; + storage := (`Obj (u,orig_obj))::!storage; + let _,height,_,_,obj = orig_obj in let references = match obj with NCic.Constant (_,name,None,_,_) -> @@ -362,7 +357,14 @@ let add_obj status ((u,_,_,_,_) as obj) = ) il) in local_aliases := references @ !local_aliases; - status#set_timestamp (!storage,!local_aliases) + let status = status#set_timestamp (!storage,!local_aliases) in + (* To test extraction *) + try + ignore (Helm_registry.get "extract_haskell"); + let status,msg = NCicExtraction.haskell_of_obj status orig_obj in + prerr_endline msg; status + with + Helm_registry.Key_not_found _ -> status ;; let add_constraint status u1 u2 =