xref: /csrg-svn/usr.bin/pascal/src/pcops.h (revision 739)
1*739Speter /* Copyright (c) 1979 Regents of the University of California */
2*739Speter 
3*739Speter /* static	char sccsid[] = "@(#)pcops.h 1.1 08/27/80"; */
4*739Speter 
5*739Speter     /*
6*739Speter      *	tree node operators
7*739Speter      */
8*739Speter #define	P2UNDEFINED	1
9*739Speter #define	P2NAME		2
10*739Speter #define	P2STRING	3
11*739Speter #define	P2ICON		4
12*739Speter #define	P2FCON		5
13*739Speter #define	P2PLUS		6
14*739Speter #define	P2MINUS		8		/* also unary == P2NEG */
15*739Speter #define	P2MUL		11		/* also unary == P2INDIRECT */
16*739Speter #define	P2AND		14		/* also unary */
17*739Speter #define	P2OR		17
18*739Speter #define	P2ER		19
19*739Speter #define	P2QUEST		21
20*739Speter #define	P2COLON		22
21*739Speter #define	P2ANDAND	23
22*739Speter #define	P2OROR		24
23*739Speter     /*
24*739Speter      *	yacc operator classes, reserved words, little symbols, etc.
25*739Speter      *	operators 25 .. 57 not used, except 56
26*739Speter      */
27*739Speter #define P2LISTOP	56
28*739Speter #define	P2ASSIGN	58
29*739Speter #define	P2COMOP		59
30*739Speter #define	P2DIV		60
31*739Speter #define	P2MOD		62
32*739Speter #define	P2LS		64
33*739Speter #define	P2RS		66
34*739Speter #define	P2DOT		68
35*739Speter #define	P2STREF		69
36*739Speter #define	P2CALL		70		/* also unary */
37*739Speter #define	P2FORTCALL	73		/* also unary */
38*739Speter #define	P2NOT		76
39*739Speter #define	P2COMPL		77
40*739Speter #define	P2INCR		78
41*739Speter #define	P2DECR		79
42*739Speter #define	P2EQ		80
43*739Speter #define	P2NE		81
44*739Speter #define	P2LE		82
45*739Speter #define	P2LT		83
46*739Speter #define	P2GE		84
47*739Speter #define	P2GT		85
48*739Speter #define	P2ULE		86
49*739Speter #define	P2ULT		87
50*739Speter #define	P2UGE		88
51*739Speter #define	P2UGT		89
52*739Speter #define	P2SETBIT	90
53*739Speter #define	P2TESTBIT	91
54*739Speter #define	P2RESETBIT	92
55*739Speter #define	P2ARS		93
56*739Speter #define	P2REG		94
57*739Speter #define	P2OREG		95
58*739Speter #define	P2CCODES	96
59*739Speter #define	P2FREE		97
60*739Speter #define	P2STASG		98
61*739Speter #define	P2STARG		99
62*739Speter #define	P2STCALL	100		/* also unary */
63*739Speter 
64*739Speter     /*
65*739Speter      *	some conversion operators
66*739Speter      */
67*739Speter #define	P2FLD		103
68*739Speter #define	P2SCONV		104
69*739Speter #define	P2PCONV		105
70*739Speter #define	P2PMCONV	106
71*739Speter #define	P2PVCONV	107
72*739Speter 
73*739Speter     /*
74*739Speter      *	special node operators, used for special contexts
75*739Speter      */
76*739Speter #define	P2FORCE		108
77*739Speter #define	P2CBRANCH	109
78*739Speter #define	P2INIT		110
79*739Speter #define	P2CAST		111
80*739Speter 
81*739Speter     /*
82*739Speter      *	prefix unary operator modifier
83*739Speter      */
84*739Speter #define	P2ASG		1+
85*739Speter #define	P2UNARY		2+
86*739Speter 
87*739Speter     /*
88*739Speter      *	these borrowed from /usr/src/cmd/mip/fort.c
89*739Speter      *	to use the binary interface.
90*739Speter      *	only FTEXT, FEXPR, FLBRAC, FRBRAC, and FEOF are used
91*739Speter      */
92*739Speter #define	P2FTEXT		200
93*739Speter #define	P2FEXPR		201
94*739Speter #define	P2FLBRAC	203
95*739Speter #define	P2FRBRAC	204
96*739Speter #define	P2FEOF		205
97*739Speter 
98*739Speter     /*
99*739Speter      *	type names
100*739Speter      */
101*739Speter #define	P2UNDEF		0
102*739Speter #define	P2FARG		1
103*739Speter #define	P2CHAR		2
104*739Speter #define	P2SHORT		3
105*739Speter #define	P2INT		4	/* this is also used for booleans */
106*739Speter #define	P2LONG		5	/* don't use these, the second pass chokes */
107*739Speter #define	P2FLOAT		6
108*739Speter #define	P2DOUBLE	7
109*739Speter #define	P2STRTY		8
110*739Speter #define	P2UNIONTY	9
111*739Speter #define	P2ENUMTY	10
112*739Speter #define	P2MOETY		11
113*739Speter #define	P2UCHAR		12
114*739Speter #define	P2USHORT	13
115*739Speter #define	P2UNSIGNED	14
116*739Speter #define	P2ULONG		15
117*739Speter 
118*739Speter     /*
119*739Speter      *	type modifiers
120*739Speter      */
121*739Speter #define	P2PTR		020
122*739Speter #define	P2FTN		040
123*739Speter #define	P2ARY		060
124*739Speter 
125*739Speter     /*
126*739Speter      *	see the comment for p2type for an explanation of c type words
127*739Speter      */
128*739Speter #define	P2BASETYPE	017
129*739Speter #define	P2TYPESHIFT	2
130*739Speter 
131*739Speter     /*
132*739Speter      *	add a most significant type modifier, m, to a type, t
133*739Speter      */
134*739Speter #define ADDTYPE( t,m )	( ( ( ( t ) & ~P2BASETYPE ) << P2TYPESHIFT )	\
135*739Speter 		  | ( m )						\
136*739Speter 		  | ( ( t ) & P2BASETYPE ) )
137*739Speter 
138*739Speter     /*
139*739Speter      *	the runtime framepointer and argumentpointer registers
140*739Speter      */
141*739Speter #define	P2FP		13
142*739Speter #define	P2FPNAME	"fp"
143*739Speter #define	P2AP		12
144*739Speter #define P2APNAME	"ap"
145