[project @ 2000-05-11 19:37:30 by rrt]
[ghc-hetmet.git] / ghc / rts / RtsAPI.c
index 4d5b403..992be89 100644 (file)
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: RtsAPI.c,v 1.12 2000/03/14 09:55:05 simonmar Exp $
+ * $Id: RtsAPI.c,v 1.17 2000/04/26 10:17:41 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
@@ -176,7 +176,7 @@ rts_mkAddr (void *a)
 
 #ifdef COMPILER /* GHC has em, Hugs doesn't */
 HaskellObj
-rts_mkBool (int b)
+rts_mkBool (StgBool b)
 {
   if (b) {
     return (StgClosure *)True_closure;
@@ -196,7 +196,7 @@ HaskellObj
 rts_apply (HaskellObj f, HaskellObj arg)
 {
   StgAP_UPD *ap = (StgAP_UPD *)allocate(AP_sizeW(1));
-  ap->header.info = &AP_UPD_info;
+  SET_HDR(ap, &AP_UPD_info, CCS_SYSTEM);
   ap->n_args = 1;
   ap->fun    = f;
   ap->payload[0] = (P_)arg;
@@ -367,13 +367,36 @@ rts_evalLazyIO (HaskellObj p, unsigned int stack_size, /*out*/HaskellObj *ret)
   return waitThread(tso, ret);
 }
 
-/* Convenience function for decoding the returned status. */
+#if defined(PAR) || defined(SMP)
+/*
+  Needed in the parallel world for non-Main PEs, which do not get a piece
+  of work to start with --- they have to humbly ask for it
+*/
 
-void rts_checkSchedStatus ( char* site, SchedulerStatus rc )
+SchedulerStatus
+rts_evalNothing(unsigned int stack_size)
 {
-  if ( rc == Success ) {
-     return;
-  } else {
-     barf("%s: Return code (%d) not ok",(site),(rc));
-  }
+  /* ToDo: propagate real SchedulerStatus back to caller */
+  scheduleThread(END_TSO_QUEUE);
+  return Success;
+}
+#endif
+
+/* Convenience function for decoding the returned status. */
+
+void
+rts_checkSchedStatus ( char* site, SchedulerStatus rc )
+{
+    switch (rc) {
+    case Success:
+       return;
+    case Killed:
+       barf("%s: uncaught exception",site);
+    case Interrupted:
+       barf("%s: interrupted", site);
+    case Deadlock:
+       barf("%s: no threads to run:  infinite loop or deadlock?", site);
+    default:
+       barf("%s: Return code (%d) not ok",(site),(rc));        
+    }
 }