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