From 564f5f6203ea431c7b50d3dad348e2a846589485 Mon Sep 17 00:00:00 2001 From: sewardj Date: Fri, 25 Feb 2000 10:53:54 +0000 Subject: [PATCH] [project @ 2000-02-25 10:53:53 by sewardj] Nuke PTR_ON_HEAP and all associated ifdeffery; we always need it. --- ghc/includes/options.h | 18 +++--------------- ghc/interpreter/storage.c | 35 +++++++++++++++++++++++++---------- ghc/interpreter/storage.h | 16 +++++++++------- 3 files changed, 37 insertions(+), 32 deletions(-) diff --git a/ghc/includes/options.h b/ghc/includes/options.h index 7775e56..dc826a2 100644 --- a/ghc/includes/options.h +++ b/ghc/includes/options.h @@ -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 $ * ------------------------------------------------------------------------*/ @@ -158,12 +152,6 @@ */ #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. */ diff --git a/ghc/interpreter/storage.c b/ghc/interpreter/storage.c index 1743802..cf50bf4 100644 --- a/ghc/interpreter/storage.c +++ b/ghc/interpreter/storage.c @@ -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; { diff --git a/ghc/interpreter/storage.h b/ghc/interpreter/storage.h index 3d745c8..932f553 100644 --- a/ghc/interpreter/storage.h +++ b/ghc/interpreter/storage.h @@ -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)