[project @ 2000-12-07 08:22:53 by simonpj]
[ghc-hetmet.git] / ghc / interpreter / storage.c
index 9564eb2..9d743bf 100644 (file)
@@ -9,8 +9,8 @@
  * included in the distribution.
  *
  * $RCSfile: storage.c,v $
- * $Revision: 1.76 $
- * $Date: 2000/05/10 09:02:25 $
+ * $Revision: 1.78 $
+ * $Date: 2000/06/23 13:13:10 $
  * ------------------------------------------------------------------------*/
 
 #include "hugsbasictypes.h"
 #include "object.h"
 #include <setjmp.h>
 #include "Stg.h"
-#include "Storage.h"      /* for MarkRoot */
+
+/* #include "Storage.h"
+   We'd like to, but Storage.h and storage.h look the same under
+   Cygwin, alas, causing compilation chaos.  So just copy what
+   we need to know, which is ...
+*/
+extern StgClosure* MarkRoot ( StgClosure* );
 
 /*#define DEBUG_SHOWUSE*/
 
@@ -494,7 +500,7 @@ static Bool debugStorageExtra = FALSE;
          assert(n < TAB_BASE_ADDR+tab_size);                            \
          assert(tab_name[n-TAB_BASE_ADDR].inUse);                       \
          tab_name[n-TAB_BASE_ADDR].inUse = FALSE;                       \
-         if (1 || (!debugStorageExtra)) {                               \
+         if (!debugStorageExtra) {                                      \
             tab_name[n-TAB_BASE_ADDR].nextFree = free_list;             \
             free_list = n;                                              \
          }                                                              \
@@ -1915,15 +1921,18 @@ OSectionKind lookupSection ( void* ad )
    ObjectCode*  oc;
    OSectionKind sect;
 
+   /* speedup hack */
+   if (!combined) return HUGS_SECTIONKIND_OTHER;
+
    for (m = MODULE_BASE_ADDR; 
         m < MODULE_BASE_ADDR+tabModuleSz; m++) {
       if (tabModule[m-MODULE_BASE_ADDR].inUse) {
-         if (module(m).object) {
-            sect = ocLookupSection ( module(m).object, ad );
+         if (tabModule[m-MODULE_BASE_ADDR].object) {
+            sect = ocLookupSection ( tabModule[m-MODULE_BASE_ADDR].object, ad );
             if (sect != HUGS_SECTIONKIND_NOINFOAVAIL)
                return sect;
          }
-         for (oc = module(m).objectExtras; oc; oc=oc->next) {
+         for (oc = tabModule[m-MODULE_BASE_ADDR].objectExtras; oc; oc=oc->next) {
             sect = ocLookupSection ( oc, ad );
             if (sect != HUGS_SECTIONKIND_NOINFOAVAIL)
                return sect;
@@ -1945,7 +1954,7 @@ void markHugsObjects( void )
     for ( nm = NAME_BASE_ADDR; 
           nm < NAME_BASE_ADDR+tabNameSz; ++nm ) {
        if (tabName[nm-NAME_BASE_ADDR].inUse) {
-           Cell cl = name(nm).closure;
+           Cell cl = tabName[nm-NAME_BASE_ADDR].closure;
            if (nonNull(cl)) {
               assert(isCPtr(cl));
               snd(cl) = (Cell)MarkRoot ( (StgClosure*)(snd(cl)) );
@@ -1956,14 +1965,13 @@ void markHugsObjects( void )
     for ( tc = TYCON_BASE_ADDR; 
           tc < TYCON_BASE_ADDR+tabTyconSz; ++tc ) {
        if (tabTycon[tc-TYCON_BASE_ADDR].inUse) {
-           Cell cl = tycon(tc).closure;
+           Cell cl = tabTycon[tc-TYCON_BASE_ADDR].closure;
            if (nonNull(cl)) {
               assert(isCPtr(cl));
               snd(cl) = (Cell)MarkRoot ( (StgClosure*)(snd(cl)) );
           }
        }
     }
-
 }