15545Slinton /* Copyright (c) 1982 Regents of the University of California */
25545Slinton 
3*5562Slinton /* static char sccsid[] = "@(#)opinfo.h 1.3 01/18/82"; */
45545Slinton 
55545Slinton /*
6*5562Slinton  * Tree operator definitions.
75545Slinton  */
85545Slinton 
95545Slinton struct opinfo {
105545Slinton 	short opflags;
115545Slinton 	char *opstring;
125545Slinton };
135545Slinton 
145545Slinton OPINFO opinfo[];
155545Slinton 
165545Slinton #define O_NOP	0	/* no op */
175545Slinton #define O_NAME	1	/* leaf op for address of a variable */
185545Slinton #define O_QNAME	2	/* variable qualified by surrounding block */
195545Slinton #define O_LCON	3	/* long constant (i.e. integer) */
205545Slinton #define O_FCON	4	/* floating constant (i.e. real) */
215545Slinton #define O_SCON	5	/* string constant (type alfa) */
225545Slinton #define O_INDEX	6	/* array subscript (does just one index) */
235545Slinton #define O_INDIR 7	/* indirection through a pointer */
245545Slinton #define O_RVAL	8	/* get value of an operand address */
255545Slinton #define O_COMMA	9	/* as in parameter lists */
265545Slinton 
275545Slinton /*
285545Slinton  * arithmetic operators
295545Slinton  */
305545Slinton 
315545Slinton #define O_ITOF	10	/* convert integer to real */
325545Slinton #define O_ADD	11
335545Slinton #define O_ADDF	12
345545Slinton #define O_SUB	13
355545Slinton #define O_SUBF	14
365545Slinton #define O_NEG	15
375545Slinton #define O_NEGF	16
385545Slinton #define O_MUL	17
395545Slinton #define O_MULF	18
405545Slinton #define O_DIVF	19	/* real divided by real */
415545Slinton #define O_DIV	20	/* integer divided by integer, integer result */
425545Slinton #define O_MOD	21
435545Slinton 
445545Slinton /*
455545Slinton  * logical operators
465545Slinton  */
475545Slinton 
485545Slinton #define O_AND	22
495545Slinton #define O_OR	23
505545Slinton 
515545Slinton /*
525545Slinton  * relational operators
535545Slinton  */
545545Slinton 
555545Slinton #define O_LT	24
565545Slinton #define O_LTF	25
575545Slinton #define O_LE	26
585545Slinton #define O_LEF	27
595545Slinton #define O_GT	28
605545Slinton #define O_GTF	29
615545Slinton #define O_GE	30
625545Slinton #define O_GEF	31
635545Slinton #define O_EQ	32
645545Slinton #define O_EQF	33
655545Slinton #define O_NE	34
665545Slinton #define O_NEF	35
675545Slinton 
685545Slinton /*
695545Slinton  * debugger commands
705545Slinton  */
715545Slinton 
725545Slinton #define O_ASSIGN 36
735545Slinton #define O_CHFILE 37
745545Slinton #define O_CONT	38
755545Slinton #define O_LIST	39
765545Slinton #define O_NEXT	40
775545Slinton #define O_PRINT	41
785545Slinton #define O_STEP	42
795545Slinton #define O_WHATIS 43
805545Slinton #define O_WHERE	44
815545Slinton #define O_XI	45
825545Slinton #define O_XD	46
835545Slinton #define O_CALL	47
845545Slinton #define O_EDIT	48
855545Slinton #define O_DUMP	49
865545Slinton #define O_HELP	50
875545Slinton #define O_REMAKE 51
885545Slinton #define O_RUN	52
895545Slinton #define O_SOURCE 53
905545Slinton #define O_STATUS 54
915545Slinton #define O_TRACE	55
925545Slinton #define O_TRACEI 56
935545Slinton #define O_STOP	57
945545Slinton #define O_STOPI	58
955545Slinton #define O_DELETE 59
965545Slinton #define O_WHICH 60
975545Slinton #define O_QLINE 61		/* filename : linenumber */
985545Slinton #define O_ALIAS 62
99*5562Slinton #define O_GRIPE 63
1005545Slinton 
101*5562Slinton #define O_LASTOP 63		/* must be number of last operator */
1025545Slinton 
1035545Slinton /*
1045545Slinton  * operator flags and predicates
1055545Slinton  */
1065545Slinton 
1075545Slinton #define LEAF 01
1085545Slinton #define UNARY 02
1095545Slinton #define BINARY 04
1105545Slinton #define BOOL 010
1115545Slinton #define REALOP 020
1125545Slinton #define INTOP 040
1135545Slinton 
1145545Slinton #define isbitset(a, m)	((a&m) == m)
1155545Slinton #define isleaf(o)	isbitset(opinfo[o].opflags, LEAF)
1165545Slinton #define isunary(o)	isbitset(opinfo[o].opflags, UNARY)
1175545Slinton #define isbinary(o)	isbitset(opinfo[o].opflags, BINARY)
1185545Slinton #define isreal(o)	isbitset(opinfo[o].opflags, REALOP)
1195545Slinton #define isint(o)	isbitset(opinfo[o].opflags, INTOP)
1205545Slinton #define isboolean(o)	isbitset(opinfo[o].opflags, BOOL)
1215545Slinton 
1225545Slinton #define degree(o)	(opinfo[o].opflags&(LEAF|UNARY|BINARY))
123