- let lexicon_status,ast =
- GrafiteParser.parse_statement ~include_paths str lexicon_status
- in
- (match ast with
- GrafiteParser.LNone _ ->
- loop lexicon_status grafite_status
- (((grafite_status,lexicon_status),None)::statuses)
- | GrafiteParser.LSome ast ->
- cb grafite_status ast;
- let new_statuses =
- eval_ast ?do_heavy_checks ?clean_baseuri lexicon_status
- grafite_status ("",0,ast) in
- if enforce_no_new_aliases then
- List.iter
- (fun (_,alias) ->
- match alias with
- None -> ()
- | Some (k,((v,_) as value)) ->
- let newtxt =
- DisambiguatePp.pp_environment
- (DisambiguateTypes.Environment.add k value
- DisambiguateTypes.Environment.empty)
- in
- raise (TryingToAdd newtxt)) new_statuses;
- let grafite_status,lexicon_status =
- match new_statuses with
- [] -> assert false
- | (s,_)::_ -> s
- in
- loop lexicon_status grafite_status (new_statuses @ statuses))
- with
- End_of_file -> statuses
+ let cont =
+ try Some (GrafiteParser.parse_statement ~include_paths str status)
+ with End_of_file -> None in
+ match cont with
+ | None -> true, status, statuses
+ | Some (status,ast) ->
+ (match ast with
+ GrafiteParser.LNone _ ->
+ watch_statuses status ;
+ false, status, ((status,None)::statuses)
+ | GrafiteParser.LSome ast ->
+ cb status ast;
+ let new_statuses = eval_ast ?do_heavy_checks status ("",0,ast) in
+ if enforce_no_new_aliases then
+ List.iter
+ (fun (_,alias) ->
+ match alias with
+ None -> ()
+ | Some (k,value) ->
+ let newtxt = LexiconAstPp.pp_alias value in
+ raise (TryingToAdd newtxt)) new_statuses;
+ let status =
+ match new_statuses with
+ [] -> assert false
+ | (s,_)::_ -> s
+ in
+ watch_statuses status ;
+ false, status, (new_statuses @ statuses))
+ with exn when not matita_debug ->
+ raise (EnrichedWithStatus (exn, status))
+ in
+ if stop then s else loop g s