only dump stack if user not handling the stack #47
This commit is contained in:
parent
1005fa8abf
commit
e6265e9d84
28
C/errors.c
28
C/errors.c
@ -225,6 +225,31 @@ detect_bug_location(yamop *yap_pc, find_pred_type where_from, char *tp, int psiz
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
handled_exception(void)
|
||||||
|
{
|
||||||
|
yamop *pos = NEXTOP(PredDollarCatch->cs.p_code.TrueCodeOfPred,l);
|
||||||
|
int found_handler = FALSE;
|
||||||
|
choiceptr gc_b;
|
||||||
|
|
||||||
|
gc_b = B;
|
||||||
|
while (gc_b) {
|
||||||
|
yamop *ap = gc_b->cp_ap;
|
||||||
|
if (ap == NOCODE) {
|
||||||
|
/* C-code: let they deal with that */
|
||||||
|
return FALSE;
|
||||||
|
} else if (ap == pos) {
|
||||||
|
if (found_handler)
|
||||||
|
return TRUE; /* we have two handlers */
|
||||||
|
found_handler = TRUE;
|
||||||
|
}
|
||||||
|
gc_b = gc_b->cp_b;
|
||||||
|
}
|
||||||
|
/* handled by Top c-code? */
|
||||||
|
return !found_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dump_stack(void)
|
dump_stack(void)
|
||||||
{
|
{
|
||||||
@ -234,6 +259,9 @@ dump_stack(void)
|
|||||||
yamop *ipc = CP;
|
yamop *ipc = CP;
|
||||||
int max_count = 200;
|
int max_count = 200;
|
||||||
|
|
||||||
|
/* check if handled */
|
||||||
|
if (handled_exception())
|
||||||
|
return;
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
fprintf(stderr,"%% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n",P,CP,ASP,H,TR,HeapTop);
|
fprintf(stderr,"%% YAP regs: P=%p, CP=%p, ASP=%p, H=%p, TR=%p, HeapTop=%p\n",P,CP,ASP,H,TR,HeapTop);
|
||||||
fprintf(stderr,"%% YAP mode: %ux\n",(unsigned int)Yap_PrologMode);
|
fprintf(stderr,"%% YAP mode: %ux\n",(unsigned int)Yap_PrologMode);
|
||||||
|
Reference in New Issue
Block a user