[project @ 2000-04-11 20:44:17 by panne]
authorpanne <unknown>
Tue, 11 Apr 2000 20:44:20 +0000 (20:44 +0000)
committerpanne <unknown>
Tue, 11 Apr 2000 20:44:20 +0000 (20:44 +0000)
Cleaning up the foreign object naming mess:

   * Renamed the primop from makeForeignObj# to mkForeignObj#, this
     is more consistent with the old Foreign.mkForeignObj.

   * PrelForeign now exports makeForeignObj with the new signature.

   * freeFile.c now uses StgAddr instead of StgForeignObj, this
     removes the need for some fixIOs.

   * Lots of import tweaking to prepare The Big Foreign Renamer,
     which will move most of Foreign to ForeignObj, and FFI to Foreign.

Note: I've tried to track the changes in the interpreter sources, but
didn't test them.

16 files changed:
ghc/compiler/prelude/PrimOp.lhs
ghc/includes/PrimOps.h
ghc/interpreter/interface.c
ghc/interpreter/prelude/Prelude.hs
ghc/lib/std/PrelForeign.lhs
ghc/lib/std/PrelGHC.hi-boot
ghc/lib/std/PrelHandle.lhs
ghc/lib/std/PrelWeak.lhs
ghc/lib/std/cbits/freeFile.c
ghc/lib/std/cbits/stgio.h
ghc/rts/Assembler.c
ghc/rts/Bytecodes.h
ghc/rts/Evaluator.c
ghc/rts/HSrts.def
ghc/rts/PrimOps.hc
ghc/tests/typecheck/should_compile/tc085.stderr

index b16df06..7224510 100644 (file)
@@ -185,7 +185,7 @@ data PrimOp
     | UnblockAsyncExceptionsOp
 
     -- foreign objects
-    | MakeForeignObjOp
+    | MkForeignObjOp
     | WriteForeignObjOp
 
     -- weak pointers
@@ -460,7 +460,7 @@ tagOf_PrimOp TakeMVarOp                           = ILIT(218)
 tagOf_PrimOp PutMVarOp                       = ILIT(219)
 tagOf_PrimOp SameMVarOp                              = ILIT(220)
 tagOf_PrimOp IsEmptyMVarOp                   = ILIT(221)
-tagOf_PrimOp MakeForeignObjOp                = ILIT(222)
+tagOf_PrimOp MkForeignObjOp                  = ILIT(222)
 tagOf_PrimOp WriteForeignObjOp               = ILIT(223)
 tagOf_PrimOp MkWeakOp                        = ILIT(224)
 tagOf_PrimOp DeRefWeakOp                     = ILIT(225)
@@ -750,7 +750,7 @@ allThePrimOps               -- Except CCall, which is really a family of primops
        PutMVarOp,
        SameMVarOp,
        IsEmptyMVarOp,
-       MakeForeignObjOp,
+       MkForeignObjOp,
        WriteForeignObjOp,
        MkWeakOp,
        DeRefWeakOp,
@@ -1600,8 +1600,8 @@ primOpInfo MyThreadIdOp
 %************************************************************************
 
 \begin{code}
-primOpInfo MakeForeignObjOp
-  = mkGenPrimOp SLIT("makeForeignObj#") [] 
+primOpInfo MkForeignObjOp
+  = mkGenPrimOp SLIT("mkForeignObj#") [] 
        [addrPrimTy, realWorldStatePrimTy] 
        (unboxedPair [realWorldStatePrimTy, foreignObjPrimTy])
 
@@ -1931,7 +1931,7 @@ primOpOutOfLine op
        MkWeakOp                     -> True
        FinalizeWeakOp               -> True
        MakeStableNameOp             -> True
-       MakeForeignObjOp             -> True
+       MkForeignObjOp               -> True
        NewMutVarOp                  -> True
        NewMVarOp                    -> True
        ForkOp                       -> True
@@ -2041,7 +2041,7 @@ primOpHasSideEffects KillThreadOp      = True
 primOpHasSideEffects YieldOp          = True
 primOpHasSideEffects SeqOp            = True
 
-primOpHasSideEffects MakeForeignObjOp  = True
+primOpHasSideEffects MkForeignObjOp    = True
 primOpHasSideEffects WriteForeignObjOp = True
 primOpHasSideEffects MkWeakOp                 = True
 primOpHasSideEffects DeRefWeakOp       = True
