| |
|
| int go_forth(Address image, int stack, Cell *entries) |
int go_forth(Address image, int stack, Cell *entries) |
| { |
{ |
| Cell *sp=(Cell*)(((ImageHeader *)image)->data_stack_base + dsize); |
ImageHeader *image_header = (ImageHeader *)image; |
| Float *fp=(Float *)(((ImageHeader *)image)->fp_stack_base + fsize); |
Cell *sp0=(Cell*)(image_header->data_stack_base + dsize); |
| Cell *rp=(Cell *)(((ImageHeader *)image)->return_stack_base + rsize); |
Float *fp0=(Float *)(image_header->fp_stack_base + fsize); |
| Address lp=((ImageHeader *)image)->locals_stack_base + lsize; |
Cell *rp0=(Cell *)(image_header->return_stack_base + rsize); |
| Xt *ip=(Xt *)(((ImageHeader *)image)->boot_entry); |
Address lp0=image_header->locals_stack_base + lsize; |
| |
Xt *ip0=(Xt *)(image_header->boot_entry); |
| #ifdef SYSSIGNALS |
#ifdef SYSSIGNALS |
| int throw_code; |
int throw_code; |
| #endif |
#endif |
| |
|
| /* ensure that the cached elements (if any) are accessible */ |
/* ensure that the cached elements (if any) are accessible */ |
| IF_TOS(sp--); |
IF_TOS(sp0--); |
| IF_FTOS(fp--); |
IF_FTOS(fp0--); |
| |
|
| for(;stack>0;stack--) |
for(;stack>0;stack--) |
| *--sp=entries[stack-1]; |
*--sp0=entries[stack-1]; |
| |
|
| #if !defined(MSDOS) && !defined(SHARC) && !defined(_WIN32) && !defined(__EMX__) |
#if !defined(MSDOS) && !defined(SHARC) && !defined(_WIN32) && !defined(__EMX__) |
| get_winsize(); |
get_winsize(); |
| |
|
| signal_data_stack[7]=throw_code; |
signal_data_stack[7]=throw_code; |
| |
|
| return((int)engine(((ImageHeader *)image)->throw_entry,signal_data_stack+7, |
#ifdef GFORTH_DEBUGGING |
| signal_return_stack+8,signal_fp_stack,0)); |
if (rp <= rp0 && rp > (Cell *)(image_header->return_stack_base+5)) { |
| |
/* no rstack overflow or underflow */ |
| |
rp0 = rp; |
| |
*--rp0 = ip; |
| } |
} |
| |
else /* I love non-syntactic ifdefs :-) */ |
| #endif |
#endif |
| |
rp0 = signal_return_stack+8; |
| |
|
| return((int)engine(ip,sp,rp,fp,lp)); |
return((int)engine(image_header->throw_entry, signal_data_stack+7, |
| |
rp0, signal_fp_stack, 0)); |
| |
} |
| |
#endif |
| |
|
| |
return((int)engine(ip0,sp0,rp0,fp0,lp0)); |
| } |
} |
| |
|
| #ifndef INCLUDE_IMAGE |
#ifndef INCLUDE_IMAGE |