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