/* -[Sat Jan 29 13:55:13 1983 by jkf]- * frame.h $Locker: $ * non local goto frame definition * * $Header: frame.h,v 1.3 83/09/12 15:29:08 sklower Exp $ * * (c) copyright 1982, Regents of the University of California */ /* classes of frames: */ #define F_PROG 1 #define F_CATCH 2 #define F_RESET 3 #define F_EVAL 4 #define F_FUNCALL 5 #define F_TO_FORT 6 #define F_TO_LISP 7 /* classes of things thrown up */ #define C_INITIAL 0 #define C_GO 1 #define C_RET 2 #define C_THROW 3 #define C_RESET 4 #define C_FRETURN 5 /* the evaluation frame sits on the C runtime stack. the global variable errp points to the newest frame. The base of the frame points in the middle of the frame, but in such a way that above the frame base the contents are the same for all implementation, and below it there are different saved registers for each machine. */ struct frame { struct argent *svlbot, *svnp; struct nament *svbnp; struct frame *olderrp; lispval retaddr; long class; lispval larg1; /* optional */ lispval larg2; /* optional */ }; extern struct frame *errp, *Pushframe(), *Ipushf(); /* stuff for IBM, RIDGE, DEC-VMS CC, maybe Bellmac-32 * * The non obvious requirement is that any new function * requiring a Pushframe must declare * * pbuf pb; * * as well. */ #ifdef SPISFP #define Pushframe(a,b,c) Ipushf(a,b,c,&pb) #endif typedef struct pframe { long regs[16]; struct frame f; } pbuf;