|
|
1.1 ! root 1: /* -[Sat Jan 29 13:55:13 1983 by jkf]- ! 2: * frame.h $Locker: $ ! 3: * non local goto frame definition ! 4: * ! 5: * $Header: frame.h,v 1.3 83/09/12 15:29:08 sklower Exp $ ! 6: * ! 7: * (c) copyright 1982, Regents of the University of California ! 8: */ ! 9: ! 10: /* classes of frames: */ ! 11: #define F_PROG 1 ! 12: #define F_CATCH 2 ! 13: #define F_RESET 3 ! 14: #define F_EVAL 4 ! 15: #define F_FUNCALL 5 ! 16: #define F_TO_FORT 6 ! 17: #define F_TO_LISP 7 ! 18: ! 19: /* classes of things thrown up */ ! 20: #define C_INITIAL 0 ! 21: #define C_GO 1 ! 22: #define C_RET 2 ! 23: #define C_THROW 3 ! 24: #define C_RESET 4 ! 25: #define C_FRETURN 5 ! 26: ! 27: ! 28: /* the evaluation frame sits on the C runtime stack. the global variable errp ! 29: points to the newest frame. The base of the frame points in the middle ! 30: of the frame, but in such a way that above the frame base the contents ! 31: are the same for all implementation, and below it there are different ! 32: saved registers for each machine. ! 33: */ ! 34: ! 35: struct frame ! 36: { ! 37: struct argent *svlbot, *svnp; ! 38: struct nament *svbnp; ! 39: struct frame *olderrp; ! 40: lispval retaddr; ! 41: long class; ! 42: lispval larg1; /* optional */ ! 43: lispval larg2; /* optional */ ! 44: }; ! 45: ! 46: extern struct frame *errp, *Pushframe(), *Ipushf(); ! 47: ! 48: /* stuff for IBM, RIDGE, DEC-VMS CC, maybe Bellmac-32 ! 49: * ! 50: * The non obvious requirement is that any new function ! 51: * requiring a Pushframe must declare ! 52: * ! 53: * pbuf pb; ! 54: * ! 55: * as well. ! 56: */ ! 57: ! 58: #ifdef SPISFP ! 59: #define Pushframe(a,b,c) Ipushf(a,b,c,&pb) ! 60: #endif ! 61: ! 62: ! 63: typedef struct pframe ! 64: { ! 65: long regs[16]; ! 66: struct frame f; ! 67: } pbuf;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.