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;
Defined struct's
frame
defined in line
35; used 6 times
Defined typedef's
pbuf
defined in line
67;
never used
Defined macros
C_GO
defined in line
21;
never used
C_RET
defined in line
22;
never used