[project @ 1998-10-21 11:40:36 by sof]
authorsof <unknown>
Wed, 21 Oct 1998 11:40:36 +0000 (11:40 +0000)
committersof <unknown>
Wed, 21 Oct 1998 11:40:36 +0000 (11:40 +0000)
Oops, previous commit msg was a bit off; foreignObjToAddr added,
but to this interface (Foreign.) Addr was augmented with
writeForeignObjOffAddr though.

ghc/lib/exts/Foreign.lhs

index 29f5e3b..eaf8ef3 100644 (file)
@@ -7,9 +7,12 @@
 \begin{code}
 module Foreign 
        ( 
-        ForeignObj      -- abstract, instance of: Eq
-       , makeForeignObj  -- :: Addr{-obj-} -> Addr{-finaliser-} -> IO ForeignObj
-       , writeForeignObj -- :: ForeignObj  -> Addr{-new obj-}   -> IO ()
+        ForeignObj       -- abstract, instance of: Eq
+       , makeForeignObj   -- :: Addr{-obj-} -> Addr{-finaliser-} -> IO ForeignObj
+       , writeForeignObj  -- :: ForeignObj  -> Addr{-new obj-}   -> IO ()
+       , foreignObjToAddr -- :: ForeignObj  -> IO Addr
+           -- the coercion from a foreign obj. to an addr. is unsafe,
+          -- and should not be used unless absolutely necessary.
        
        , StablePtr {-a-} -- abstract.
        , makeStablePtr   -- :: a -> IO (StablePtr a)
@@ -103,6 +106,12 @@ import PrelIOBase ( IO(..), IOResult(..) )
 \end{code}
 
 \begin{code}
+foreignObjToAddr :: ForeignObj -> IO Addr
+foreignObjToAddr fo = _casm_ `` %r=(StgAddr)%0; '' fo
+\end{code}
+
+
+\begin{code}
 indexCharOffForeignObj   :: ForeignObj -> Int -> Char
 indexCharOffForeignObj (ForeignObj fo#) (I# i#) = C# (indexCharOffForeignObj# fo# i#)