equal
deleted
inserted
replaced
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; |