src/Pure/context.ML
changeset 59146 ba2a326fc271
parent 59058 a78612c67ec0
child 59163 857a600f0c94
equal deleted inserted replaced
59145:0e304b1568a5 59146:ba2a326fc271
   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