1*5545Slinton /* Copyright (c) 1982 Regents of the University of California */
2*5545Slinton 
3*5545Slinton static char sccsid[] = "@(#)opinfo.h 1.1 01/18/82";
4*5545Slinton 
5*5545Slinton /*
6*5545Slinton  * tree operator definitions
7*5545Slinton  */
8*5545Slinton 
9*5545Slinton struct opinfo {
10*5545Slinton 	short opflags;
11*5545Slinton 	char *opstring;
12*5545Slinton };
13*5545Slinton 
14*5545Slinton OPINFO opinfo[];
15*5545Slinton 
16*5545Slinton #define O_NOP	0	/* no op */
17*5545Slinton #define O_NAME	1	/* leaf op for address of a variable */
18*5545Slinton #define O_QNAME	2	/* variable qualified by surrounding block */
19*5545Slinton #define O_LCON	3	/* long constant (i.e. integer) */
20*5545Slinton #define O_FCON	4	/* floating constant (i.e. real) */
21*5545Slinton #define O_SCON	5	/* string constant (type alfa) */
22*5545Slinton #define O_INDEX	6	/* array subscript (does just one index) */
23*5545Slinton #define O_INDIR 7	/* indirection through a pointer */
24*5545Slinton #define O_RVAL	8	/* get value of an operand address */
25*5545Slinton #define O_COMMA	9	/* as in parameter lists */
26*5545Slinton 
27*5545Slinton /*
28*5545Slinton  * arithmetic operators
29*5545Slinton  */
30*5545Slinton 
31*5545Slinton #define O_ITOF	10	/* convert integer to real */
32*5545Slinton #define O_ADD	11
33*5545Slinton #define O_ADDF	12
34*5545Slinton #define O_SUB	13
35*5545Slinton #define O_SUBF	14
36*5545Slinton #define O_NEG	15
37*5545Slinton #define O_NEGF	16
38*5545Slinton #define O_MUL	17
39*5545Slinton #define O_MULF	18
40*5545Slinton #define O_DIVF	19	/* real divided by real */
41*5545Slinton #define O_DIV	20	/* integer divided by integer, integer result */
42*5545Slinton #define O_MOD	21
43*5545Slinton 
44*5545Slinton /*
45*5545Slinton  * logical operators
46*5545Slinton  */
47*5545Slinton 
48*5545Slinton #define O_AND	22
49*5545Slinton #define O_OR	23
50*5545Slinton 
51*5545Slinton /*
52*5545Slinton  * relational operators
53*5545Slinton  */
54*5545Slinton 
55*5545Slinton #define O_LT	24
56*5545Slinton #define O_LTF	25
57*5545Slinton #define O_LE	26
58*5545Slinton #define O_LEF	27
59*5545Slinton #define O_GT	28
60*5545Slinton #define O_GTF	29
61*5545Slinton #define O_GE	30
62*5545Slinton #define O_GEF	31
63*5545Slinton #define O_EQ	32
64*5545Slinton #define O_EQF	33
65*5545Slinton #define O_NE	34
66*5545Slinton #define O_NEF	35
67*5545Slinton 
68*5545Slinton /*
69*5545Slinton  * debugger commands
70*5545Slinton  */
71*5545Slinton 
72*5545Slinton #define O_ASSIGN 36
73*5545Slinton #define O_CHFILE 37
74*5545Slinton #define O_CONT	38
75*5545Slinton #define O_LIST	39
76*5545Slinton #define O_NEXT	40
77*5545Slinton #define O_PRINT	41
78*5545Slinton #define O_STEP	42
79*5545Slinton #define O_WHATIS 43
80*5545Slinton #define O_WHERE	44
81*5545Slinton #define O_XI	45
82*5545Slinton #define O_XD	46
83*5545Slinton #define O_CALL	47
84*5545Slinton #define O_EDIT	48
85*5545Slinton #define O_DUMP	49
86*5545Slinton #define O_HELP	50
87*5545Slinton #define O_REMAKE 51
88*5545Slinton #define O_RUN	52
89*5545Slinton #define O_SOURCE 53
90*5545Slinton #define O_STATUS 54
91*5545Slinton #define O_TRACE	55
92*5545Slinton #define O_TRACEI 56
93*5545Slinton #define O_STOP	57
94*5545Slinton #define O_STOPI	58
95*5545Slinton #define O_DELETE 59
96*5545Slinton #define O_WHICH 60
97*5545Slinton #define O_QLINE 61		/* filename : linenumber */
98*5545Slinton #define O_ALIAS 62
99*5545Slinton 
100*5545Slinton #define O_LASTOP 62		/* must be number of last operator */
101*5545Slinton 
102*5545Slinton /*
103*5545Slinton  * operator flags and predicates
104*5545Slinton  */
105*5545Slinton 
106*5545Slinton #define LEAF 01
107*5545Slinton #define UNARY 02
108*5545Slinton #define BINARY 04
109*5545Slinton #define BOOL 010
110*5545Slinton #define REALOP 020
111*5545Slinton #define INTOP 040
112*5545Slinton 
113*5545Slinton #define isbitset(a, m)	((a&m) == m)
114*5545Slinton #define isleaf(o)	isbitset(opinfo[o].opflags, LEAF)
115*5545Slinton #define isunary(o)	isbitset(opinfo[o].opflags, UNARY)
116*5545Slinton #define isbinary(o)	isbitset(opinfo[o].opflags, BINARY)
117*5545Slinton #define isreal(o)	isbitset(opinfo[o].opflags, REALOP)
118*5545Slinton #define isint(o)	isbitset(opinfo[o].opflags, INTOP)
119*5545Slinton #define isboolean(o)	isbitset(opinfo[o].opflags, BOOL)
120*5545Slinton 
121*5545Slinton #define degree(o)	(opinfo[o].opflags&(LEAF|UNARY|BINARY))
122