update submodules for GHC.HetMet.GArrow -> Control.GArrow renaming
[ghc-hetmet.git] / includes / RtsAPI.h
index 41f0fc0..1444dbc 100644 (file)
@@ -4,6 +4,9 @@
  *
  * API for invoking Haskell functions via the RTS
  *
+ * To understand the structure of the RTS headers, see the wiki:
+ *   http://hackage.haskell.org/trac/ghc/wiki/Commentary/SourceTree/Includes
+ *
  * --------------------------------------------------------------------------*/
 
 #ifndef RTSAPI_H
@@ -26,7 +29,7 @@ typedef enum {
     HeapExhausted /* out of memory */
 } SchedulerStatus;
 
-typedef StgClosure *HaskellObj;
+typedef struct StgClosure_ *HaskellObj;
 
 /*
  * An abstract type representing the token returned by rts_lock() and
@@ -45,6 +48,7 @@ extern void getProgArgv            ( int *argc, char **argv[] );
 extern void setProgArgv            ( int argc, char *argv[] );
 extern void getFullProgArgv        ( int *argc, char **argv[] );
 extern void setFullProgArgv        ( int argc, char *argv[] );
+extern void freeFullProgArgv       ( void ) ;
 
 #ifndef mingw32_HOST_OS
 extern void shutdownHaskellAndSignal (int sig);
@@ -66,6 +70,15 @@ Capability *rts_lock (void);
 // releases the token acquired with rts_lock().
 void rts_unlock (Capability *token);
 
+// If you are in a context where you know you have a current capability but
+// do not know what it is, then use this to get it. Basically this only
+// applies to "unsafe" foreign calls (as unsafe foreign calls are made with
+// the capability held).
+//
+// WARNING: There is *no* guarantee this returns anything sensible (eg NULL)
+// when there is no current capability.
+Capability *rts_unsafeGetMyCapability (void);
+
 /* ----------------------------------------------------------------------------
    Building Haskell objects from C datatypes.
    ------------------------------------------------------------------------- */
@@ -150,10 +163,22 @@ rts_getSchedStatus (Capability *cap);
    These are used by foreign export and foreign import "wrapper" stubs.
    ----------------------------------------------------------------------- */
 
+// When producing Windows DLLs the we need to know which symbols are in the 
+//     local package/DLL vs external ones. 
+//
+//     Note that RtsAPI.h is also included by foreign export stubs in
+//     the base package itself.
+//
+#if defined(mingw32_HOST_OS) && defined(__PIC__) && !defined(COMPILING_BASE_PACKAGE)
+__declspec(dllimport) extern StgWord base_GHCziTopHandler_runIO_closure[];
+__declspec(dllimport) extern StgWord base_GHCziTopHandler_runNonIO_closure[];
+#else
 extern StgWord base_GHCziTopHandler_runIO_closure[];
 extern StgWord base_GHCziTopHandler_runNonIO_closure[];
-#define runIO_closure            base_GHCziTopHandler_runIO_closure
-#define runNonIO_closure         base_GHCziTopHandler_runNonIO_closure
+#endif
+
+#define runIO_closure     base_GHCziTopHandler_runIO_closure
+#define runNonIO_closure  base_GHCziTopHandler_runNonIO_closure
 
 /* ------------------------------------------------------------------------ */