src/Pure/Thy/present.ML
changeset 23944 2ea068548a83
parent 23899 ab37b1f690c7
child 24102 969d334040a8
--- a/src/Pure/Thy/present.ML	Mon Jul 23 20:47:55 2007 +0200
+++ b/src/Pure/Thy/present.ML	Mon Jul 23 20:47:56 2007 +0200
@@ -172,7 +172,7 @@
 (* state *)
 
 val browser_info = ref empty_browser_info;
-fun change_browser_info f = browser_info := map_browser_info f (! browser_info);
+fun change_browser_info f = CRITICAL (fn () => change browser_info (map_browser_info f));
 
 val suppress_tex_source = ref false;
 fun no_document f x = Library.setmp suppress_tex_source true f x;
@@ -290,7 +290,7 @@
 fun name_of_session elems = space_implode "/" ("Isabelle" :: elems);
 
 fun init build info doc doc_graph doc_versions path name doc_prefix2
-    (remote_path, first_time) verbose thys =
+    (remote_path, first_time) verbose thys = CRITICAL (fn () =>
   if not build andalso not info andalso doc = "" andalso is_none doc_prefix2 then
     (browser_info := empty_browser_info; session_info := NONE)
   else
@@ -327,7 +327,7 @@
       info, doc, doc_graph, documents, doc_prefix1, doc_prefix2, remote_path, verbose, readme));
       browser_info := init_browser_info remote_path path thys;
       add_html_index index_text
-    end;
+    end);
 
 
 (* isatool wrappers *)
@@ -371,8 +371,9 @@
   write_tex (Buffer.add Latex.tex_trailer tex_index) doc_indexN path;
 
 
-fun finish () = with_session () (fn {name, info, html_prefix, doc_format, doc_graph,
-    documents, doc_prefix1, doc_prefix2, path, verbose, readme, ...} =>
+fun finish () = CRITICAL (fn () =>
+    with_session () (fn {name, info, html_prefix, doc_format, doc_graph,
+      documents, doc_prefix1, doc_prefix2, path, verbose, readme, ...} =>
   let
     val {theories, files, tex_index, html_index, graph} = ! browser_info;
     val thys = Symtab.dest theories;
@@ -429,7 +430,7 @@
 
     browser_info := empty_browser_info;
     session_info := NONE
-  end);
+  end));
 
 
 (* theory elements *)
@@ -503,7 +504,7 @@
 
 
 val hooks = ref ([]: (string -> (string * thm list) list -> unit) list);
-fun add_hook f = hooks := (f :: ! hooks);
+fun add_hook f = CRITICAL (fn () => change hooks (cons f));
 
 fun results k xs =
  (List.app (fn f => (try (fn () => f k xs) (); ())) (! hooks);