xref: /csrg-svn/usr.bin/pascal/src/pcops.h (revision 15995)
1739Speter /* Copyright (c) 1979 Regents of the University of California */
2739Speter 
3*15995Saoki /* static	char sccsid[] = "@(#)pcops.h 2.1 02/08/84"; */
4739Speter 
5739Speter     /*
6739Speter      *	tree node operators
7739Speter      */
8739Speter #define	P2UNDEFINED	1
9739Speter #define	P2NAME		2
10739Speter #define	P2STRING	3
11739Speter #define	P2ICON		4
12739Speter #define	P2FCON		5
13739Speter #define	P2PLUS		6
14739Speter #define	P2MINUS		8		/* also unary == P2NEG */
15739Speter #define	P2MUL		11		/* also unary == P2INDIRECT */
16739Speter #define	P2AND		14		/* also unary */
17739Speter #define	P2OR		17
18739Speter #define	P2ER		19
19739Speter #define	P2QUEST		21
20739Speter #define	P2COLON		22
21739Speter #define	P2ANDAND	23
22739Speter #define	P2OROR		24
23739Speter     /*
24739Speter      *	yacc operator classes, reserved words, little symbols, etc.
25739Speter      *	operators 25 .. 57 not used, except 56
26739Speter      */
27739Speter #define P2LISTOP	56
28739Speter #define	P2ASSIGN	58
29739Speter #define	P2COMOP		59
30739Speter #define	P2DIV		60
31739Speter #define	P2MOD		62
32739Speter #define	P2LS		64
33739Speter #define	P2RS		66
34739Speter #define	P2DOT		68
35739Speter #define	P2STREF		69
36739Speter #define	P2CALL		70		/* also unary */
37739Speter #define	P2FORTCALL	73		/* also unary */
38739Speter #define	P2NOT		76
39739Speter #define	P2COMPL		77
40739Speter #define	P2INCR		78
41739Speter #define	P2DECR		79
42739Speter #define	P2EQ		80
43739Speter #define	P2NE		81
44739Speter #define	P2LE		82
45739Speter #define	P2LT		83
46739Speter #define	P2GE		84
47739Speter #define	P2GT		85
48739Speter #define	P2ULE		86
49739Speter #define	P2ULT		87
50739Speter #define	P2UGE		88
51739Speter #define	P2UGT		89
52739Speter #define	P2SETBIT	90
53739Speter #define	P2TESTBIT	91
54739Speter #define	P2RESETBIT	92
55739Speter #define	P2ARS		93
56739Speter #define	P2REG		94
57739Speter #define	P2OREG		95
58739Speter #define	P2CCODES	96
59739Speter #define	P2FREE		97
60739Speter #define	P2STASG		98
61739Speter #define	P2STARG		99
62739Speter #define	P2STCALL	100		/* also unary */
63739Speter 
64739Speter     /*
65739Speter      *	some conversion operators
66739Speter      */
67739Speter #define	P2FLD		103
68739Speter #define	P2SCONV		104
69739Speter #define	P2PCONV		105
70739Speter #define	P2PMCONV	106
71739Speter #define	P2PVCONV	107
72739Speter 
73739Speter     /*
74739Speter      *	special node operators, used for special contexts
75739Speter      */
76739Speter #define	P2FORCE		108
77739Speter #define	P2CBRANCH	109
78739Speter #define	P2INIT		110
79739Speter #define	P2CAST		111
80739Speter 
81739Speter     /*
82739Speter      *	prefix unary operator modifier
83739Speter      */
84739Speter #define	P2ASG		1+
85739Speter #define	P2UNARY		2+
86739Speter 
87739Speter     /*
88739Speter      *	these borrowed from /usr/src/cmd/mip/fort.c
89739Speter      *	to use the binary interface.
90739Speter      *	only FTEXT, FEXPR, FLBRAC, FRBRAC, and FEOF are used
91739Speter      */
92739Speter #define	P2FTEXT		200
93739Speter #define	P2FEXPR		201
94739Speter #define	P2FLBRAC	203
95739Speter #define	P2FRBRAC	204
96739Speter #define	P2FEOF		205
97739Speter 
98739Speter     /*
99739Speter      *	type names
100739Speter      */
101739Speter #define	P2UNDEF		0
102739Speter #define	P2FARG		1
103739Speter #define	P2CHAR		2
104739Speter #define	P2SHORT		3
105739Speter #define	P2INT		4	/* this is also used for booleans */
106739Speter #define	P2LONG		5	/* don't use these, the second pass chokes */
107739Speter #define	P2FLOAT		6
108739Speter #define	P2DOUBLE	7
109739Speter #define	P2STRTY		8
110739Speter #define	P2UNIONTY	9
111739Speter #define	P2ENUMTY	10
112739Speter #define	P2MOETY		11
113739Speter #define	P2UCHAR		12
114739Speter #define	P2USHORT	13
115739Speter #define	P2UNSIGNED	14
116739Speter #define	P2ULONG		15
117739Speter 
118739Speter     /*
119739Speter      *	type modifiers
120739Speter      */
121739Speter #define	P2PTR		020
122739Speter #define	P2FTN		040
123739Speter #define	P2ARY		060
124739Speter 
125739Speter     /*
126739Speter      *	see the comment for p2type for an explanation of c type words
127739Speter      */
128739Speter #define	P2BASETYPE	017
129739Speter #define	P2TYPESHIFT	2
130739Speter 
131739Speter     /*
132739Speter      *	add a most significant type modifier, m, to a type, t
133739Speter      */
134739Speter #define ADDTYPE( t,m )	( ( ( ( t ) & ~P2BASETYPE ) << P2TYPESHIFT )	\
135739Speter 		  | ( m )						\
136739Speter 		  | ( ( t ) & P2BASETYPE ) )
137