* 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*/
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; \
} \
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;
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)) );
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)) );
}
}
}
-
}