rename takeMaybeMVar to tryTakeMVar
| TakeMVarOp
| PutMVarOp
| SameMVarOp
| TakeMVarOp
| PutMVarOp
| SameMVarOp
| IsEmptyMVarOp
-- exceptions
| IsEmptyMVarOp
-- exceptions
tagOf_PrimOp TakeMVarOp = ILIT(218)
tagOf_PrimOp PutMVarOp = ILIT(219)
tagOf_PrimOp SameMVarOp = ILIT(220)
tagOf_PrimOp TakeMVarOp = ILIT(218)
tagOf_PrimOp PutMVarOp = ILIT(219)
tagOf_PrimOp SameMVarOp = ILIT(220)
-tagOf_PrimOp TakeMaybeMVarOp = ILIT(221)
+tagOf_PrimOp TryTakeMVarOp = ILIT(221)
tagOf_PrimOp IsEmptyMVarOp = ILIT(222)
tagOf_PrimOp MkForeignObjOp = ILIT(223)
tagOf_PrimOp WriteForeignObjOp = ILIT(224)
tagOf_PrimOp IsEmptyMVarOp = ILIT(222)
tagOf_PrimOp MkForeignObjOp = ILIT(223)
tagOf_PrimOp WriteForeignObjOp = ILIT(224)
TakeMVarOp,
PutMVarOp,
SameMVarOp,
TakeMVarOp,
PutMVarOp,
SameMVarOp,
IsEmptyMVarOp,
MkForeignObjOp,
WriteForeignObjOp,
IsEmptyMVarOp,
MkForeignObjOp,
WriteForeignObjOp,
in
mkGenPrimOp SLIT("sameMVar#") [s_tv, elt_tv] [mvar_ty, mvar_ty] boolTy
in
mkGenPrimOp SLIT("sameMVar#") [s_tv, elt_tv] [mvar_ty, mvar_ty] boolTy
-primOpInfo TakeMaybeMVarOp
+primOpInfo TryTakeMVarOp
= let
elt = alphaTy; elt_tv = alphaTyVar; s = betaTy; s_tv = betaTyVar
state = mkStatePrimTy s
in
= let
elt = alphaTy; elt_tv = alphaTyVar; s = betaTy; s_tv = betaTyVar
state = mkStatePrimTy s
in
- mkGenPrimOp SLIT("takeMaybeMVar#") [s_tv, elt_tv]
+ mkGenPrimOp SLIT("tryTakeMVar#") [s_tv, elt_tv]
[mkMVarPrimTy s elt, state]
(unboxedTriple [state, intPrimTy, elt])
[mkMVarPrimTy s elt, state]
(unboxedTriple [state, intPrimTy, elt])
primOpOutOfLine op
= case op of
TakeMVarOp -> True
primOpOutOfLine op
= case op of
TakeMVarOp -> True
- TakeMaybeMVarOp -> True
PutMVarOp -> True
DelayOp -> True
WaitReadOp -> True
PutMVarOp -> True
DelayOp -> True
WaitReadOp -> True
primOpHasSideEffects UnsafeThawArrayOp = True
primOpHasSideEffects TakeMVarOp = True
primOpHasSideEffects UnsafeThawArrayOp = True
primOpHasSideEffects TakeMVarOp = True
-primOpHasSideEffects TakeMaybeMVarOp = True
+primOpHasSideEffects TryTakeMVarOp = True
primOpHasSideEffects PutMVarOp = True
primOpHasSideEffects DelayOp = True
primOpHasSideEffects WaitReadOp = True
primOpHasSideEffects PutMVarOp = True
primOpHasSideEffects DelayOp = True
primOpHasSideEffects WaitReadOp = True
TakeMVarOp -> mangle [mkM, mkP ] mkM
PutMVarOp -> mangle [mkM, mkM, mkP ] mkR
SameMVarOp -> mangle [mkP, mkP ] mkM
TakeMVarOp -> mangle [mkM, mkP ] mkM
PutMVarOp -> mangle [mkM, mkM, mkP ] mkR
SameMVarOp -> mangle [mkP, mkP ] mkM
- TakeMaybeMVarOp -> mangle [mkM, mkP ] mkM
+ TryTakeMVarOp -> mangle [mkM, mkP ] mkM
IsEmptyMVarOp -> mangle [mkP, mkP ] mkM
ForkOp -> mangle [mkO, mkP ] mkR
IsEmptyMVarOp -> mangle [mkP, mkP ] mkM
ForkOp -> mangle [mkO, mkP ] mkR
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.52 2000/04/13 15:37:11 panne Exp $
+ * $Id: PrimOps.h,v 1.53 2000/05/10 11:02:00 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
*
* (c) The GHC Team, 1998-1999
*
#define isEmptyMVarzh(r,a) r=(I_)((GET_INFO((StgMVar*)(a))) == &EMPTY_MVAR_info )
EF_(newMVarzh_fast);
EF_(takeMVarzh_fast);
#define isEmptyMVarzh(r,a) r=(I_)((GET_INFO((StgMVar*)(a))) == &EMPTY_MVAR_info )
EF_(newMVarzh_fast);
EF_(takeMVarzh_fast);
-EF_(takeMaybeMVarzh_fast);
+EF_(tryTakeMVarzh_fast);
, putMVar -- :: MVar a -> a -> IO ()
, readMVar -- :: MVar a -> IO a
, swapMVar -- :: MVar a -> a -> IO a
, putMVar -- :: MVar a -> a -> IO ()
, readMVar -- :: MVar a -> IO a
, swapMVar -- :: MVar a -> a -> IO a
- , takeMaybeMVar -- :: MVar a -> IO (Maybe a)
+ , tryTakeMVar -- :: MVar a -> IO (Maybe a)
, isEmptyMVar -- :: MVar a -> IO Bool
) where
, isEmptyMVar -- :: MVar a -> IO Bool
) where
putMVar mvar new >>
return old
putMVar mvar new >>
return old
--- takeMaybeMVar is a non-blocking takeMVar
-takeMaybeMVar :: MVar a -> IO (Maybe a)
-takeMaybeMVar (MVar m) = IO $ \ s ->
- case takeMaybeMVar# m s of
+-- tryTakeMVar is a non-blocking takeMVar
+tryTakeMVar :: MVar a -> IO (Maybe a)
+tryTakeMVar (MVar m) = IO $ \ s ->
+ case tryTakeMVar# m s of
(# s, 0#, _ #) -> (# s, Nothing #) -- MVar is empty
(# s, _, a #) -> (# s, Just a #) -- MVar is full
(# s, 0#, _ #) -> (# s, Nothing #) -- MVar is empty
(# s, _, a #) -> (# s, Just a #) -- MVar is full
the MVar may have been filled (or emptied) - so be extremely
careful when using this operation.
the MVar may have been filled (or emptied) - so be extremely
careful when using this operation.
- Use takeMaybeMVar instead if possible.
+ Use tryTakeMVar instead if possible.
If you can re-work your abstractions to avoid having to
depend on isEmptyMVar, then you're encouraged to do so,
If you can re-work your abstractions to avoid having to
depend on isEmptyMVar, then you're encouraged to do so,
newMVarzh
takeMVarzh
putMVarzh
newMVarzh
takeMVarzh
putMVarzh
isEmptyMVarzh
-- Parallel
isEmptyMVarzh
-- Parallel
/* -----------------------------------------------------------------------------
/* -----------------------------------------------------------------------------
- * $Id: PrimOps.hc,v 1.51 2000/04/12 17:11:38 simonmar Exp $
+ * $Id: PrimOps.hc,v 1.52 2000/05/10 11:02:00 simonmar Exp $
*
* (c) The GHC Team, 1998-2000
*
*
* (c) The GHC Team, 1998-2000
*
-FN_(takeMaybeMVarzh_fast)
{
StgMVar *mvar;
StgClosure *val;
{
StgMVar *mvar;
StgClosure *val;