/* ----------------------------------------------------------------------------
- * $Id: RtsAPI.c,v 1.14 2000/04/04 13:40:27 panne Exp $
+ * $Id: RtsAPI.c,v 1.17 2000/04/26 10:17:41 simonmar Exp $
*
* (c) The GHC Team, 1998-2000
*
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;
rts_getBool (HaskellObj p)
{
if (p == True_closure) {
- return 1; /* NOTE: This should better be HsTrue */
+ return 1;
} else if (p == False_closure) {
- return 0; /* ... and this HsFalse */
+ return 0;
} else {
barf("getBool: not a Bool");
}
/* Convenience function for decoding the returned status. */
-void rts_checkSchedStatus ( char* site, SchedulerStatus rc )
-{
- if ( rc == Success ) {
- return;
- } else {
- barf("%s: Return code (%d) not ok",(site),(rc));
- }
+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));
+ }
}