version 1.151, 2005/07/31 20:27:42
|
version 1.152, 2005/08/02 12:00:52
|
Line 167 static int no_dynamic=NO_DYNAMIC_DEFAULT
|
Line 167 static int no_dynamic=NO_DYNAMIC_DEFAULT
|
dynamically */ |
dynamically */ |
static int print_metrics=0; /* if true, print metrics on exit */ |
static int print_metrics=0; /* if true, print metrics on exit */ |
static int static_super_number = 10000000; /* number of ss used if available */ |
static int static_super_number = 10000000; /* number of ss used if available */ |
#define MAX_STATE 4 /* maximum number of states */ |
#define MAX_STATE 9 /* maximum number of states */ |
static int maxstates = MAX_STATE; /* number of states for stack caching */ |
static int maxstates = MAX_STATE; /* number of states for stack caching */ |
static int ss_greedy = 0; /* if true: use greedy, not optimal ss selection */ |
static int ss_greedy = 0; /* if true: use greedy, not optimal ss selection */ |
static int diag = 0; /* if true: print diagnostic informations */ |
static int diag = 0; /* if true: print diagnostic informations */ |
Line 608 int go_forth(Address image, int stack, C
|
Line 608 int go_forth(Address image, int stack, C
|
install_signal_handlers(); /* right place? */ |
install_signal_handlers(); /* right place? */ |
|
|
if ((throw_code=setjmp(throw_jmp_buf))) { |
if ((throw_code=setjmp(throw_jmp_buf))) { |
static Cell signal_data_stack[8]; |
static Cell signal_data_stack[24]; |
static Cell signal_return_stack[8]; |
static Cell signal_return_stack[16]; |
static Float signal_fp_stack[1]; |
static Float signal_fp_stack[1]; |
|
|
signal_data_stack[7]=throw_code; |
signal_data_stack[15]=throw_code; |
|
|
#ifdef GFORTH_DEBUGGING |
#ifdef GFORTH_DEBUGGING |
debugp(stderr,"\ncaught signal, throwing exception %d, ip=%p rp=%p\n", |
debugp(stderr,"\ncaught signal, throwing exception %d, ip=%p rp=%p\n", |
Line 623 int go_forth(Address image, int stack, C
|
Line 623 int go_forth(Address image, int stack, C
|
*--rp0 = (Cell)saved_ip; |
*--rp0 = (Cell)saved_ip; |
} |
} |
else /* I love non-syntactic ifdefs :-) */ |
else /* I love non-syntactic ifdefs :-) */ |
rp0 = signal_return_stack+8; |
rp0 = signal_return_stack+16; |
#else /* !defined(GFORTH_DEBUGGING) */ |
#else /* !defined(GFORTH_DEBUGGING) */ |
debugp(stderr,"\ncaught signal, throwing exception %d\n", throw_code); |
debugp(stderr,"\ncaught signal, throwing exception %d\n", throw_code); |
rp0 = signal_return_stack+8; |
rp0 = signal_return_stack+16; |
#endif /* !defined(GFORTH_DEBUGGING) */ |
#endif /* !defined(GFORTH_DEBUGGING) */ |
/* fprintf(stderr, "rp=$%x\n",rp0);*/ |
/* fprintf(stderr, "rp=$%x\n",rp0);*/ |
|
|
return((int)(Cell)engine(image_header->throw_entry, signal_data_stack+7, |
return((int)(Cell)engine(image_header->throw_entry, signal_data_stack+15, |
rp0, signal_fp_stack, 0)); |
rp0, signal_fp_stack, 0)); |
} |
} |
#endif |
#endif |