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