[project @ 2000-02-25 10:53:53 by sewardj]
authorsewardj <unknown>
Fri, 25 Feb 2000 10:53:54 +0000 (10:53 +0000)
committersewardj <unknown>
Fri, 25 Feb 2000 10:53:54 +0000 (10:53 +0000)
Nuke PTR_ON_HEAP and all associated ifdeffery; we always need it.

ghc/includes/options.h
ghc/interpreter/storage.c
ghc/interpreter/storage.h

index 7775e56..dc826a2 100644 (file)
@@ -1,20 +1,14 @@
-/* ../options.h.  Generated automatically by configure.  */
+
 /* --------------------------------------------------------------------------
  * Configuration options
  *
- * Most configuration options are arguments to the configure script
- * (try running "configure --help").  The following options are either
- * experimental or require changes to "Prelude.hs", the standard libraries
- * and demos and therefore cannot be modified using the configure script.
- * Most users should leave them alone!
- *
  * Copyright (c) The University of Nottingham and Yale University, 1994-1997.
  * All rights reserved. See NOTICE for details and conditions of use etc...
  * Hugs version 1.4, December 1997
  *
  * $RCSfile: options.h,v $
- * $Revision: 1.16 $
- * $Date: 2000/01/06 11:57:11 $
+ * $Revision: 1.17 $
+ * $Date: 2000/02/25 10:53:53 $
  * ------------------------------------------------------------------------*/
 
 
  */
 #define DYN_TABLES SMALL_HUGS
 
-/* Define this to include support for storing pointers in the heap.
- * This is required by the code generator (which has to store 
- * pointers to AsmObjects).
- */
-#define PTR_ON_HEAP 1
-
 /* Should quantifiers be displayed in error messages.
  * Warning: not consistently used.
  */
index 1743802..cf50bf4 100644 (file)
@@ -9,8 +9,8 @@
  * included in the distribution.
  *
  * $RCSfile: storage.c,v $
- * $Revision: 1.45 $
- * $Date: 2000/02/24 17:26:12 $
+ * $Revision: 1.46 $
+ * $Date: 2000/02/25 10:53:54 $
  * ------------------------------------------------------------------------*/
 
 #include "prelude.h"
@@ -2445,7 +2445,9 @@ Int n; {
 }
 
 #if SIZEOF_VOID_P == SIZEOF_INT
+
 typedef union {Int i; Ptr p;} IntOrPtr;
+
 Cell mkPtr(p)
 Ptr p;
 {
@@ -2462,6 +2464,7 @@ Cell c;
     x.i = snd(c);
     return x.p;
 }
+
 Cell mkCPtr(p)
 Ptr p;
 {
@@ -2478,8 +2481,11 @@ Cell c;
     x.i = snd(c);
     return x.p;
 }
+
 #elif SIZEOF_VOID_P == 2*SIZEOF_INT
+
 typedef union {struct {Int i1; Int i2;} i; Ptr p;} IntOrPtr;
+
 Cell mkPtr(p)
 Ptr p;
 {
@@ -2497,23 +2503,32 @@ Cell c;
     x.i.i2 = intOf(snd(snd(c)));
     return x.p;
 }
-#else
-#warning "type Addr not supported on this architecture - don't use it"
-Cell mkPtr(p)
+
+Cell mkCPtr(p)
 Ptr p;
 {
-    ERRMSG(0) "mkPtr: type Addr not supported on this architecture"
-    EEND;
+    IntOrPtr x;
+    x.p = p;
+    return pair(CPTRCELL,pair(mkInt(x.i.i1),mkInt(x.i.i2)));
 }
 
-Ptr ptrOf(c)
+Ptr cptrOf(c)
 Cell c;
 {
-    ERRMSG(0) "ptrOf: type Addr not supported on this architecture"
-    EEND;
+    IntOrPtr x;
+    assert(fst(c) == CPTRCELL);
+    x.i.i1 = intOf(fst(snd(c)));
+    x.i.i2 = intOf(snd(snd(c)));
+    return x.p;
 }
+
+#else
+
+#error "Can't implement mkPtr/ptrOf on this architecture."
+
 #endif
 
+
 String stringNegate( s )
 String s;
 {
index 3d745c8..932f553 100644 (file)
@@ -10,8 +10,8 @@
  * included in the distribution.
  *
  * $RCSfile: storage.h,v $
- * $Revision: 1.28 $
- * $Date: 2000/02/24 14:09:14 $
+ * $Revision: 1.29 $
+ * $Date: 2000/02/25 10:53:54 $
  * ------------------------------------------------------------------------*/
 
 /* --------------------------------------------------------------------------
@@ -140,6 +140,10 @@ extern  Cell         whatIs    Args((Cell));
  * and string text etc.
  * ------------------------------------------------------------------------*/
 
+#if !defined(SIZEOF_VOID_P) || !defined(SIZEOF_INT)
+#error SIZEOF_VOID_P or SIZEOF_INT is not defined
+#endif
+
 #define TAGMIN       1            /* Box and constructor cell tag values   */
 #define BCSTAG       30           /* Box=TAGMIN..BCSTAG-1                  */
 #define isTag(c)     (TAGMIN<=(c) && (c)<SPECMIN) /* Tag cell values       */
@@ -157,14 +161,14 @@ extern  Cell         whatIs    Args((Cell));
 #define ADDPAT       11           /* (_+k) pattern discr:     snd :: Int   */
 #define FLOATCELL    15           /* Floating Pt literal:     snd :: Text  */
 #define BIGCELL      16           /* Integer literal:         snd :: Text  */
-#if PTR_ON_HEAP
 #define PTRCELL      17           /* C Heap Pointer           snd :: Ptr   */
+#define CPTRCELL     21           /* Native code pointer      snd :: Ptr   */
+
 #if IPARAM
 #define IPCELL       19                  /* Imp Param Cell:          snd :: Text  */
 #define IPVAR       20           /* ?x:                      snd :: Text  */
 #endif
-#define CPTRCELL     21           /* Native code pointer      snd :: Ptr   */
-#endif
+
 #if TREX
 #define EXTCOPY      22           /* Copy of an Ext:          snd :: Text  */
 #endif
@@ -214,14 +218,12 @@ extern  Text            textOf       Args((Cell));
 #define stringToBignum(s) pair(BIGCELL,findText(s))
 #define bignumToString(b) textToStr(snd(b))
 
-#if PTR_ON_HEAP
 #define isPtr(c)        (isPair(c) && fst(c)==PTRCELL)
 extern  Cell            mkPtr           Args((Ptr));
 extern  Ptr             ptrOf           Args((Cell));
 #define isCPtr(c)       (isPair(c) && fst(c)==CPTRCELL)
 extern  Cell            mkCPtr          Args((Ptr));
 extern  Ptr             cptrOf          Args((Cell));
-#endif
 
 /* --------------------------------------------------------------------------
  * Constructor cell tags are used as the fst element of a pair to indicate