index 8510c19..4ec2779 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: PrimOps.h,v 1.49 2000/04/05 14:26:31 panne Exp $
+ * $Id: PrimOps.h,v 1.50 2000/04/11 20:44:18 panne Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -857,7 +857,7 @@ EF_(finalizzeWeakzh_fast);
 
 #define ForeignObj_CLOSURE_DATA(c)  (((StgForeignObj *)c)->data)
 
-EF_(makeForeignObjzh_fast);
+EF_(mkForeignObjzh_fast);
 
 #define writeForeignObjzh(res,datum) \
    (ForeignObj_CLOSURE_DATA(res) = (P_)(datum))
index ce57edc..eb9b493 100644 (file)
@@ -7,8 +7,8 @@
  * Hugs version 1.4, December 1997
  *
  * $RCSfile: interface.c,v $
- * $Revision: 1.51 $
- * $Date: 2000/04/11 16:49:20 $
+ * $Revision: 1.52 $
+ * $Date: 2000/04/11 20:44:18 $
  * ------------------------------------------------------------------------*/
 
 #include "hugsbasictypes.h"
@@ -2543,7 +2543,7 @@ Type type; {
       Sym(int2Integerzh_fast)        \
       Sym(stg_gc_unbx_r1)            \
       Sym(ErrorHdrHook)              \
-      Sym(makeForeignObjzh_fast)     \
+      Sym(mkForeignObjzh_fast)       \
       Sym(__encodeDouble)            \
       Sym(decodeDoublezh_fast)       \
       Sym(isDoubleNaN)               \
index 19a1af4..124245c 100644 (file)
@@ -1190,8 +1190,8 @@ data StablePtr a
 #ifdef PROVIDE_FOREIGN
 data ForeignObj
 
-makeForeignObj :: Addr -> IO ForeignObj
-makeForeignObj = primMakeForeignObj
+mkForeignObj :: Addr -> IO ForeignObj
+mkForeignObj = primMkForeignObj
 
 #endif
 #ifdef PROVIDE_WEAK
index ef4f815..87905fb 100644 (file)
@@ -12,6 +12,8 @@ module PrelForeign (
 #ifndef __PARALLEL_HASKELL__
        ForeignObj(..),
        makeForeignObj,
+       -- SUP: deprecated
+       mkForeignObj,
        writeForeignObj
 #endif
    ) where
@@ -21,6 +23,7 @@ import PrelST
 import PrelBase
 import PrelAddr
 import PrelGHC
+import PrelWeak        ( addForeignFinalizer )
 \end{code}
 
 
@@ -30,19 +33,26 @@ import PrelGHC
 %*                                                     *
 %*********************************************************
 
+mkForeignObj and writeForeignObj are the building blocks
+for makeForeignObj, they can probably be nuked in the future.
+
 \begin{code}
 #ifndef __PARALLEL_HASKELL__
 --instance CCallable ForeignObj
 --instance CCallable ForeignObj#
 
-makeForeignObj  :: Addr -> IO ForeignObj
-makeForeignObj (A# obj) = IO ( \ s# ->
-    case makeForeignObj# obj s# of
-      (# s1#, fo# #) -> (# s1#,  ForeignObj fo# #) )
+makeForeignObj :: Addr -> IO () -> IO ForeignObj
+makeForeignObj addr finalizer = do
+   fObj <- mkForeignObj addr
+   addForeignFinalizer fObj finalizer
+   return fObj
 
---makeForeignObj  :: Addr        -> Addr       -> IO ForeignObj
-writeForeignObj :: ForeignObj  -> Addr       -> IO ()
+mkForeignObj  :: Addr -> IO ForeignObj
+mkForeignObj (A# obj) = IO ( \ s# ->
+    case mkForeignObj# obj s# of
+      (# s1#, fo# #) -> (# s1#,  ForeignObj fo# #) )
 
+writeForeignObj :: ForeignObj -> Addr -> IO ()
 writeForeignObj (ForeignObj fo#) (A# datum#) = IO ( \ s# ->
     case writeForeignObj# fo# datum# s# of { s1# -> (# s1#, () #) } )
 #endif /* !__PARALLEL_HASKELL__ */
index 84e7034..460fef0 100644 (file)
@@ -323,7 +323,7 @@ __export PrelGHC
   finalizzeWeakzh
 
   ForeignObjzh
-  makeForeignObjzh
+  mkForeignObjzh
   writeForeignObjzh
 
   StablePtrzh
index 22ca0d6..f9ce8bc 100644 (file)
@@ -129,7 +129,7 @@ file object reference.
 nullFile__ :: FILE_OBJECT
 nullFile__ = 
 #ifndef __PARALLEL_HASKELL__
-    unsafePerformIO (makeForeignObj nullAddr)
+    unsafePerformIO (makeForeignObj nullAddr (return ()))
 #else
     nullAddr
 #endif
@@ -160,9 +160,9 @@ mkErrorHandle__ ioe =
 
 \begin{code}
 foreign import "libHS_cbits" "freeStdFileObject" unsafe
-        freeStdFileObject :: FILE_OBJECT -> IO ()
+        freeStdFileObject :: Addr -> IO ()
 foreign import "libHS_cbits" "freeFileObject" unsafe
-        freeFileObject :: FILE_OBJECT -> IO ()
+        freeFileObject :: Addr -> IO ()
 
 \end{code}
 
@@ -190,8 +190,7 @@ stdout = unsafePerformIO (do
                              (0::Int){-writeable-}  -- ConcHask: SAFE, won't block
 
 #ifndef __PARALLEL_HASKELL__
-            fo <- makeForeignObj fo
-           addForeignFinalizer fo (freeStdFileObject fo)
+            fo <- makeForeignObj fo (freeStdFileObject fo)
 #endif
 
 #ifdef __HUGS__
@@ -217,8 +216,7 @@ stdin = unsafePerformIO (do
                              (1::Int){-readable-}  -- ConcHask: SAFE, won't block
 
 #ifndef __PARALLEL_HASKELL__
-            fo <- makeForeignObj fo
-           addForeignFinalizer fo (freeStdFileObject fo)
+            fo <- makeForeignObj fo (freeStdFileObject fo)
 #endif
            (bm, bf_size) <- getBMode__ fo
            mkBuffer__ fo bf_size
@@ -242,8 +240,7 @@ stderr = unsafePerformIO (do
                              (0::Int){-writeable-} -- ConcHask: SAFE, won't block
 
 #ifndef __PARALLEL_HASKELL__
-            fo <- makeForeignObj fo
-           addForeignFinalizer fo (freeStdFileObject fo)
+            fo <- makeForeignObj fo (freeStdFileObject fo)
 #endif
             hdl <- newHandle (Handle__ fo WriteHandle NoBuffering "stderr")
            -- when stderr and stdout are both connected to a terminal, ensure
@@ -283,8 +280,7 @@ openFileEx f m = do
                       (binary::Int)     -- ConcHask: SAFE, won't block
     if fo /= nullAddr then do
 #ifndef __PARALLEL_HASKELL__
-       fo  <- makeForeignObj fo
-       addForeignFinalizer fo (freeFileObject fo)
+       fo  <- makeForeignObj fo (freeFileObject fo)
 #endif
        (bm, bf_size)  <- getBMode__ fo
         mkBuffer__ fo bf_size
index c1d49fb..9548a19 100644 (file)
@@ -12,8 +12,8 @@ module PrelWeak where
 import PrelGHC
 import PrelBase
 import PrelMaybe
-import PrelIOBase
-import PrelForeign
+-- NOTE: To break a cycle, ForeignObj is not in PrelForeign, but PrelIOBase!
+import PrelIOBase      ( IO(..), ForeignObj(..) )
 
 #ifndef __PARALLEL_HASKELL__
 
index aecf498..9e4c530 100644 (file)
@@ -1,7 +1,7 @@
 /* 
  * (c) The GRASP/AQUA Project, Glasgow University, 1994-1998
  *
- * $Id: freeFile.c,v 1.9 2000/03/28 08:49:56 simonmar Exp $
+ * $Id: freeFile.c,v 1.10 2000/04/11 20:44:18 panne Exp $
  *
  * Giving up files
  */
    before we *really* shut down (dumping stats etc.)
 */
 void
-freeStdFile(StgForeignPtr fp)
+freeStdFile(StgAddr fp)
 { return; }
 
 void
-freeStdFileObject(StgForeignPtr ptr)
+freeStdFileObject(StgAddr ptr)
 { 
   IOFileObject* fo = (IOFileObject*)ptr;
   int rc;
@@ -45,7 +45,7 @@ freeStdFileObject(StgForeignPtr ptr)
 }
 
 void
-freeFileObject(StgForeignPtr ptr)
+freeFileObject(StgAddr ptr)
 {
     /*
      * The finaliser for the file objects embedded in Handles. The RTS
index 5203040..6c784da 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: stgio.h,v 1.17 2000/03/10 15:23:40 simonmar Exp $
+ * $Id: stgio.h,v 1.18 2000/04/11 20:44:18 panne Exp $
  *
  * (c) The GRASP/AQUA Project, Glasgow University, 1994-1999
  *
@@ -117,10 +117,9 @@ StgInt     flushReadBuffer (StgForeignPtr);
 void   flushConnectedBuf (StgForeignPtr);
 
 /* freeFile.c */
-void freeStdFile (StgForeignPtr);
-void freeFile (StgForeignPtr);
-void freeStdFileObject (StgForeignPtr);
-void freeFileObject (StgForeignPtr);
+void freeStdFile (StgAddr);
+void freeStdFileObject (StgAddr);
+void freeFileObject (StgAddr);
 
 StgAddr ref_freeStdFileObject (void);
 StgAddr ref_freeFileObject    (void);
index b167f0d..5b6d9da 100644 (file)
@@ -5,8 +5,8 @@
  * Copyright (c) 1994-1998.
  *
  * $RCSfile: Assembler.c,v $
- * $Revision: 1.24 $
- * $Date: 2000/03/20 04:26:24 $
+ * $Revision: 1.25 $
+ * $Date: 2000/04/11 20:44:19 $
  *
  * This module provides functions to construct BCOs and other closures
  * required by the bytecode compiler.
@@ -1372,7 +1372,7 @@ AsmPrim asmPrimOps[] = {
 
 #ifdef PROVIDE_FOREIGN
     /* ForeignObj# operations */
-    , { "primMakeForeignObj",        "A",  "f",  MONAD_IO, i_PRIMOP2, i_makeForeignObj }
+    , { "primMkForeignObj",          "A",  "f",  MONAD_IO, i_PRIMOP2, i_mkForeignObj }
 #endif
 #ifdef PROVIDE_WEAK
     /* WeakPair# operations */
index e502b8f..f033a21 100644 (file)
@@ -1,6 +1,6 @@
 
 /* -----------------------------------------------------------------------------
- * $Id: Bytecodes.h,v 1.14 2000/03/20 04:26:24 andy Exp $
+ * $Id: Bytecodes.h,v 1.15 2000/04/11 20:44:19 panne Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -390,7 +390,7 @@ typedef enum
 
 #ifdef PROVIDE_FOREIGN
     /* ForeignObj# operations */
-    , i_makeForeignObj
+    , i_mkForeignObj
 
     , indexCharOffForeignObj
     , indexIntOffForeignObj
index b7906f7..82603e0 100644 (file)
@@ -5,8 +5,8 @@
  * Copyright (c) 1994-1998.
  *
  * $RCSfile: Evaluator.c,v $
- * $Revision: 1.46 $
- * $Date: 2000/04/03 15:24:21 $
+ * $Revision: 1.47 $
+ * $Date: 2000/04/11 20:44:19 $
  * ---------------------------------------------------------------------------*/
 
 #include "Rts.h"
@@ -2892,7 +2892,7 @@ static void* enterBCO_primop2 ( int primop2code,
 #endif
 #ifdef PROVIDE_FOREIGN
                 /* ForeignObj# operations */
-        case i_makeForeignObj:
+        case i_mkForeignObj:
             {
                 StgForeignObj *result 
                     = stgCast(StgForeignObj*,allocate(sizeofW(StgForeignObj)));
index edb7004..8737d21 100644 (file)
@@ -291,7 +291,7 @@ EXPORTS
        lookupHashTable @ 301 ; 
        lookupStableName @ 302 ; 
        main_threads @ 304 ; 
-       makeForeignObjzh_fast @ 305 ; 
+       mkForeignObjzh_fast @ 305 ; 
        makeStableNamezh_fast @ 306 ; 
        markStablePtrTable @ 307 ; 
        mblocks_allocated @ 308 ; 
index 94dc251..27f6f84 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: PrimOps.hc,v 1.49 2000/03/21 11:33:12 rrt Exp $
+ * $Id: PrimOps.hc,v 1.50 2000/04/11 20:44:19 panne Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
@@ -324,14 +324,14 @@ FN_(newMutVarzh_fast)
    -------------------------------------------------------------------------- */
 
 #ifndef PAR
-FN_(makeForeignObjzh_fast)
+FN_(mkForeignObjzh_fast)
 {
   /* R1.p = ptr to foreign object,
   */
   StgForeignObj *result;
   FB_
 
-  HP_CHK_GEN_TICKY(sizeofW(StgForeignObj), NO_PTRS, makeForeignObjzh_fast,);
+  HP_CHK_GEN_TICKY(sizeofW(StgForeignObj), NO_PTRS, mkForeignObjzh_fast,);
   TICK_ALLOC_PRIM(sizeofW(StgHeader),
                  sizeofW(StgForeignObj)-sizeofW(StgHeader), 0);
   CCS_ALLOC(CCCS,sizeofW(StgForeignObj)); /* ccs prof */
index 7c74acc..ca7b519 100644 (file)
@@ -1,5 +1,5 @@
 __export IOExts IOArray IORef boundsIOArray fixIO freeHaskellFunctionPtr freezzeIOArray hGetBuf hGetBufBA hGetBufBAFull hGetBufFull hPutBuf hPutBufBA hPutBufBAFull hPutBufFull hSetBinaryMode hTell mkWeakIORef newIOArray newIORef performGC readIOArray readIORef thawIOArray trace unsafeFreezzeIOArray unsafePtrEq unsafeThawIOArray updateIORef withHandleFor withStderr withStdin withStdout writeIOArray writeIORef;
-__export PrelGHC Addrzh Arrayzh ByteArrayzh CCallable CReturnable Charzh Doublezh Floatzh ForeignObjzh Int64zh Intzh MVarzh MutVarzh MutableArrayzh MutableByteArrayzh RealWorld StableNamezh StablePtrzh Statezh ThreadIdzh Weakzh Word64zh Wordzh ZLzmzgZR acosDoublezh acosFloatzh addIntCzh addr2Integerzh addr2Intzh andzh asinDoublezh asinFloatzh assert atanDoublezh atanFloatzh blockAsyncExceptionszh catchzh chrzh cmpIntegerIntzh cmpIntegerzh cosDoublezh cosFloatzh coshDoublezh coshFloatzh dataToTagzh deRefStablePtrzh deRefWeakzh decodeDoublezh decodeFloatzh delayzh divExactIntegerzh divModIntegerzh divideFloatzh double2Floatzh double2Intzh eqAddrzh eqCharzh eqFloatzh eqStableNamezh eqStablePtrzh eqWordzh expDoublezh expFloatzh finalizzeWeakzh float2Doublezh float2Intzh forkzh gcdIntegerIntzh gcdIntegerzh gcdIntzh geAddrzh geCharzh geFloatzh geWordzh getTagzh gtAddrzh gtCharzh gtFloatzh gtWordzh iShiftLzh iShiftRAzh iShiftRLzh indexAddrArrayzh indexAddrOffAddrzh indexAddrOffForeignObjzh indexArrayzh indexCharArrayzh indexCharOffAddrzh indexCharOffForeignObjzh indexDoubleArrayzh indexDoubleOffAddrzh indexDoubleOffForeignObjzh indexFloatArrayzh indexFloatOffAddrzh indexFloatOffForeignObjzh indexInt64Arrayzh indexInt64OffAddrzh indexInt64OffForeignObjzh indexIntArrayzh indexIntOffAddrzh indexIntOffForeignObjzh indexStablePtrArrayzh indexStablePtrOffAddrzh indexStablePtrOffForeignObjzh indexWord64Arrayzh indexWord64OffAddrzh indexWord64OffForeignObjzh indexWordArrayzh indexWordOffAddrzh indexWordOffForeignObjzh int2Addrzh int2Doublezh int2Floatzh int2Integerzh int2Wordzh int64ToIntegerzh integer2Intzh integer2Wordzh integerToInt64zh integerToWord64zh isEmptyMVarzh killThreadzh leAddrzh leCharzh leFloatzh leWordzh logDoublezh logFloatzh ltAddrzh ltCharzh ltFloatzh ltWordzh makeForeignObjzh makeStableNamezh makeStablePtrzh minusFloatzh minusIntegerzh mkWeakzh mulIntCzh myThreadIdzh neAddrzh neCharzh neFloatzh neWordzh negateDoublezh negateFloatzh negateIntzh newAddrArrayzh newArrayzh newCharArrayzh newDoubleArrayzh newFloatArrayzh newIntArrayzh newMVarzh newMutVarzh newStablePtrArrayzh newWordArrayzh notzh ordzh orzh parAtAbszh parAtForNowzh parAtRelzh parAtzh parGlobalzh parLocalzh parzh plusFloatzh plusIntegerzh powerFloatzh putMVarzh quotIntegerzh quotIntzh quotRemIntegerzh quotWordzh raisezh readAddrArrayzh readAddrOffAddrzh readArrayzh readCharArrayzh readCharOffAddrzh readDoubleArrayzh readDoubleOffAddrzh readFloatArrayzh readFloatOffAddrzh readForeignObjOffAddrzh readInt64Arrayzh readInt64OffAddrzh readIntArrayzh readIntOffAddrzh readMutVarzh readStablePtrArrayzh readStablePtrOffAddrzh readWord64Arrayzh readWord64OffAddrzh readWordArrayzh readWordOffAddrzh realWorldzh reallyUnsafePtrEqualityzh remIntegerzh remIntzh remWordzh sameMVarzh sameMutVarzh sameMutableArrayzh sameMutableByteArrayzh seqzh shiftLzh shiftRLzh sinDoublezh sinFloatzh sinhDoublezh sinhFloatzh sizzeofByteArrayzh sizzeofMutableByteArrayzh sqrtDoublezh sqrtFloatzh stableNameToIntzh subIntCzh tagToEnumzh takeMVarzh tanDoublezh tanFloatzh tanhDoublezh tanhFloatzh timesFloatzh timesIntegerzh unblockAsyncExceptionszh unsafeCoercezh unsafeFreezzeArrayzh unsafeFreezzeByteArrayzh unsafeThawArrayzh waitReadzh waitWritezh word2Integerzh word2Intzh word64ToIntegerzh writeAddrArrayzh writeAddrOffAddrzh writeArrayzh writeCharArrayzh writeCharOffAddrzh writeDoubleArrayzh writeDoubleOffAddrzh writeFloatArrayzh writeFloatOffAddrzh writeForeignObjOffAddrzh writeForeignObjzh writeInt64Arrayzh writeInt64OffAddrzh writeIntArrayzh writeIntOffAddrzh writeMutVarzh writeStablePtrArrayzh writeStablePtrOffAddrzh writeWord64Arrayzh writeWord64OffAddrzh writeWordArrayzh writeWordOffAddrzh xorzh yieldzh zezezh zezezhzh zgzezh zgzezhzh zgzh zgzhzh zlzezh zlzezhzh zlzh zlzhzh zmzh zmzhzh zpzh zpzhzh zszezh zszezhzh zszhzh ztzh ztzhzh ztztzhzh;
+__export PrelGHC Addrzh Arrayzh ByteArrayzh CCallable CReturnable Charzh Doublezh Floatzh ForeignObjzh Int64zh Intzh MVarzh MutVarzh MutableArrayzh MutableByteArrayzh RealWorld StableNamezh StablePtrzh Statezh ThreadIdzh Weakzh Word64zh Wordzh ZLzmzgZR acosDoublezh acosFloatzh addIntCzh addr2Integerzh addr2Intzh andzh asinDoublezh asinFloatzh assert atanDoublezh atanFloatzh blockAsyncExceptionszh catchzh chrzh cmpIntegerIntzh cmpIntegerzh cosDoublezh cosFloatzh coshDoublezh coshFloatzh dataToTagzh deRefStablePtrzh deRefWeakzh decodeDoublezh decodeFloatzh delayzh divExactIntegerzh divModIntegerzh divideFloatzh double2Floatzh double2Intzh eqAddrzh eqCharzh eqFloatzh eqStableNamezh eqStablePtrzh eqWordzh expDoublezh expFloatzh finalizzeWeakzh float2Doublezh float2Intzh forkzh gcdIntegerIntzh gcdIntegerzh gcdIntzh geAddrzh geCharzh geFloatzh geWordzh getTagzh gtAddrzh gtCharzh gtFloatzh gtWordzh iShiftLzh iShiftRAzh iShiftRLzh indexAddrArrayzh indexAddrOffAddrzh indexAddrOffForeignObjzh indexArrayzh indexCharArrayzh indexCharOffAddrzh indexCharOffForeignObjzh indexDoubleArrayzh indexDoubleOffAddrzh indexDoubleOffForeignObjzh indexFloatArrayzh indexFloatOffAddrzh indexFloatOffForeignObjzh indexInt64Arrayzh indexInt64OffAddrzh indexInt64OffForeignObjzh indexIntArrayzh indexIntOffAddrzh indexIntOffForeignObjzh indexStablePtrArrayzh indexStablePtrOffAddrzh indexStablePtrOffForeignObjzh indexWord64Arrayzh indexWord64OffAddrzh indexWord64OffForeignObjzh indexWordArrayzh indexWordOffAddrzh indexWordOffForeignObjzh int2Addrzh int2Doublezh int2Floatzh int2Integerzh int2Wordzh int64ToIntegerzh integer2Intzh integer2Wordzh integerToInt64zh integerToWord64zh isEmptyMVarzh killThreadzh leAddrzh leCharzh leFloatzh leWordzh logDoublezh logFloatzh ltAddrzh ltCharzh ltFloatzh ltWordzh mkForeignObjzh makeStableNamezh makeStablePtrzh minusFloatzh minusIntegerzh mkWeakzh mulIntCzh myThreadIdzh neAddrzh neCharzh neFloatzh neWordzh negateDoublezh negateFloatzh negateIntzh newAddrArrayzh newArrayzh newCharArrayzh newDoubleArrayzh newFloatArrayzh newIntArrayzh newMVarzh newMutVarzh newStablePtrArrayzh newWordArrayzh notzh ordzh orzh parAtAbszh parAtForNowzh parAtRelzh parAtzh parGlobalzh parLocalzh parzh plusFloatzh plusIntegerzh powerFloatzh putMVarzh quotIntegerzh quotIntzh quotRemIntegerzh quotWordzh raisezh readAddrArrayzh readAddrOffAddrzh readArrayzh readCharArrayzh readCharOffAddrzh readDoubleArrayzh readDoubleOffAddrzh readFloatArrayzh readFloatOffAddrzh readForeignObjOffAddrzh readInt64Arrayzh readInt64OffAddrzh readIntArrayzh readIntOffAddrzh readMutVarzh readStablePtrArrayzh readStablePtrOffAddrzh readWord64Arrayzh readWord64OffAddrzh readWordArrayzh readWordOffAddrzh realWorldzh reallyUnsafePtrEqualityzh remIntegerzh remIntzh remWordzh sameMVarzh sameMutVarzh sameMutableArrayzh sameMutableByteArrayzh seqzh shiftLzh shiftRLzh sinDoublezh sinFloatzh sinhDoublezh sinhFloatzh sizzeofByteArrayzh sizzeofMutableByteArrayzh sqrtDoublezh sqrtFloatzh stableNameToIntzh subIntCzh tagToEnumzh takeMVarzh tanDoublezh tanFloatzh tanhDoublezh tanhFloatzh timesFloatzh timesIntegerzh unblockAsyncExceptionszh unsafeCoercezh unsafeFreezzeArrayzh unsafeFreezzeByteArrayzh unsafeThawArrayzh waitReadzh waitWritezh word2Integerzh word2Intzh word64ToIntegerzh writeAddrArrayzh writeAddrOffAddrzh writeArrayzh writeCharArrayzh writeCharOffAddrzh writeDoubleArrayzh writeDoubleOffAddrzh writeFloatArrayzh writeFloatOffAddrzh writeForeignObjOffAddrzh writeForeignObjzh writeInt64Arrayzh writeInt64OffAddrzh writeIntArrayzh writeIntOffAddrzh writeMutVarzh writeStablePtrArrayzh writeStablePtrOffAddrzh writeWord64Arrayzh writeWord64OffAddrzh writeWordArrayzh writeWordOffAddrzh xorzh yieldzh zezezh zezezhzh zgzezh zgzezhzh zgzh zgzhzh zlzezh zlzezhzh zlzh zlzhzh zmzh zmzhzh zpzh zpzhzh zszezh zszezhzh zszhzh ztzh ztzhzh ztztzhzh;
 __export PrelHandle HandlePosition HandlePosn{HandlePosn} IOModeEx{BinaryMode TextMode} hConnectTo hGetEcho hIsTerminalDevice hSetEcho openFileEx slurpFile;
 __export PrelIOBase unsafeInterleaveIO unsafePerformIO;
 1 data FooData = FooData ;