# HG changeset patch # User haftmann # Date 1194351172 -3600 # Node ID 2b928fb92f534b06749b6f5138ebd35b08f5677f # Parent 30142fd3babfc6d9f52000f73b3767808c032883 CRITICAL force diff -r 30142fd3babf -r 2b928fb92f53 src/Pure/General/susp.ML --- a/src/Pure/General/susp.ML Tue Nov 06 13:12:50 2007 +0100 +++ b/src/Pure/General/susp.ML Tue Nov 06 13:12:52 2007 +0100 @@ -2,8 +2,7 @@ ID: $Id$ Author: Sebastian Skalberg and Florian Haftmann, TU Muenchen -Delayed evaluation. Supposed to be value oriented; may result in -multiple evaluations in a multi-threaded environment! +Delayed evaluation. Supposed to be value-oriented. *) signature SUSP = @@ -30,13 +29,18 @@ fun delay f = ref (Delay f); fun force susp = - (case ! susp of - Value v => v - | Delay f => - let - val v = f (); - val _ = susp := Value v; - in v end); + let + fun forc () = case ! susp + of Value v => v + | Delay f => + let + val v = f (); + val _ = susp := Value v; + in v end; + in case ! susp + of Value v => v + | Delay _ => NAMED_CRITICAL "sups" forc + end; fun peek susp = (case ! susp of