From 59c9a5828f3d060aabafc7e00f8ee6a17e1c51ab Mon Sep 17 00:00:00 2001 From: sewardj Date: Fri, 19 Nov 1999 15:42:12 +0000 Subject: [PATCH] [project @ 1999-11-19 15:42:07 by sewardj] Duh. Reinstate type variable for state token in Ref type. Also rename to STRef since that's GHC's name for it. --- ghc/interpreter/lib/Prelude.hs | 18 ++++++++++-------- ghc/interpreter/link.c | 8 ++++---- ghc/interpreter/type.c | 6 +++--- ghc/lib/hugs/Prelude.hs | 18 ++++++++++-------- ghc/rts/Assembler.c | 10 +++++----- 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/ghc/interpreter/lib/Prelude.hs b/ghc/interpreter/lib/Prelude.hs index 96aea7b..2a59b98 100644 --- a/ghc/interpreter/lib/Prelude.hs +++ b/ghc/interpreter/lib/Prelude.hs @@ -107,7 +107,7 @@ module Prelude ( , ThreadId, forkIO ,trace - , Ref, newRef, readRef, writeRef + , STRef, newSTRef, readSTRef, writeSTRef -- Arrrggghhh!!! Help! Help! Help! -- What?! Prelude.hs doesn't even _define_ most of these things! @@ -1889,16 +1889,18 @@ freeStablePtr = primFreeStablePtr data PrimArray a -- immutable arrays with Int indices data PrimByteArray -data Ref a -- mutable variables +data STRef s a -- mutable variables data PrimMutableArray s a -- mutable arrays with Int indices data PrimMutableByteArray s -newRef :: a -> IO (Ref a) -newRef = primNewRef -readRef :: Ref a -> IO a -readRef = primReadRef -writeRef :: Ref a -> a -> IO () -writeRef = primWriteRef +newSTRef :: a -> ST s (STRef s a) +newSTRef = primNewRef +readSTRef :: STRef s a -> ST s a +readSTRef = primReadRef +writeSTRef :: STRef s a -> a -> ST s () +writeSTRef = primWriteRef + +type IORef a = STRef RealWorld a ------------------------------------------------------------------------------ diff --git a/ghc/interpreter/link.c b/ghc/interpreter/link.c index 5a660b0..7ac9076 100644 --- a/ghc/interpreter/link.c +++ b/ghc/interpreter/link.c @@ -9,8 +9,8 @@ * included in the distribution. * * $RCSfile: link.c,v $ - * $Revision: 1.14 $ - * $Date: 1999/11/18 12:10:19 $ + * $Revision: 1.15 $ + * $Date: 1999/11/19 15:42:07 $ * ------------------------------------------------------------------------*/ #include "prelude.h" @@ -279,7 +279,7 @@ Void linkPreludeTC(void) { /* Hook to tycons and classes in */ typeAddr = linkTycon("Addr"); typePrimArray = linkTycon("PrimArray"); typePrimByteArray = linkTycon("PrimByteArray"); - typeRef = linkTycon("Ref"); + typeRef = linkTycon("STRef"); typePrimMutableArray = linkTycon("PrimMutableArray"); typePrimMutableByteArray = linkTycon("PrimMutableByteArray"); typeFloat = linkTycon("Float"); @@ -342,7 +342,7 @@ Void linkPreludeTC(void) { /* Hook to tycons and classes in */ #endif nameMkPrimArray = addPrimCfunREP(findText("PrimArray#"),1,0,0); nameMkPrimByteArray = addPrimCfunREP(findText("PrimByteArray#"),1,0,0); - nameMkRef = addPrimCfunREP(findText("Ref#"),1,0,0); + nameMkRef = addPrimCfunREP(findText("STRef#"),1,0,0); nameMkPrimMutableArray = addPrimCfunREP(findText("PrimMutableArray#"),1,0,0); nameMkPrimMutableByteArray = addPrimCfunREP(findText("PrimMutableByteArray#"),1,0,0); nameMkPrimMVar = addPrimCfunREP(findText("MVar#"),1,0,0); diff --git a/ghc/interpreter/type.c b/ghc/interpreter/type.c index 441446b..726c14f 100644 --- a/ghc/interpreter/type.c +++ b/ghc/interpreter/type.c @@ -9,8 +9,8 @@ * included in the distribution. * * $RCSfile: type.c,v $ - * $Revision: 1.14 $ - * $Date: 1999/11/19 13:54:49 $ + * $Revision: 1.15 $ + * $Date: 1999/11/19 15:42:08 $ * ------------------------------------------------------------------------*/ #include "prelude.h" @@ -2579,7 +2579,7 @@ Char k; { case BARR_REP: return typePrimByteArray; case REF_REP: - return ap(typeRef,mkAlphaVar()); + return ap2(typeRef,mkStateVar(),mkAlphaVar()); case MUTARR_REP: return ap2(typePrimMutableArray,mkStateVar(),mkAlphaVar()); case MUTBARR_REP: diff --git a/ghc/lib/hugs/Prelude.hs b/ghc/lib/hugs/Prelude.hs index 96aea7b..2a59b98 100644 --- a/ghc/lib/hugs/Prelude.hs +++ b/ghc/lib/hugs/Prelude.hs @@ -107,7 +107,7 @@ module Prelude ( , ThreadId, forkIO ,trace - , Ref, newRef, readRef, writeRef + , STRef, newSTRef, readSTRef, writeSTRef -- Arrrggghhh!!! Help! Help! Help! -- What?! Prelude.hs doesn't even _define_ most of these things! @@ -1889,16 +1889,18 @@ freeStablePtr = primFreeStablePtr data PrimArray a -- immutable arrays with Int indices data PrimByteArray -data Ref a -- mutable variables +data STRef s a -- mutable variables data PrimMutableArray s a -- mutable arrays with Int indices data PrimMutableByteArray s -newRef :: a -> IO (Ref a) -newRef = primNewRef -readRef :: Ref a -> IO a -readRef = primReadRef -writeRef :: Ref a -> a -> IO () -writeRef = primWriteRef +newSTRef :: a -> ST s (STRef s a) +newSTRef = primNewRef +readSTRef :: STRef s a -> ST s a +readSTRef = primReadRef +writeSTRef :: STRef s a -> a -> ST s () +writeSTRef = primWriteRef + +type IORef a = STRef RealWorld a ------------------------------------------------------------------------------ diff --git a/ghc/rts/Assembler.c b/ghc/rts/Assembler.c index e2a4451..e4d7539 100644 --- a/ghc/rts/Assembler.c +++ b/ghc/rts/Assembler.c @@ -5,8 +5,8 @@ * Copyright (c) 1994-1998. * * $RCSfile: Assembler.c,v $ - * $Revision: 1.17 $ - * $Date: 1999/11/19 13:54:53 $ + * $Revision: 1.18 $ + * $Date: 1999/11/19 15:42:12 $ * * This module provides functions to construct BCOs and other closures * required by the bytecode compiler. @@ -1323,9 +1323,9 @@ const AsmPrim asmPrimOps[] = { , { "primIsIEEEDouble", "", "B", MONAD_Id, i_PRIMOP1, i_isIEEEDouble } /* Ref operations */ - , { "primNewRef", "a", "R", MONAD_IO, i_PRIMOP2, i_newRef } - , { "primWriteRef", "Ra", "", MONAD_IO, i_PRIMOP2, i_writeRef } - , { "primReadRef", "R", "a", MONAD_IO, i_PRIMOP2, i_readRef } + , { "primNewRef", "a", "R", MONAD_ST, i_PRIMOP2, i_newRef } + , { "primWriteRef", "Ra", "", MONAD_ST, i_PRIMOP2, i_writeRef } + , { "primReadRef", "R", "a", MONAD_ST, i_PRIMOP2, i_readRef } , { "primSameRef", "RR", "B", MONAD_Id, i_PRIMOP2, i_sameRef } /* PrimArray operations */ -- 1.7.10.4