equal
deleted
inserted
replaced
374 |
374 |
375 local |
375 local |
376 |
376 |
377 val kinds = Synchronized.var "Proof_Data" (Datatab.empty: (theory -> Any.T) Datatab.table); |
377 val kinds = Synchronized.var "Proof_Data" (Datatab.empty: (theory -> Any.T) Datatab.table); |
378 |
378 |
379 fun invoke_init k = |
379 fun invoke_init tab k = |
380 (case Datatab.lookup (Synchronized.value kinds) k of |
380 (case Datatab.lookup tab k of |
381 SOME init => init |
381 SOME init => init |
382 | NONE => raise Fail "Invalid proof data identifier"); |
382 | NONE => raise Fail "Invalid proof data identifier"); |
383 |
383 |
384 fun init_data thy = |
384 fun init_data thy = |
385 Datatab.map (fn k => fn _ => invoke_init k thy) (Synchronized.value kinds); |
385 let val tab = Synchronized.value kinds |
|
386 in Datatab.map (fn k => fn _ => invoke_init tab k thy) tab end; |
386 |
387 |
387 fun init_new_data data thy = |
388 fun init_new_data data thy = |
388 Datatab.merge (K true) (data, init_data thy); |
389 Datatab.merge (K true) (data, init_data thy); |
389 |
390 |
390 in |
391 in |
412 in k end; |
413 in k end; |
413 |
414 |
414 fun get k dest prf = |
415 fun get k dest prf = |
415 (case Datatab.lookup (data_of_proof prf) k of |
416 (case Datatab.lookup (data_of_proof prf) k of |
416 SOME x => x |
417 SOME x => x |
417 | NONE => invoke_init k (Proof_Context.theory_of prf)) |> dest; (*adhoc value for old theories*) |
418 | NONE => |
|
419 (*adhoc value for old theories*) |
|
420 invoke_init (Synchronized.value kinds) k (Proof_Context.theory_of prf)) |
|
421 |> dest; |
418 |
422 |
419 fun put k mk x = map_prf (Datatab.update (k, mk x)); |
423 fun put k mk x = map_prf (Datatab.update (k, mk x)); |
420 |
424 |
421 end; |
425 end; |
422 |
426 |