From: simonm Date: Tue, 2 Feb 1999 14:19:03 +0000 (+0000) Subject: [project @ 1999-02-02 14:19:02 by simonm] X-Git-Tag: Approximately_9120_patches~6633 X-Git-Url: http://git.megacz.com/?a=commitdiff_plain;h=d31ac01cca65ae3208246e431e8d03a3770a0005;p=ghc-hetmet.git [project @ 1999-02-02 14:19:02 by simonm] - Add Weak.finalise - Move some functions from PrelWeak to Weak. --- diff --git a/ghc/lib/exts/Weak.lhs b/ghc/lib/exts/Weak.lhs index be0c025..dbbe34a 100644 --- a/ghc/lib/exts/Weak.lhs +++ b/ghc/lib/exts/Weak.lhs @@ -2,18 +2,16 @@ % (c) The AQUA Project, Glasgow University, 1998 % -\section[Weak]{Module @PrelWeak@} +\section[Weak]{Module @Weak@} \begin{code} -{-# OPTIONS -fno-implicit-prelude #-} - module Weak ( Weak, -- abstract -- instance Eq (Weak v) mkWeak, -- :: k -> v -> IO () -> IO (Weak v) deRefWeak, -- :: Weak v -> IO (Maybe v) - -- finalise -- :: Weak v -> IO () + finalise, -- :: Weak v -> IO () -- replaceFinaliser -- :: Weak v -> IO () -> IO () mkWeakNoFinaliser, -- :: k -> v -> IO (Weak v) @@ -23,6 +21,28 @@ module Weak ( addForeignFinaliser -- :: ForeignObj -> IO () -> IO () ) where +import PrelBase +import PrelIOBase import PrelWeak import Foreign + +deRefWeak :: Weak v -> IO (Maybe v) +deRefWeak (Weak w) = IO $ \s -> + case deRefWeak# w s of + (# s1, flag, p #) -> case flag of + 0# -> (# s1, Nothing #) + _ -> (# s1, Just p #) + +mkWeakNoFinaliser key val = IO $ \s -> + -- zero is a valid finaliser argument to mkWeak#, and means "no finaliser" + case mkWeak# key val (unsafeCoerce# 0#) s of { (# s1, w #) -> + (# s1, Weak w #) } + +mkWeakPair :: k -> v -> IO () -> IO (Weak (k,v)) +mkWeakPair key val finaliser = mkWeak key (key,val) finaliser + +finalise :: Weak v -> IO () +finalise (Weak w) = IO $ \s -> + case finaliseWeak# w s of s1 -> (# s1, () #) + \end{code} diff --git a/ghc/lib/std/PrelWeak.lhs b/ghc/lib/std/PrelWeak.lhs index d684460..901a385 100644 --- a/ghc/lib/std/PrelWeak.lhs +++ b/ghc/lib/std/PrelWeak.lhs @@ -10,7 +10,6 @@ module PrelWeak where import PrelGHC -import PrelMaybe import PrelBase import PrelIOBase import PrelForeign @@ -26,24 +25,9 @@ mkWeak key val finaliser = IO $ \s -> case mkWeak# key val finaliser s of { (# s1, w #) -> (# s1, Weak w #) } -mkWeakNoFinaliser key val = IO $ \s -> - -- zero is a valid finaliser argument to mkWeak#, and means "no finaliser" - case mkWeak# key val (unsafeCoerce# 0#) s of { (# s1, w #) -> - (# s1, Weak w #) } - -deRefWeak :: Weak v -> IO (Maybe v) -deRefWeak (Weak w) = IO $ \s -> - case deRefWeak# w s of - (# s1, flag, p #) -> case flag of - 0# -> (# s1, Nothing #) - _ -> (# s1, Just p #) - mkWeakPtr :: k -> IO () -> IO (Weak k) mkWeakPtr key finaliser = mkWeak key key finaliser -mkWeakPair :: k -> v -> IO () -> IO (Weak (k,v)) -mkWeakPair key val finaliser = mkWeak key (key,val) finaliser - addFinaliser :: key -> IO () -> IO () addFinaliser key finaliser = do mkWeakPtr key finaliser -- throw it away @@ -53,9 +37,6 @@ addForeignFinaliser :: ForeignObj -> IO () -> IO () addForeignFinaliser (ForeignObj fo) finaliser = addFinaliser fo finaliser {- -finalise :: Weak v -> IO () -finalise (Weak w) = finaliseWeak# w - instance Eq (Weak v) where (Weak w1) == (Weak w2) = w1 `sameWeak#` w2 -}