-/* -*- mode: hugs-c; -*- */
+
/* -----------------------------------------------------------------------------
- * $Id: Printer.c,v 1.2 1998/12/02 13:28:33 simonm Exp $
+ * $Id: Printer.c,v 1.10 1999/03/15 16:30:29 simonm Exp $
*
- * Copyright (c) 1994-1998.
+ * Copyright (c) 1994-1999.
*
* Heap printer
*
* Printer
* ------------------------------------------------------------------------*/
+
+#ifdef INTERPRETER
+extern void* itblNames[];
+extern int nItblNames;
+char* lookupHugsItblName ( void* v )
+{
+ int i;
+ for (i = 0; i < nItblNames; i += 2)
+ if (itblNames[i] == v) return itblNames[i+1];
+ return NULL;
+}
+#endif
+
extern void printPtr( StgPtr p )
{
+ char* str;
const char *raw;
if (lookupGHCName( p, &raw )) {
printZcoded(raw);
#ifdef INTERPRETER
} else if ((raw = lookupHugsName(p)) != 0) {
fprintf(stderr, "%s", raw);
+ } else if ((str = lookupHugsItblName(p)) != 0) {
+ fprintf(stderr, "%p=%s", p, str);
#endif
} else {
fprintf(stderr, "%p", p);
StgWord i, j;
const StgInfoTable* info = get_itbl(obj);
fprintf(stderr,"%s(",tag);
- printPtr((StgPtr)info);
+ printPtr((StgPtr)obj->header.info);
for (i = 0; i < info->layout.payload.ptrs; ++i) {
fprintf(stderr,", ");
printPtr(payloadPtr(obj,i));
disassemble(stgCast(StgBCO*,obj),"\t");
break;
#endif
+
case AP_UPD:
{
StgAP_UPD* ap = stgCast(StgAP_UPD*,obj);
fprintf(stderr,")\n");
break;
}
+
case PAP:
{
StgPAP* pap = stgCast(StgPAP*,obj);
StgWord i;
- fprintf(stderr,"AP_NUPD("); printPtr((StgPtr)pap->fun);
+ fprintf(stderr,"PAP("); printPtr((StgPtr)pap->fun);
for (i = 0; i < pap->n_args; ++i) {
fprintf(stderr,", ");
printPtr(payloadPtr(pap,i));
fprintf(stderr,")\n");
break;
}
+
case IND:
fprintf(stderr,"IND(");
printPtr((StgPtr)stgCast(StgInd*,obj)->indirectee);
fprintf(stderr,")\n");
break;
+
+ case IND_STATIC:
+ fprintf(stderr,"IND_STATIC(");
+ printPtr((StgPtr)stgCast(StgInd*,obj)->indirectee);
+ fprintf(stderr,")\n");
+ break;
+
+ case IND_OLDGEN:
+ fprintf(stderr,"IND_OLDGEN(");
+ printPtr((StgPtr)stgCast(StgInd*,obj)->indirectee);
+ fprintf(stderr,")\n");
+ break;
+
case CAF_UNENTERED:
{
StgCAF* caf = stgCast(StgCAF*,obj);
fprintf(stderr,")\n");
break;
}
+
case CAF_ENTERED:
{
StgCAF* caf = stgCast(StgCAF*,obj);
fprintf(stderr,")\n");
break;
}
+
case CAF_BLACKHOLE:
fprintf(stderr,"CAF_BH(");
- printPtr((StgPtr)stgCast(StgBlackHole*,obj)->blocking_queue);
+ printPtr((StgPtr)stgCast(StgBlockingQueue*,obj)->blocking_queue);
fprintf(stderr,")\n");
break;
+
case BLACKHOLE:
- fprintf(stderr,"BH(");
- printPtr((StgPtr)stgCast(StgBlackHole*,obj)->blocking_queue);
+ fprintf(stderr,"BH\n");
+ break;
+
+ case BLACKHOLE_BQ:
+ fprintf(stderr,"BQ(");
+ printPtr((StgPtr)stgCast(StgBlockingQueue*,obj)->blocking_queue);
fprintf(stderr,")\n");
break;
+
case CONSTR:
+ case CONSTR_1_0: case CONSTR_0_1:
+ case CONSTR_1_1: case CONSTR_0_2: case CONSTR_2_0:
case CONSTR_INTLIKE:
case CONSTR_CHARLIKE:
case CONSTR_STATIC:
StgWord i, j;
const StgInfoTable* info = get_itbl(obj);
fprintf(stderr,"PACK(");
- printPtr((StgPtr)info);
+ printPtr((StgPtr)obj->header.info);
fprintf(stderr,"(tag=%d)",info->srt_len);
for (i = 0; i < info->layout.payload.ptrs; ++i) {
fprintf(stderr,", ");
fprintf(stderr,")\n");
break;
}
+
case FUN:
+ case FUN_1_0: case FUN_0_1:
+ case FUN_1_1: case FUN_0_2: case FUN_2_0:
case FUN_STATIC:
printStdObject(obj,"FUN");
break;
+
case THUNK:
+ case THUNK_1_0: case THUNK_0_1:
+ case THUNK_1_1: case THUNK_0_2: case THUNK_2_0:
case THUNK_STATIC:
/* ToDo: will this work for THUNK_STATIC too? */
printStdObject(obj,"THUNK");
fprintf(stderr,")\n");
break;
}
+
case CATCH_FRAME:
{
StgCatchFrame* u = stgCast(StgCatchFrame*,obj);
fprintf(stderr,")\n");
break;
}
+
case SEQ_FRAME:
{
StgSeqFrame* u = stgCast(StgSeqFrame*,obj);
fprintf(stderr,")\n");
break;
}
+
case STOP_FRAME:
{
StgStopFrame* u = stgCast(StgStopFrame*,obj);
break;
}
default:
- barf("printClosure %d",get_itbl(obj)->type);
+ //barf("printClosure %d",get_itbl(obj)->type);
+ fprintf(stderr, "*** printClosure: unknown type %d ****\n",get_itbl(obj)->type );
return;
}
}
#endif
} else {
+ StgClosure* c = (StgClosure*)(*sp);
printPtr((StgPtr)*sp);
- fprintf(stderr,"\n");
+#ifdef INTERPRETER
+ if (c == &ret_bco_info) {
+ fprintf(stderr, "\t\t");
+ fprintf(stderr, "ret_bco_info\n" );
+ } else
+ if (IS_HUGS_CONSTR_INFO(GET_INFO(c))) {
+ fprintf(stderr, "\t\t\t");
+ fprintf(stderr, "ConstrInfoTable\n" );
+ } else
+#endif
+ if (get_itbl(c)->type == BCO) {
+ fprintf(stderr, "\t\t\t");
+ fprintf(stderr, "BCO(...)\n");
+ }
+ else {
+ fprintf(stderr, "\t\t\t");
+ printClosure ( (StgClosure*)(*sp));
+ }
sp += 1;
}
return sp;
void printStackChunk( StgPtr sp, StgPtr spBottom )
{
- StgNat32 bitmap;
+ StgWord32 bitmap;
const StgInfoTable *info;
ASSERT(sp <= spBottom);