X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=matita%2FmatitaEngine.ml;h=133893f0d1e8cf77155f33de2b3d1fa6a0f4db47;hb=f2e7cb9757a151382ed3a70d1a610e8f729a6597;hp=9778f09007d0e88a8c99dfffb8c2afd87e875a48;hpb=876455a152c9c4d6b1afcdfbee392210b2ec6b90;p=helm.git diff --git a/matita/matitaEngine.ml b/matita/matitaEngine.ml index 9778f0900..133893f0d 100644 --- a/matita/matitaEngine.ml +++ b/matita/matitaEngine.ml @@ -100,6 +100,10 @@ let eval_ast ?do_heavy_checks ?clean_baseuri lexicon_status exception TryingToAdd of string +let out = ref ignore + +let set_callback f = out := f + let eval_from_stream ~first_statement_only ~include_paths ?(prompt=false) ?do_heavy_checks ?clean_baseuri ?(enforce_no_new_aliases=true) ?(watch_statuses=fun _ _ -> ()) lexicon_status grafite_status str cb @@ -112,16 +116,22 @@ let eval_from_stream ~first_statement_only ~include_paths ?(prompt=false) loop in if prompt then (print_string "matita> "; flush stdout); - try - let lexicon_status,ast = - GrafiteParser.parse_statement ~include_paths str lexicon_status - in + let cont = + try + Some (GrafiteParser.parse_statement ~include_paths str lexicon_status) + with + End_of_file -> None + in + match cont with + | None -> statuses + | Some (lexicon_status,ast) -> (match ast with GrafiteParser.LNone _ -> watch_statuses lexicon_status grafite_status ; loop lexicon_status grafite_status (((grafite_status,lexicon_status),None)::statuses) | GrafiteParser.LSome ast -> + !out ast; cb grafite_status ast; let new_statuses = eval_ast ?do_heavy_checks ?clean_baseuri lexicon_status @@ -145,8 +155,6 @@ let eval_from_stream ~first_statement_only ~include_paths ?(prompt=false) in watch_statuses lexicon_status grafite_status ; loop lexicon_status grafite_status (new_statuses @ statuses)) - with - End_of_file -> statuses in loop lexicon_status grafite_status [] ;;