src/Pure/Concurrent/synchronized.ML
changeset 78001 e5c146904c90
parent 77998 cad50a7c8091
child 78008 620d0a5d61a2
equal deleted inserted replaced
78000:f589c50e54a0 78001:e5c146904c90
   105 fun cache expr =
   105 fun cache expr =
   106   Cache {expr = expr, var = var "Synchronized.cache" NONE};
   106   Cache {expr = expr, var = var "Synchronized.cache" NONE};
   107 
   107 
   108 fun cache_eval (Cache {expr, var}) =
   108 fun cache_eval (Cache {expr, var}) =
   109   change_result var (fn state =>
   109   change_result var (fn state =>
   110     (case state of
   110     (case Option.mapPartial Unsynchronized.weak_peek state of
   111       SOME (Unsynchronized.ref (SOME (Unsynchronized.ref result))) => (result, state)
   111       SOME result => (result, state)
   112     | _ =>
   112     | NONE =>
   113       let val result = expr ()
   113         let val result = expr ()
   114       in (result, SOME (Unsynchronized.weak_ref result)) end));
   114         in (result, SOME (Unsynchronized.weak_ref result)) end));
   115 
   115 
   116 end;
   116 end;
   117 
   117 
   118 end;
   118 end;