From 0d5d32bf62c39c390934d9ef4b01e2bf2db910f8 Mon Sep 17 00:00:00 2001
From: simonmar <unknown>
Date: Mon, 13 Mar 2000 10:53:56 +0000
Subject: [PATCH] [project @ 2000-03-13 10:53:55 by simonmar] Move Prelude.h
 from ghc/includes into ghc/rts.  It's essentially a list of the things from
 the Prelude that the RTS depends on, and isn't relevant to STG code. 
 Furthermore, this helps to clarify which parts of the RTS depend on things
 from the Prelude (by an explicity #include).

---
 ghc/includes/Stg.h         |   5 +-
 ghc/rts/Main.c             |   3 +-
 ghc/rts/Prelude.h          | 103 +++++++++++++++++++++++++++++++++++++
 ghc/rts/PrimOps.hc         |   6 ++-
 ghc/rts/RtsAPI.c           |   3 +-
 ghc/rts/Schedule.c         |   3 +-
 ghc/rts/StgMiscClosures.hc |   3 +-
 7 files changed, 116 insertions(+), 10 deletions(-)
 create mode 100644 ghc/rts/Prelude.h

diff --git a/ghc/includes/Stg.h b/ghc/includes/Stg.h
index 0ae31a0d9445..cf0f6f5dc763 100644
--- a/ghc/includes/Stg.h
+++ b/ghc/includes/Stg.h
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Stg.h,v 1.22 2000/01/13 14:34:01 hwloidl Exp $
+ * $Id: Stg.h,v 1.23 2000/03/13 10:53:55 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -156,9 +156,6 @@ void _stgAssert (char *, unsigned int);
 /* GNU mp library */
 #include "gmp.h"
 
-/* Wired-in Prelude identifiers */
-#include "Prelude.h"
-
 /* Storage Manager */
 #include "StgStorage.h"
 
diff --git a/ghc/rts/Main.c b/ghc/rts/Main.c
index 49abe0323ddc..154eaa4bbbea 100644
--- a/ghc/rts/Main.c
+++ b/ghc/rts/Main.c
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Main.c,v 1.16 2000/01/14 13:38:54 simonmar Exp $
+ * $Id: Main.c,v 1.17 2000/03/13 10:53:55 simonmar Exp $
  *
  * (c) The GHC Team 1998-1999
  *
@@ -14,6 +14,7 @@
 #include "SchedAPI.h"
 #include "RtsFlags.h"
 #include "RtsUtils.h"
+#include "Prelude.h"
 
 #ifdef DEBUG
 # include "Printer.h"   /* for printing        */
diff --git a/ghc/rts/Prelude.h b/ghc/rts/Prelude.h
new file mode 100644
index 000000000000..82123195b8f1
--- /dev/null
+++ b/ghc/rts/Prelude.h
@@ -0,0 +1,103 @@
+/* -----------------------------------------------------------------------------
+ * $Id: Prelude.h,v 1.1 2000/03/13 10:53:56 simonmar Exp $
+ *
+ * (c) The GHC Team, 1998-1999
+ *
+ * Prelude identifiers that we sometimes need to refer to in the RTS.
+ *
+ * ---------------------------------------------------------------------------*/
+
+#ifndef PRELUDE_H
+#define PRELUDE_H
+
+#ifdef COMPILING_RTS
+
+#ifdef COMPILER
+extern DLL_IMPORT const StgClosure PrelBase_Z91Z93_static_closure;
+extern DLL_IMPORT const StgClosure PrelBase_Z40Z41_static_closure;
+extern DLL_IMPORT const StgClosure PrelBase_True_static_closure;
+extern DLL_IMPORT const StgClosure PrelBase_False_static_closure;
+extern DLL_IMPORT const StgClosure PrelPack_unpackCString_closure;
+extern DLL_IMPORT const StgClosure PrelException_stackOverflow_closure;
+extern DLL_IMPORT const StgClosure PrelException_heapOverflow_closure;
+extern DLL_IMPORT const StgClosure PrelException_PutFullMVar_static_closure;
+extern DLL_IMPORT const StgClosure PrelException_NonTermination_static_closure;
+extern const StgClosure PrelMain_mainIO_closure;
+
+extern DLL_IMPORT const StgInfoTable PrelBase_Czh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelBase_Izh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelFloat_Fzh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelFloat_Dzh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_Azh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_Wzh_static_info;
+extern DLL_IMPORT const StgInfoTable PrelBase_Czh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelBase_Izh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelFloat_Fzh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelFloat_Dzh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_Azh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_Wzh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_I64zh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelAddr_W64zh_con_info;
+extern DLL_IMPORT const StgInfoTable PrelStable_StablePtr_static_info;
+extern DLL_IMPORT const StgInfoTable PrelStable_StablePtr_con_info;
+
+/* Define canonical names so we can abstract away from the actual
+ * module these names are defined in.
+ */
+
+#define Nil_closure            PrelBase_ZMZN_static_closure
+#define Unit_closure           PrelBase_Z0T_static_closure
+#define True_closure           PrelBase_True_static_closure
+#define False_closure          PrelBase_False_static_closure
+#define stackOverflow_closure  PrelException_stackOverflow_closure
+#define heapOverflow_closure   PrelException_heapOverflow_closure
+#define PutFullMVar_closure    PrelException_PutFullMVar_static_closure
+#define NonTermination_closure PrelException_NonTermination_static_closure
+#define Czh_static_info        PrelBase_Czh_static_info
+#define Izh_static_info        PrelBase_Izh_static_info
+#define Fzh_static_info        PrelFloat_Fzh_static_info
+#define Dzh_static_info        PrelFloat_Dzh_static_info
+#define Azh_static_info        PrelAddr_Azh_static_info
+#define Wzh_static_info        PrelAddr_Wzh_static_info
+#define Czh_con_info           PrelBase_Czh_con_info
+#define Izh_con_info           PrelBase_Izh_con_info
+#define Fzh_con_info           PrelFloat_Fzh_con_info
+#define Dzh_con_info           PrelFloat_Dzh_con_info
+#define Azh_con_info           PrelAddr_Azh_con_info
+#define Wzh_con_info           PrelAddr_Wzh_con_info
+#define W64zh_con_info         PrelAddr_W64zh_con_info
+#define I64zh_con_info         PrelAddr_I64zh_con_info
+#define StablePtr_static_info  PrelStable_StablePtr_static_info
+#define StablePtr_con_info     PrelStable_StablePtr_con_info
+
+#define mainIO_closure         PrelMain_mainIO_closure
+#define unpackCString_closure  PrelPack_unpackCString_closure
+
+#else /* INTERPRETER, I guess */
+
+extern const StgInfoTable Czh_con_info;
+extern const StgInfoTable Izh_con_info;
+extern const StgInfoTable I64zh_con_info;
+extern const StgInfoTable Fzh_con_info;
+extern const StgInfoTable Dzh_con_info;
+extern const StgInfoTable Azh_con_info;
+extern const StgInfoTable Wzh_con_info;
+extern const StgInfoTable StablePtr_con_info;
+
+extern const StgInfoTable Czh_static_info;
+extern const StgInfoTable Izh_static_info;
+extern const StgInfoTable I64zh_static_info;
+extern const StgInfoTable Fzh_static_info;
+extern const StgInfoTable Dzh_static_info;
+extern const StgInfoTable Azh_static_info;
+extern const StgInfoTable Wzh_static_info;
+extern const StgInfoTable StablePtr_static_info;
+
+#define W64zh_con_info        I64zh_con_info
+#define W64zh_static_info     I64zh_con_info
+
+#endif
+
+#endif /* COMPILING_RTS */
+
+#endif /* PRELUDE_H */
diff --git a/ghc/rts/PrimOps.hc b/ghc/rts/PrimOps.hc
index 709947a8289e..ff672a02d7e4 100644
--- a/ghc/rts/PrimOps.hc
+++ b/ghc/rts/PrimOps.hc
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: PrimOps.hc,v 1.43 2000/02/28 13:59:43 simonmar Exp $
+ * $Id: PrimOps.hc,v 1.44 2000/03/13 10:53:56 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -19,6 +19,7 @@
 #include "StablePriv.h"
 #include "HeapStackCheck.h"
 #include "StgRun.h"
+#include "Prelude.h"
 
 /* ** temporary **
 
@@ -903,7 +904,8 @@ FN_(putMVarzh_fast)
 #endif
 
   if (info == &FULL_MVAR_info) {
-    barf("putMVar#: MVar already full");
+    R1.cl = (StgClosure *)&PutFullMVar_closure;
+    JMP_(raisezh_fast);
   }
   
   mvar->value = R2.cl;
diff --git a/ghc/rts/RtsAPI.c b/ghc/rts/RtsAPI.c
index fb4df6ced2fd..0009fb69bded 100644
--- a/ghc/rts/RtsAPI.c
+++ b/ghc/rts/RtsAPI.c
@@ -1,5 +1,5 @@
 /* ----------------------------------------------------------------------------
- * $Id: RtsAPI.c,v 1.10 1999/11/02 15:05:59 simonmar Exp $
+ * $Id: RtsAPI.c,v 1.11 2000/03/13 10:53:56 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -13,6 +13,7 @@
 #include "SchedAPI.h"
 #include "RtsFlags.h"
 #include "RtsUtils.h"
+#include "Prelude.h"
 
 /* ----------------------------------------------------------------------------
    Building Haskell objects from C datatypes.
diff --git a/ghc/rts/Schedule.c b/ghc/rts/Schedule.c
index fa7ce4136404..a425fc203195 100644
--- a/ghc/rts/Schedule.c
+++ b/ghc/rts/Schedule.c
@@ -1,5 +1,5 @@
 /* ---------------------------------------------------------------------------
- * $Id: Schedule.c,v 1.50 2000/03/13 09:57:16 simonmar Exp $
+ * $Id: Schedule.c,v 1.51 2000/03/13 10:53:56 simonmar Exp $
  *
  * (c) The GHC Team, 1998-2000
  *
@@ -72,6 +72,7 @@
 #include "Sanity.h"
 #include "Stats.h"
 #include "Sparks.h"
+#include "Prelude.h"
 #if defined(GRAN) || defined(PAR)
 # include "GranSimRts.h"
 # include "GranSim.h"
diff --git a/ghc/rts/StgMiscClosures.hc b/ghc/rts/StgMiscClosures.hc
index c904f9db6264..5e966c39099c 100644
--- a/ghc/rts/StgMiscClosures.hc
+++ b/ghc/rts/StgMiscClosures.hc
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: StgMiscClosures.hc,v 1.36 2000/03/01 16:57:57 sewardj Exp $
+ * $Id: StgMiscClosures.hc,v 1.37 2000/03/13 10:53:55 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -15,6 +15,7 @@
 #include "Storage.h"
 #include "StoragePriv.h"
 #include "ProfRts.h"
+#include "Prelude.h"
 #include "SMP.h"
 #if defined(GRAN) || defined(PAR)
 # include "GranSimRts.h"      /* for DumpRawGranEvent */
-- 
GitLab