src/Pure/context.ML
changeset 23944 2ea068548a83
parent 23595 7ca68a2c8575
child 24141 73baca986087
equal deleted inserted replaced
23943:1b5f77bc146a 23944:2ea068548a83
   124 
   124 
   125 fun declare_theory_data empty copy extend merge =
   125 fun declare_theory_data empty copy extend merge =
   126   let
   126   let
   127     val k = serial ();
   127     val k = serial ();
   128     val kind = {empty = empty, copy = copy, extend = extend, merge = merge};
   128     val kind = {empty = empty, copy = copy, extend = extend, merge = merge};
   129     val _ = change kinds (Datatab.update (k, kind));
   129     val _ = CRITICAL (fn () => change kinds (Datatab.update (k, kind)));
   130   in k end;
   130   in k end;
   131 
   131 
   132 val copy_data = Datatab.map' invoke_copy;
   132 val copy_data = Datatab.map' invoke_copy;
   133 val extend_data = Datatab.map' invoke_extend;
   133 val extend_data = Datatab.map' invoke_extend;
   134 fun merge_data pp = Datatab.join (invoke_merge pp) o pairself extend_data;
   134 fun merge_data pp = Datatab.join (invoke_merge pp) o pairself extend_data;
   447 struct
   447 struct
   448 
   448 
   449 fun declare init =
   449 fun declare init =
   450   let
   450   let
   451     val k = serial ();
   451     val k = serial ();
   452     val _ = change kinds (Datatab.update (k, init));
   452     val _ = CRITICAL (fn () => change kinds (Datatab.update (k, init)));
   453   in k end;
   453   in k end;
   454 
   454 
   455 fun get k dest prf =
   455 fun get k dest prf =
   456   dest (case Datatab.lookup (data_of_proof prf) k of
   456   dest (case Datatab.lookup (data_of_proof prf) k of
   457     SOME x => x
   457     SOME x => x
   492 (** delayed theory setup **)
   492 (** delayed theory setup **)
   493 
   493 
   494 local
   494 local
   495   val setup_fn = ref (I: theory -> theory);
   495   val setup_fn = ref (I: theory -> theory);
   496 in
   496 in
   497   fun add_setup f = setup_fn := (! setup_fn #> f);
   497   fun add_setup f = CRITICAL (fn () => setup_fn := (! setup_fn #> f));
   498   fun setup () = let val f = ! setup_fn in setup_fn := I; f end;
   498   fun setup () = CRITICAL (fn () => let val f = ! setup_fn in setup_fn := I; f end);
   499 end;
   499 end;
   500 
   500 
   501 end;
   501 end;
   502 
   502 
   503 structure BasicContext: BASIC_CONTEXT = Context;
   503 structure BasicContext: BASIC_CONTEXT = Context;