4 * 01-- is binary operator
5 * 02-- left (or only) operand must be lvalue
6 * 04-- is relational operator
7 * 010-- is assignment-type operator
8 * 020-- non-float req. on left
9 * 040-- non-float req. on right
10 * 0100-- is commutative
11 * 0200-- is right, not left-associative
12 * 0400-- is leaf of tree
13 * *0XX000-- XX is priority of operator
26 000001, /* field selection */
29 000001, /* integer->ptr */
30 000001, /* ptr->integer */
31 000001, /* long->ptr */
37 000400, /* short constant */
41 000400, /* long constant */
42 000400, /* long constant <= 16 bits */
45 000400, /* () empty arglist */
55 036001, /* . (structure reference) */
67 000000, /* int -> double */
68 000000, /* double -> int */
119 000000, /* jump cond */
120 000000, /* branch cond */
125 000000, /* char->int */
126 000000, /* 109 - force r0 */
145 026061, /* 128 - << unsigned long */
146 012253 /* 129 - <<= unsigned long */
151 * FTI: float (or double) to integer
152 * ITF: integer to float
153 * ITP: integer to pointer
154 * ITL: integer to long
155 * LTI: long to integer
158 * PTI: pointer to integer
159 * LTP: long to ptr (ptr[long])
160 * XX: usually illegal
161 * When FTI, LTI, FTL are added in they specify
162 * that it is the left operand that should be converted.
163 * For + this is done and the conversion is turned back into
165 * For = however the left operand can't be converted
166 * and the specified conversion is applied to the rhs.
169 /* int double long ptr */
170 /* int */ {0, (FTI<<4)+ITF, (LTI<<4)+ITL, (ITP<<4)+ITP},
171 /* double */ {ITF, 0, LTF, XX},
172 /* long */ {ITL, (FTL<<4)+LTF, 0, (LTP<<4)+LTP},
173 /* ptr */ {ITP, XX, LTP, PTI}
177 * relate conversion numbers to operators
180 0, ITOF, ITOL, LTOF, ITOP, PTOI, FTOI, LTOI, FTOL, LTOP,
184 * character type table
187 EOFC, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
188 UNKN, SPACE, NEWLN, SPACE, SPACE, UNKN, UNKN, UNKN,
189 UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
190 UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN, UNKN,
191 SPACE, EXCLA, DQUOTE, SHARP, UNKN, MOD, AND, SQUOTE,
192 LPARN, RPARN, TIMES, PLUS, COMMA, MINUS, PERIOD, DIVIDE,
193 DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT, DIGIT,
194 DIGIT, DIGIT, COLON, SEMI, LESS, ASSIGN, GREAT, QUEST,
195 UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
196 LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
197 LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
198 LETTER, LETTER, LETTER, LBRACK, BSLASH, RBRACK, EXOR, LETTER,
199 UNKN, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
200 LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
201 LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER, LETTER,
202 LETTER, LETTER, LETTER, LBRACE, OR, RBRACE, COMPL, UNKN
207 char filename[MAXPATHLEN];
208 char symbuf[MAXCPS+2];
209 struct nmlist *hshtab[HSHSIZ];
210 int kwhash[(HSHSIZ+LNBPW-1)/LNBPW];
211 struct swtab swtab[SWSIZ];
218 unsigned autolen; /* make these int if necessary */
219 unsigned maxauto; /* ... will only cause trouble rarely */
226 struct nmlist *defsym;
227 struct nmlist *funcsym;
236 struct nmlist *paraml;
237 struct nmlist *parame;
251 struct nmlist **memlist;
254 struct nmlist structhole;