xref: /original-bsd/usr.bin/pascal/pdx/tree/opinfo.h (revision 5b05b0fc)
15c4e8a95Sbostic /*-
2*5b05b0fcSbostic  * Copyright (c) 1980, 1993
3*5b05b0fcSbostic  *	The Regents of the University of California.  All rights reserved.
455550d53Sdist  *
55c4e8a95Sbostic  * %sccs.include.redist.c%
65c4e8a95Sbostic  *
7*5b05b0fcSbostic  *	@(#)opinfo.h	8.1 (Berkeley) 06/06/93
855550d53Sdist  */
97d52c5fcSlinton 
107d52c5fcSlinton /*
11df124c97Slinton  * Tree operator definitions.
127d52c5fcSlinton  */
137d52c5fcSlinton 
147d52c5fcSlinton struct opinfo {
157d52c5fcSlinton 	short opflags;
167d52c5fcSlinton 	char *opstring;
177d52c5fcSlinton };
187d52c5fcSlinton 
197d52c5fcSlinton OPINFO opinfo[];
207d52c5fcSlinton 
217d52c5fcSlinton #define O_NOP	0	/* no op */
227d52c5fcSlinton #define O_NAME	1	/* leaf op for address of a variable */
237d52c5fcSlinton #define O_QNAME	2	/* variable qualified by surrounding block */
247d52c5fcSlinton #define O_LCON	3	/* long constant (i.e. integer) */
257d52c5fcSlinton #define O_FCON	4	/* floating constant (i.e. real) */
267d52c5fcSlinton #define O_SCON	5	/* string constant (type alfa) */
277d52c5fcSlinton #define O_INDEX	6	/* array subscript (does just one index) */
287d52c5fcSlinton #define O_INDIR 7	/* indirection through a pointer */
297d52c5fcSlinton #define O_RVAL	8	/* get value of an operand address */
307d52c5fcSlinton #define O_COMMA	9	/* as in parameter lists */
317d52c5fcSlinton 
327d52c5fcSlinton /*
337d52c5fcSlinton  * arithmetic operators
347d52c5fcSlinton  */
357d52c5fcSlinton 
367d52c5fcSlinton #define O_ITOF	10	/* convert integer to real */
377d52c5fcSlinton #define O_ADD	11
387d52c5fcSlinton #define O_ADDF	12
397d52c5fcSlinton #define O_SUB	13
407d52c5fcSlinton #define O_SUBF	14
417d52c5fcSlinton #define O_NEG	15
427d52c5fcSlinton #define O_NEGF	16
437d52c5fcSlinton #define O_MUL	17
447d52c5fcSlinton #define O_MULF	18
457d52c5fcSlinton #define O_DIVF	19	/* real divided by real */
467d52c5fcSlinton #define O_DIV	20	/* integer divided by integer, integer result */
477d52c5fcSlinton #define O_MOD	21
487d52c5fcSlinton 
497d52c5fcSlinton /*
507d52c5fcSlinton  * logical operators
517d52c5fcSlinton  */
527d52c5fcSlinton 
537d52c5fcSlinton #define O_AND	22
547d52c5fcSlinton #define O_OR	23
557d52c5fcSlinton 
567d52c5fcSlinton /*
577d52c5fcSlinton  * relational operators
587d52c5fcSlinton  */
597d52c5fcSlinton 
607d52c5fcSlinton #define O_LT	24
617d52c5fcSlinton #define O_LTF	25
627d52c5fcSlinton #define O_LE	26
637d52c5fcSlinton #define O_LEF	27
647d52c5fcSlinton #define O_GT	28
657d52c5fcSlinton #define O_GTF	29
667d52c5fcSlinton #define O_GE	30
677d52c5fcSlinton #define O_GEF	31
687d52c5fcSlinton #define O_EQ	32
697d52c5fcSlinton #define O_EQF	33
707d52c5fcSlinton #define O_NE	34
717d52c5fcSlinton #define O_NEF	35
727d52c5fcSlinton 
737d52c5fcSlinton /*
747d52c5fcSlinton  * debugger commands
757d52c5fcSlinton  */
767d52c5fcSlinton 
777d52c5fcSlinton #define O_ASSIGN 36
787d52c5fcSlinton #define O_CHFILE 37
797d52c5fcSlinton #define O_CONT	38
807d52c5fcSlinton #define O_LIST	39
817d52c5fcSlinton #define O_NEXT	40
827d52c5fcSlinton #define O_PRINT	41
837d52c5fcSlinton #define O_STEP	42
847d52c5fcSlinton #define O_WHATIS 43
857d52c5fcSlinton #define O_WHERE	44
867d52c5fcSlinton #define O_XI	45
877d52c5fcSlinton #define O_XD	46
887d52c5fcSlinton #define O_CALL	47
897d52c5fcSlinton #define O_EDIT	48
907d52c5fcSlinton #define O_DUMP	49
917d52c5fcSlinton #define O_HELP	50
927d52c5fcSlinton #define O_REMAKE 51
937d52c5fcSlinton #define O_RUN	52
947d52c5fcSlinton #define O_SOURCE 53
957d52c5fcSlinton #define O_STATUS 54
967d52c5fcSlinton #define O_TRACE	55
977d52c5fcSlinton #define O_TRACEI 56
987d52c5fcSlinton #define O_STOP	57
997d52c5fcSlinton #define O_STOPI	58
1007d52c5fcSlinton #define O_DELETE 59
1017d52c5fcSlinton #define O_WHICH 60
1027d52c5fcSlinton #define O_QLINE 61		/* filename : linenumber */
1037d52c5fcSlinton #define O_ALIAS 62
104df124c97Slinton #define O_GRIPE 63
1057d52c5fcSlinton 
106df124c97Slinton #define O_LASTOP 63		/* must be number of last operator */
1077d52c5fcSlinton 
1087d52c5fcSlinton /*
1097d52c5fcSlinton  * operator flags and predicates
1107d52c5fcSlinton  */
1117d52c5fcSlinton 
1127d52c5fcSlinton #define LEAF 01
1137d52c5fcSlinton #define UNARY 02
1147d52c5fcSlinton #define BINARY 04
1157d52c5fcSlinton #define BOOL 010
1167d52c5fcSlinton #define REALOP 020
1177d52c5fcSlinton #define INTOP 040
1187d52c5fcSlinton 
1197d52c5fcSlinton #define isbitset(a, m)	((a&m) == m)
1207d52c5fcSlinton #define isleaf(o)	isbitset(opinfo[o].opflags, LEAF)
1217d52c5fcSlinton #define isunary(o)	isbitset(opinfo[o].opflags, UNARY)
1227d52c5fcSlinton #define isbinary(o)	isbitset(opinfo[o].opflags, BINARY)
1237d52c5fcSlinton #define isreal(o)	isbitset(opinfo[o].opflags, REALOP)
1247d52c5fcSlinton #define isint(o)	isbitset(opinfo[o].opflags, INTOP)
1257d52c5fcSlinton #define isboolean(o)	isbitset(opinfo[o].opflags, BOOL)
1267d52c5fcSlinton 
1277d52c5fcSlinton #define degree(o)	(opinfo[o].opflags&(LEAF|UNARY|BINARY))
128