|
|
1.1 root 1:
2: /* A Bison parser, made from ../gnumach/mig/parser.y
3: by Bison version A2.5 (Andrew Consortium)
4: */
5:
6: #define YYBISON 1 /* Identify Bison output. */
7:
8: #define sySkip 258
9: #define syRoutine 259
10: #define sySimpleRoutine 260
11: #define sySimpleProcedure 261
12: #define syProcedure 262
13: #define syFunction 263
14: #define sySubsystem 264
15: #define syKernelUser 265
16: #define syKernelServer 266
17: #define syMsgOption 267
18: #define syMsgSeqno 268
19: #define syWaitTime 269
20: #define syNoWaitTime 270
21: #define syErrorProc 271
22: #define syServerPrefix 272
23: #define syUserPrefix 273
24: #define syServerDemux 274
25: #define syRCSId 275
26: #define syImport 276
27: #define syUImport 277
28: #define sySImport 278
29: #define syIn 279
30: #define syOut 280
31: #define syInOut 281
32: #define syRequestPort 282
33: #define syReplyPort 283
34: #define sySReplyPort 284
35: #define syUReplyPort 285
36: #define syType 286
37: #define syArray 287
38: #define syStruct 288
39: #define syOf 289
40: #define syInTran 290
41: #define syOutTran 291
42: #define syDestructor 292
43: #define syCType 293
44: #define syCUserType 294
45: #define syCServerType 295
46: #define syCString 296
47: #define syColon 297
48: #define sySemi 298
49: #define syComma 299
50: #define syPlus 300
51: #define syMinus 301
52: #define syStar 302
53: #define syDiv 303
54: #define syLParen 304
55: #define syRParen 305
56: #define syEqual 306
57: #define syCaret 307
58: #define syTilde 308
59: #define syLAngle 309
60: #define syRAngle 310
61: #define syLBrack 311
62: #define syRBrack 312
63: #define syBar 313
64: #define syError 314
65: #define syNumber 315
66: #define sySymbolicType 316
67: #define syIdentifier 317
68: #define syString 318
69: #define syQString 319
70: #define syFileName 320
71: #define syIPCFlag 321
72:
73: #line 117 "../gnumach/mig/parser.y"
74:
75:
76: #include <stdio.h>
77:
78: #include "error.h"
79: #include "lexxer.h"
80: #include "global.h"
81: #include "mig_string.h"
82: #include "type.h"
83: #include "routine.h"
84: #include "statement.h"
85:
86: static const char *import_name(statement_kind_t sk);
87:
88: void
89: yyerror(const char *s)
90: {
91: error(s);
92: }
93:
94: #line 138 "../gnumach/mig/parser.y"
95: typedef union
96: {
97: u_int number;
98: identifier_t identifier;
99: const_string_t string;
100: statement_kind_t statement_kind;
101: ipc_type_t *type;
102: struct
103: {
104: u_int innumber; /* msgt_name value, when sending */
105: const_string_t instr;
106: u_int outnumber; /* msgt_name value, when receiving */
107: const_string_t outstr;
108: u_int size; /* 0 means there is no default size */
109: } symtype;
110: routine_t *routine;
111: arg_kind_t direction;
112: argument_t *argument;
113: ipc_flags_t flag;
114: } YYSTYPE;
115: #include <stdio.h>
116:
117: #ifndef __cplusplus
118: #ifndef __STDC__
119: #define const
120: #endif
121: #endif
122:
123:
124:
125: #define YYFINAL 213
126: #define YYFLAG -32768
127: #define YYNTBASE 67
128:
129: #define YYTRANSLATE(x) ((unsigned)(x) <= 321 ? yytranslate[x] : 112)
130:
131: static const char yytranslate[] = { 0,
132: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
133: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
134: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
135: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
136: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
137: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
138: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
139: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
140: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
141: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
142: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
143: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
144: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
145: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
146: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
147: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
148: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
149: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
150: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
151: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
152: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
153: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
154: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
155: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
156: 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
157: 2, 2, 2, 2, 2, 1, 2, 3, 4, 5,
158: 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
159: 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
160: 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
161: 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
162: 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
163: 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
164: 66
165: };
166:
167: #if YYDEBUG != 0
168: static const short yyprhs[] = { 0,
169: 0, 1, 4, 7, 10, 13, 16, 19, 22, 25,
170: 28, 31, 34, 38, 41, 44, 46, 49, 54, 56,
171: 57, 60, 62, 64, 66, 68, 72, 76, 78, 81,
172: 84, 87, 90, 94, 96, 98, 100, 104, 107, 111,
173: 113, 122, 131, 139, 144, 149, 154, 156, 158, 161,
174: 164, 167, 170, 172, 174, 181, 182, 186, 192, 194,
175: 196, 198, 202, 204, 209, 215, 223, 229, 235, 240,
176: 247, 251, 255, 259, 263, 265, 269, 271, 273, 275,
177: 277, 279, 283, 287, 291, 295, 300, 303, 307, 309,
178: 313, 318, 319, 321, 323, 325, 327, 329, 331, 333,
179: 335, 337, 339, 342, 345, 346, 347
180: };
181:
182: static const short yyrhs[] = { -1,
183: 67, 68, 0, 69, 43, 0, 76, 43, 0, 75,
184: 43, 0, 77, 43, 0, 78, 43, 0, 79, 43,
185: 0, 80, 43, 0, 84, 43, 0, 98, 43, 0,
186: 3, 43, 0, 3, 60, 43, 0, 81, 43, 0,
187: 83, 43, 0, 43, 0, 1, 43, 0, 70, 71,
188: 73, 74, 0, 9, 0, 0, 71, 72, 0, 10,
189: 0, 11, 0, 62, 0, 60, 0, 109, 12, 63,
190: 0, 109, 14, 63, 0, 15, 0, 16, 62, 0,
191: 17, 62, 0, 18, 62, 0, 19, 62, 0, 110,
192: 82, 65, 0, 21, 0, 22, 0, 23, 0, 111,
193: 20, 64, 0, 31, 85, 0, 62, 51, 86, 0,
194: 87, 0, 86, 35, 42, 62, 62, 49, 62, 50,
195: 0, 86, 36, 42, 62, 62, 49, 62, 50, 0,
196: 86, 37, 42, 62, 49, 62, 50, 0, 86, 38,
197: 42, 62, 0, 86, 39, 42, 62, 0, 86, 40,
198: 42, 62, 0, 88, 0, 92, 0, 93, 87, 0,
199: 94, 87, 0, 52, 87, 0, 95, 87, 0, 96,
200: 0, 91, 0, 49, 91, 44, 97, 89, 50, 0,
201: 0, 89, 44, 66, 0, 89, 44, 66, 56, 57,
202: 0, 60, 0, 61, 0, 90, 0, 90, 58, 90,
203: 0, 62, 0, 32, 56, 57, 34, 0, 32, 56,
204: 47, 57, 34, 0, 32, 56, 47, 42, 97, 57,
205: 34, 0, 32, 56, 97, 57, 34, 0, 33, 56,
206: 97, 57, 34, 0, 41, 56, 97, 57, 0, 41,
207: 56, 47, 42, 97, 57, 0, 97, 45, 97, 0,
208: 97, 46, 97, 0, 97, 47, 97, 0, 97, 48,
209: 97, 0, 60, 0, 49, 97, 50, 0, 99, 0,
210: 100, 0, 101, 0, 102, 0, 103, 0, 4, 62,
211: 104, 0, 5, 62, 104, 0, 7, 62, 104, 0,
212: 6, 62, 104, 0, 8, 62, 104, 108, 0, 49,
213: 50, 0, 49, 105, 50, 0, 106, 0, 106, 43,
214: 105, 0, 107, 62, 108, 89, 0, 0, 24, 0,
215: 25, 0, 26, 0, 27, 0, 28, 0, 29, 0,
216: 30, 0, 14, 0, 12, 0, 13, 0, 42, 62,
217: 0, 42, 85, 0, 0, 0, 0
218: };
219:
220: #endif
221:
222: #if YYDEBUG != 0
223: static const short yyrline[] = { 0,
224: 161, 162, 165, 166, 167, 168, 169, 170, 171, 172,
225: 173, 183, 185, 187, 188, 189, 190, 194, 207, 219,
226: 220, 223, 229, 237, 240, 243, 260, 266, 274, 282,
227: 290, 298, 306, 317, 318, 319, 322, 332, 342, 346,
228: 348, 368, 388, 403, 417, 426, 438, 440, 442, 444,
229: 446, 448, 450, 454, 460, 469, 471, 478, 487, 493,
230: 497, 499, 523, 527, 529, 531, 536, 540, 544, 546,
231: 551, 553, 555, 557, 559, 561, 566, 567, 568, 569,
232: 570, 573, 577, 581, 585, 589, 593, 595, 600, 602,
233: 609, 619, 620, 621, 622, 623, 624, 625, 626, 627,
234: 628, 629, 632, 638, 642, 646, 650
235: };
236: #endif
237:
238:
239: #if YYDEBUG != 0
240:
241: static const char * const yytname[] = { "$","error","$undefined.","sySkip",
242: "syRoutine","sySimpleRoutine","sySimpleProcedure","syProcedure","syFunction",
243: "sySubsystem","syKernelUser","syKernelServer","syMsgOption","syMsgSeqno","syWaitTime",
244: "syNoWaitTime","syErrorProc","syServerPrefix","syUserPrefix","syServerDemux",
245: "syRCSId","syImport","syUImport","sySImport","syIn","syOut","syInOut","syRequestPort",
246: "syReplyPort","sySReplyPort","syUReplyPort","syType","syArray","syStruct","syOf",
247: "syInTran","syOutTran","syDestructor","syCType","syCUserType","syCServerType",
248: "syCString","syColon","sySemi","syComma","syPlus","syMinus","syStar","syDiv",
249: "syLParen","syRParen","syEqual","syCaret","syTilde","syLAngle","syRAngle","syLBrack",
250: "syRBrack","syBar","syError","syNumber","sySymbolicType","syIdentifier","syString",
251: "syQString","syFileName","syIPCFlag","Statements","Statement","Subsystem","SubsystemStart",
252: "SubsystemMods","SubsystemMod","SubsystemName","SubsystemBase","MsgOption","WaitTime",
253: "Error","ServerPrefix","UserPrefix","ServerDemux","Import","ImportIndicant",
254: "RCSDecl","TypeDecl","NamedTypeSpec","TransTypeSpec","TypeSpec","BasicTypeSpec",
255: "IPCFlags","PrimIPCType","IPCType","PrevTypeSpec","VarArrayHead","ArrayHead",
256: "StructHead","CStringSpec","IntExp","RoutineDecl","Routine","SimpleRoutine",
257: "Procedure","SimpleProcedure","Function","Arguments","ArgumentList","Argument",
258: "Direction","ArgumentType","LookString","LookFileName","LookQString", NULL
259: };
260: #endif
261:
262: static const short yyr1[] = { 0,
263: 67, 67, 68, 68, 68, 68, 68, 68, 68, 68,
264: 68, 68, 68, 68, 68, 68, 68, 69, 70, 71,
265: 71, 72, 72, 73, 74, 75, 76, 76, 77, 78,
266: 79, 80, 81, 82, 82, 82, 83, 84, 85, 86,
267: 86, 86, 86, 86, 86, 86, 87, 87, 87, 87,
268: 87, 87, 87, 88, 88, 89, 89, 89, 90, 90,
269: 91, 91, 92, 93, 93, 93, 94, 95, 96, 96,
270: 97, 97, 97, 97, 97, 97, 98, 98, 98, 98,
271: 98, 99, 100, 101, 102, 103, 104, 104, 105, 105,
272: 106, 107, 107, 107, 107, 107, 107, 107, 107, 107,
273: 107, 107, 108, 108, 109, 110, 111
274: };
275:
276: static const short yyr2[] = { 0,
277: 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
278: 2, 2, 3, 2, 2, 1, 2, 4, 1, 0,
279: 2, 1, 1, 1, 1, 3, 3, 1, 2, 2,
280: 2, 2, 3, 1, 1, 1, 3, 2, 3, 1,
281: 8, 8, 7, 4, 4, 4, 1, 1, 2, 2,
282: 2, 2, 1, 1, 6, 0, 3, 5, 1, 1,
283: 1, 3, 1, 4, 5, 7, 5, 5, 4, 6,
284: 3, 3, 3, 3, 1, 3, 1, 1, 1, 1,
285: 1, 3, 3, 3, 3, 4, 2, 3, 1, 3,
286: 4, 0, 1, 1, 1, 1, 1, 1, 1, 1,
287: 1, 1, 2, 2, 0, 0, 0
288: };
289:
290: static const short yydefact[] = { 1,
291: 0, 0, 0, 0, 0, 0, 0, 0, 19, 28,
292: 0, 0, 0, 0, 0, 16, 2, 0, 20, 0,
293: 0, 0, 0, 0, 0, 0, 0, 0, 0, 77,
294: 78, 79, 80, 81, 0, 0, 0, 17, 12, 0,
295: 0, 0, 0, 0, 0, 29, 30, 31, 32, 0,
296: 38, 3, 0, 5, 4, 6, 7, 8, 9, 14,
297: 15, 10, 11, 0, 0, 34, 35, 36, 0, 0,
298: 13, 92, 82, 83, 85, 84, 0, 0, 22, 23,
299: 24, 21, 0, 26, 27, 33, 37, 101, 102, 100,
300: 93, 94, 95, 96, 97, 98, 99, 87, 0, 89,
301: 0, 0, 86, 0, 0, 0, 0, 0, 59, 60,
302: 63, 39, 40, 47, 61, 54, 48, 0, 0, 0,
303: 53, 25, 18, 88, 92, 0, 103, 104, 0, 0,
304: 0, 0, 51, 0, 0, 0, 0, 0, 0, 0,
305: 49, 50, 52, 90, 56, 0, 0, 0, 75, 0,
306: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
307: 62, 91, 0, 0, 0, 64, 0, 0, 0, 0,
308: 0, 0, 0, 69, 56, 0, 0, 0, 44, 45,
309: 46, 0, 0, 65, 76, 71, 72, 73, 74, 67,
310: 68, 0, 0, 0, 0, 0, 57, 0, 70, 55,
311: 0, 0, 0, 0, 66, 0, 0, 43, 58, 41,
312: 42, 0, 0
313: };
314:
315: static const short yydefgoto[] = { 1,
316: 17, 18, 19, 53, 82, 83, 123, 20, 21, 22,
317: 23, 24, 25, 26, 69, 27, 28, 51, 112, 113,
318: 114, 162, 115, 116, 117, 118, 119, 120, 121, 150,
319: 29, 30, 31, 32, 33, 34, 73, 99, 100, 101,
320: 103, 35, 36, 37
321: };
322:
323: static const short yypact[] = {-32768,
324: 2, -5, -31, -16, 27, 28, 30, 33,-32768,-32768,
325: 35, 49, 71, 72, 89,-32768,-32768, 6,-32768, 60,
326: 67, 107, 109, 110, 111, 112, 113, 114, 115,-32768,
327: -32768,-32768,-32768,-32768, 56, 9, 51,-32768,-32768, 116,
328: 117, 117, 117, 117, 117,-32768,-32768,-32768,-32768, 118,
329: -32768,-32768, -10,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
330: -32768,-32768,-32768, 98, 99,-32768,-32768,-32768, 95, 100,
331: -32768, 48,-32768,-32768,-32768,-32768, 121, 47,-32768,-32768,
332: -32768,-32768, 105,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
333: -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 120, 124,
334: 106, 119,-32768, 122, 123, 126, -7, 47,-32768,-32768,
335: -32768, 101,-32768,-32768, 125,-32768,-32768, 47, 47, 47,
336: -32768,-32768,-32768,-32768, 88, 121, 118,-32768, -13, -45,
337: -12, 127,-32768, 130, 131, 132, 133, 134, 135, -7,
338: -32768,-32768,-32768,-32768,-32768, -29, -45, 146,-32768, -6,
339: 10, 142, 36, -45, 128, 129, 136, 137, 138, 139,
340: -32768, 141, -45, 152, 82,-32768, -45, -45, -45, -45,
341: 153, 154, -45,-32768, 97, 140, 143, 144,-32768,-32768,
342: -32768, 145, 74,-32768,-32768, 39, 39,-32768,-32768,-32768,
343: -32768, 78, 41, 147, 148, 150, 151, 155,-32768,-32768,
344: 156, 157, 158, 149,-32768, 159, 160,-32768,-32768,-32768,
345: -32768, 192,-32768
346: };
347:
348: static const short yypgoto[] = {-32768,
349: -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
350: -32768,-32768,-32768,-32768,-32768,-32768,-32768, 92,-32768, -14,
351: -32768, 20, 63, 108,-32768,-32768,-32768,-32768,-32768, -104,
352: -32768,-32768,-32768,-32768,-32768,-32768, 104, 79,-32768,-32768,
353: 87,-32768,-32768,-32768
354: };
355:
356:
357: #define YYLAST 219
358:
359:
360: static const short yytable[] = { 79,
361: 80, 212, 2, 147, 3, 4, 5, 6, 7, 8,
362: 9, 39, 163, -105, 149, -105, 10, 11, 12, 13,
363: 14, -107, -106, -106, -106, 151, 153, 164, 40, 66,
364: 67, 68, 15, 146, 152, 147, 147, 38, 167, 168,
365: 169, 170, 165, 148, 16, 41, 149, 149, 52, 175,
366: 171, 81, 109, 110, 167, 168, 169, 170, 183, 88,
367: 89, 90, 186, 187, 188, 189, 172, 64, 192, 65,
368: 70, 91, 92, 93, 94, 95, 96, 97, 104, 105,
369: 167, 168, 169, 170, 182, 169, 170, 106, 42, 43,
370: 200, 44, 174, 133, 45, 107, 46, 98, 108, 88,
371: 89, 90, 54, 141, 142, 143, 109, 110, 111, 55,
372: 47, 91, 92, 93, 94, 95, 96, 97, 167, 168,
373: 169, 170, 167, 168, 169, 170, 167, 168, 169, 170,
374: 198, 185, 48, 49, 199, 134, 135, 136, 137, 138,
375: 139, 167, 168, 169, 170, 74, 75, 76, 77, 56,
376: 50, 57, 58, 59, 60, 61, 62, 63, 71, 86,
377: 84, 85, 102, 87, 122, 72, 125, 126, 78, 124,
378: 154, 155, 156, 157, 158, 159, 160, 129, 130, 166,
379: 127, 131, 140, 173, 182, 184, 190, 191, 205, 176,
380: 177, 213, 196, 128, 193, 201, 202, 178, 179, 180,
381: 181, 194, 161, 144, 195, 209, 204, 208, 210, 211,
382: 197, 203, 145, 0, 132, 0, 0, 206, 207
383: };
384:
385: static const short yycheck[] = { 10,
386: 11, 0, 1, 49, 3, 4, 5, 6, 7, 8,
387: 9, 43, 42, 12, 60, 14, 15, 16, 17, 18,
388: 19, 20, 21, 22, 23, 130, 131, 57, 60, 21,
389: 22, 23, 31, 47, 47, 49, 49, 43, 45, 46,
390: 47, 48, 147, 57, 43, 62, 60, 60, 43, 154,
391: 57, 62, 60, 61, 45, 46, 47, 48, 163, 12,
392: 13, 14, 167, 168, 169, 170, 57, 12, 173, 14,
393: 20, 24, 25, 26, 27, 28, 29, 30, 32, 33,
394: 45, 46, 47, 48, 44, 47, 48, 41, 62, 62,
395: 50, 62, 57, 108, 62, 49, 62, 50, 52, 12,
396: 13, 14, 43, 118, 119, 120, 60, 61, 62, 43,
397: 62, 24, 25, 26, 27, 28, 29, 30, 45, 46,
398: 47, 48, 45, 46, 47, 48, 45, 46, 47, 48,
399: 57, 50, 62, 62, 57, 35, 36, 37, 38, 39,
400: 40, 45, 46, 47, 48, 42, 43, 44, 45, 43,
401: 62, 43, 43, 43, 43, 43, 43, 43, 43, 65,
402: 63, 63, 42, 64, 60, 49, 43, 62, 51, 50,
403: 44, 42, 42, 42, 42, 42, 42, 56, 56, 34,
404: 62, 56, 58, 42, 44, 34, 34, 34, 34, 62,
405: 62, 0, 49, 102, 175, 49, 49, 62, 62, 62,
406: 62, 62, 140, 125, 62, 57, 56, 50, 50, 50,
407: 66, 62, 126, -1, 107, -1, -1, 62, 62
408: };
409: /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
410: #line 3 "/usr/share/bison.simple"
411:
412: /* Skeleton output parser for bison,
413: Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
414:
415: This program is free software; you can redistribute it and/or modify
416: it under the terms of the GNU General Public License as published by
417: the Free Software Foundation; either version 2, or (at your option)
418: any later version.
419:
420: This program is distributed in the hope that it will be useful,
421: but WITHOUT ANY WARRANTY; without even the implied warranty of
422: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
423: GNU General Public License for more details.
424:
425: You should have received a copy of the GNU General Public License
426: along with this program; if not, write to the Free Software
427: Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
428:
429: /* As a special exception, when this file is copied by Bison into a
430: Bison output file, you may use that output file without restriction.
431: This special exception was added by the Free Software Foundation
432: in version 1.24 of Bison. */
433:
434: #ifndef alloca
435: #ifdef __GNUC__
436: #define alloca __builtin_alloca
437: #else /* not GNU C. */
438: #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi)
439: #include <alloca.h>
440: #else /* not sparc */
441: #if defined (MSDOS) && !defined (__TURBOC__)
442: #include <malloc.h>
443: #else /* not MSDOS, or __TURBOC__ */
444: #if defined(_AIX)
445: #include <malloc.h>
446: #pragma alloca
447: #else /* not MSDOS, __TURBOC__, or _AIX */
448: #ifdef __hpux
449: #ifdef __cplusplus
450: extern "C" {
451: void *alloca (unsigned int);
452: };
453: #else /* not __cplusplus */
454: void *alloca ();
455: #endif /* not __cplusplus */
456: #endif /* __hpux */
457: #endif /* not _AIX */
458: #endif /* not MSDOS, or __TURBOC__ */
459: #endif /* not sparc. */
460: #endif /* not GNU C. */
461: #endif /* alloca not defined. */
462:
463: /* This is the parser code that is written into each bison parser
464: when the %semantic_parser declaration is not specified in the grammar.
465: It was written by Richard Stallman by simplifying the hairy parser
466: used when %semantic_parser is specified. */
467:
468: /* Note: there must be only one dollar sign in this file.
469: It is replaced by the list of actions, each action
470: as one case of the switch. */
471:
472: #define yyerrok (yyerrstatus = 0)
473: #define yyclearin (yychar = YYEMPTY)
474: #define YYEMPTY -2
475: #define YYEOF 0
476: #define YYACCEPT return(0)
477: #define YYABORT return(1)
478: #define YYERROR goto yyerrlab1
479: /* Like YYERROR except do call yyerror.
480: This remains here temporarily to ease the
481: transition to the new meaning of YYERROR, for GCC.
482: Once GCC version 2 has supplanted version 1, this can go. */
483: #define YYFAIL goto yyerrlab
484: #define YYRECOVERING() (!!yyerrstatus)
485: #define YYBACKUP(token, value) \
486: do \
487: if (yychar == YYEMPTY && yylen == 1) \
488: { yychar = (token), yylval = (value); \
489: yychar1 = YYTRANSLATE (yychar); \
490: YYPOPSTACK; \
491: goto yybackup; \
492: } \
493: else \
494: { yyerror ("syntax error: cannot back up"); YYERROR; } \
495: while (0)
496:
497: #define YYTERROR 1
498: #define YYERRCODE 256
499:
500: #ifndef YYPURE
501: #define YYLEX yylex()
502: #endif
503:
504: #ifdef YYPURE
505: #ifdef YYLSP_NEEDED
506: #ifdef YYLEX_PARAM
507: #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
508: #else
509: #define YYLEX yylex(&yylval, &yylloc)
510: #endif
511: #else /* not YYLSP_NEEDED */
512: #ifdef YYLEX_PARAM
513: #define YYLEX yylex(&yylval, YYLEX_PARAM)
514: #else
515: #define YYLEX yylex(&yylval)
516: #endif
517: #endif /* not YYLSP_NEEDED */
518: #endif
519:
520: /* If nonreentrant, generate the variables here */
521:
522: #ifndef YYPURE
523:
524: int yychar; /* the lookahead symbol */
525: YYSTYPE yylval; /* the semantic value of the */
526: /* lookahead symbol */
527:
528: #ifdef YYLSP_NEEDED
529: YYLTYPE yylloc; /* location data for the lookahead */
530: /* symbol */
531: #endif
532:
533: int yynerrs; /* number of parse errors so far */
534: #endif /* not YYPURE */
535:
536: #if YYDEBUG != 0
537: int yydebug; /* nonzero means print parse trace */
538: /* Since this is uninitialized, it does not stop multiple parsers
539: from coexisting. */
540: #endif
541:
542: /* YYINITDEPTH indicates the initial size of the parser's stacks */
543:
544: #ifndef YYINITDEPTH
545: #define YYINITDEPTH 200
546: #endif
547:
548: /* YYMAXDEPTH is the maximum size the stacks can grow to
549: (effective only if the built-in stack extension method is used). */
550:
551: #if YYMAXDEPTH == 0
552: #undef YYMAXDEPTH
553: #endif
554:
555: #ifndef YYMAXDEPTH
556: #define YYMAXDEPTH 10000
557: #endif
558:
559: /* Prevent warning if -Wstrict-prototypes. */
560: #ifdef __GNUC__
561: int yyparse (void);
562: #endif
563:
564: #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
565: #define __yy_memcpy(FROM,TO,COUNT) __builtin_memcpy(TO,FROM,COUNT)
566: #else /* not GNU C or C++ */
567: #ifndef __cplusplus
568:
569: /* This is the most reliable way to avoid incompatibilities
570: in available built-in functions on various systems. */
571: static void
572: __yy_memcpy (from, to, count)
573: char *from;
574: char *to;
575: int count;
576: {
577: register char *f = from;
578: register char *t = to;
579: register int i = count;
580:
581: while (i-- > 0)
582: *t++ = *f++;
583: }
584:
585: #else /* __cplusplus */
586:
587: /* This is the most reliable way to avoid incompatibilities
588: in available built-in functions on various systems. */
589: static void
590: __yy_memcpy (char *from, char *to, int count)
591: {
592: register char *f = from;
593: register char *t = to;
594: register int i = count;
595:
596: while (i-- > 0)
597: *t++ = *f++;
598: }
599:
600: #endif
601: #endif
602:
603: #line 192 "/usr/share/bison.simple"
604:
605: /* The user can define YYPARSE_PARAM as the name of an argument to be passed
606: into yyparse. The argument should have type void *.
607: It should actually point to an object.
608: Grammar actions can access the variable by casting it
609: to the proper pointer type. */
610:
611: #ifdef YYPARSE_PARAM
612: #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
613: #else
614: #define YYPARSE_PARAM
615: #define YYPARSE_PARAM_DECL
616: #endif
617:
618: int
619: yyparse(YYPARSE_PARAM)
620: YYPARSE_PARAM_DECL
621: {
622: register int yystate;
623: register int yyn;
624: register short *yyssp;
625: register YYSTYPE *yyvsp;
626: int yyerrstatus; /* number of tokens to shift before error messages enabled */
627: int yychar1 = 0; /* lookahead token as an internal (translated) token number */
628:
629: short yyssa[YYINITDEPTH]; /* the state stack */
630: YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
631:
632: short *yyss = yyssa; /* refer to the stacks thru separate pointers */
633: YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
634:
635: #ifdef YYLSP_NEEDED
636: YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
637: YYLTYPE *yyls = yylsa;
638: YYLTYPE *yylsp;
639:
640: #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
641: #else
642: #define YYPOPSTACK (yyvsp--, yyssp--)
643: #endif
644:
645: int yystacksize = YYINITDEPTH;
646:
647: #ifdef YYPURE
648: int yychar;
649: YYSTYPE yylval;
650: int yynerrs;
651: #ifdef YYLSP_NEEDED
652: YYLTYPE yylloc;
653: #endif
654: #endif
655:
656: YYSTYPE yyval; /* the variable used to return */
657: /* semantic values from the action */
658: /* routines */
659:
660: int yylen;
661:
662: #if YYDEBUG != 0
663: if (yydebug)
664: fprintf(stderr, "Starting parse\n");
665: #endif
666:
667: yystate = 0;
668: yyerrstatus = 0;
669: yynerrs = 0;
670: yychar = YYEMPTY; /* Cause a token to be read. */
671:
672: /* Initialize stack pointers.
673: Waste one element of value and location stack
674: so that they stay on the same level as the state stack.
675: The wasted elements are never initialized. */
676:
677: yyssp = yyss - 1;
678: yyvsp = yyvs;
679: #ifdef YYLSP_NEEDED
680: yylsp = yyls;
681: #endif
682:
683: /* Push a new state, which is found in yystate . */
684: /* In all cases, when you get here, the value and location stacks
685: have just been pushed. so pushing a state here evens the stacks. */
686: yynewstate:
687:
688: *++yyssp = yystate;
689:
690: if (yyssp >= yyss + yystacksize - 1)
691: {
692: /* Give user a chance to reallocate the stack */
693: /* Use copies of these so that the &'s don't force the real ones into memory. */
694: YYSTYPE *yyvs1 = yyvs;
695: short *yyss1 = yyss;
696: #ifdef YYLSP_NEEDED
697: YYLTYPE *yyls1 = yyls;
698: #endif
699:
700: /* Get the current used size of the three stacks, in elements. */
701: int size = yyssp - yyss + 1;
702:
703: #ifdef yyoverflow
704: /* Each stack pointer address is followed by the size of
705: the data in use in that stack, in bytes. */
706: #ifdef YYLSP_NEEDED
707: /* This used to be a conditional around just the two extra args,
708: but that might be undefined if yyoverflow is a macro. */
709: yyoverflow("parser stack overflow",
710: &yyss1, size * sizeof (*yyssp),
711: &yyvs1, size * sizeof (*yyvsp),
712: &yyls1, size * sizeof (*yylsp),
713: &yystacksize);
714: #else
715: yyoverflow("parser stack overflow",
716: &yyss1, size * sizeof (*yyssp),
717: &yyvs1, size * sizeof (*yyvsp),
718: &yystacksize);
719: #endif
720:
721: yyss = yyss1; yyvs = yyvs1;
722: #ifdef YYLSP_NEEDED
723: yyls = yyls1;
724: #endif
725: #else /* no yyoverflow */
726: /* Extend the stack our own way. */
727: if (yystacksize >= YYMAXDEPTH)
728: {
729: yyerror("parser stack overflow");
730: return 2;
731: }
732: yystacksize *= 2;
733: if (yystacksize > YYMAXDEPTH)
734: yystacksize = YYMAXDEPTH;
735: yyss = (short *) alloca (yystacksize * sizeof (*yyssp));
736: __yy_memcpy ((char *)yyss1, (char *)yyss, size * sizeof (*yyssp));
737: yyvs = (YYSTYPE *) alloca (yystacksize * sizeof (*yyvsp));
738: __yy_memcpy ((char *)yyvs1, (char *)yyvs, size * sizeof (*yyvsp));
739: #ifdef YYLSP_NEEDED
740: yyls = (YYLTYPE *) alloca (yystacksize * sizeof (*yylsp));
741: __yy_memcpy ((char *)yyls1, (char *)yyls, size * sizeof (*yylsp));
742: #endif
743: #endif /* no yyoverflow */
744:
745: yyssp = yyss + size - 1;
746: yyvsp = yyvs + size - 1;
747: #ifdef YYLSP_NEEDED
748: yylsp = yyls + size - 1;
749: #endif
750:
751: #if YYDEBUG != 0
752: if (yydebug)
753: fprintf(stderr, "Stack size increased to %d\n", yystacksize);
754: #endif
755:
756: if (yyssp >= yyss + yystacksize - 1)
757: YYABORT;
758: }
759:
760: #if YYDEBUG != 0
761: if (yydebug)
762: fprintf(stderr, "Entering state %d\n", yystate);
763: #endif
764:
765: goto yybackup;
766: yybackup:
767:
768: /* Do appropriate processing given the current state. */
769: /* Read a lookahead token if we need one and don't already have one. */
770: /* yyresume: */
771:
772: /* First try to decide what to do without reference to lookahead token. */
773:
774: yyn = yypact[yystate];
775: if (yyn == YYFLAG)
776: goto yydefault;
777:
778: /* Not known => get a lookahead token if don't already have one. */
779:
780: /* yychar is either YYEMPTY or YYEOF
781: or a valid token in external form. */
782:
783: if (yychar == YYEMPTY)
784: {
785: #if YYDEBUG != 0
786: if (yydebug)
787: fprintf(stderr, "Reading a token: ");
788: #endif
789: yychar = YYLEX;
790: }
791:
792: /* Convert token to internal form (in yychar1) for indexing tables with */
793:
794: if (yychar <= 0) /* This means end of input. */
795: {
796: yychar1 = 0;
797: yychar = YYEOF; /* Don't call YYLEX any more */
798:
799: #if YYDEBUG != 0
800: if (yydebug)
801: fprintf(stderr, "Now at end of input.\n");
802: #endif
803: }
804: else
805: {
806: yychar1 = YYTRANSLATE(yychar);
807:
808: #if YYDEBUG != 0
809: if (yydebug)
810: {
811: fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
812: /* Give the individual parser a way to print the precise meaning
813: of a token, for further debugging info. */
814: #ifdef YYPRINT
815: YYPRINT (stderr, yychar, yylval);
816: #endif
817: fprintf (stderr, ")\n");
818: }
819: #endif
820: }
821:
822: yyn += yychar1;
823: if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
824: goto yydefault;
825:
826: yyn = yytable[yyn];
827:
828: /* yyn is what to do for this token type in this state.
829: Negative => reduce, -yyn is rule number.
830: Positive => shift, yyn is new state.
831: New state is final state => don't bother to shift,
832: just return success.
833: 0, or most negative number => error. */
834:
835: if (yyn < 0)
836: {
837: if (yyn == YYFLAG)
838: goto yyerrlab;
839: yyn = -yyn;
840: goto yyreduce;
841: }
842: else if (yyn == 0)
843: goto yyerrlab;
844:
845: if (yyn == YYFINAL)
846: YYACCEPT;
847:
848: /* Shift the lookahead token. */
849:
850: #if YYDEBUG != 0
851: if (yydebug)
852: fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
853: #endif
854:
855: /* Discard the token being shifted unless it is eof. */
856: if (yychar != YYEOF)
857: yychar = YYEMPTY;
858:
859: *++yyvsp = yylval;
860: #ifdef YYLSP_NEEDED
861: *++yylsp = yylloc;
862: #endif
863:
864: /* count tokens shifted since error; after three, turn off error status. */
865: if (yyerrstatus) yyerrstatus--;
866:
867: yystate = yyn;
868: goto yynewstate;
869:
870: /* Do the default action for the current state. */
871: yydefault:
872:
873: yyn = yydefact[yystate];
874: if (yyn == 0)
875: goto yyerrlab;
876:
877: /* Do a reduction. yyn is the number of a rule to reduce with. */
878: yyreduce:
879: yylen = yyr2[yyn];
880: if (yylen > 0)
881: yyval = yyvsp[1-yylen]; /* implement default value of the action */
882:
883: #if YYDEBUG != 0
884: if (yydebug)
885: {
886: int i;
887:
888: fprintf (stderr, "Reducing via rule %d (line %d), ",
889: yyn, yyrline[yyn]);
890:
891: /* Print the symbols being reduced, and their result. */
892: for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
893: fprintf (stderr, "%s ", yytname[yyrhs[i]]);
894: fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
895: }
896: #endif
897:
898:
899: switch (yyn) {
900:
901: case 11:
902: #line 174 "../gnumach/mig/parser.y"
903: {
904: register statement_t *st = stAlloc();
905:
906: st->stKind = skRoutine;
907: st->stRoutine = yyvsp[-1].routine;
908: rtCheckRoutine(yyvsp[-1].routine);
909: if (BeVerbose)
910: rtPrintRoutine(yyvsp[-1].routine);
911: ;
912: break;}
913: case 12:
914: #line 184 "../gnumach/mig/parser.y"
915: { rtSkip(1); ;
916: break;}
917: case 13:
918: #line 186 "../gnumach/mig/parser.y"
919: { rtSkip(yyvsp[-1].number); ;
920: break;}
921: case 17:
922: #line 191 "../gnumach/mig/parser.y"
923: { yyerrok; ;
924: break;}
925: case 18:
926: #line 196 "../gnumach/mig/parser.y"
927: {
928: if (BeVerbose)
929: {
930: printf("Subsystem %s: base = %u%s%s\n\n",
931: SubsystemName, SubsystemBase,
932: IsKernelUser ? ", KernelUser" : "",
933: IsKernelServer ? ", KernelServer" : "");
934: }
935: ;
936: break;}
937: case 19:
938: #line 208 "../gnumach/mig/parser.y"
939: {
940: if (SubsystemName != strNULL)
941: {
942: warn("previous Subsystem decl (of %s) will be ignored", SubsystemName);
943: IsKernelUser = FALSE;
944: IsKernelServer = FALSE;
945: strfree((string_t) SubsystemName);
946: }
947: ;
948: break;}
949: case 22:
950: #line 224 "../gnumach/mig/parser.y"
951: {
952: if (IsKernelUser)
953: warn("duplicate KernelUser keyword");
954: IsKernelUser = TRUE;
955: ;
956: break;}
957: case 23:
958: #line 230 "../gnumach/mig/parser.y"
959: {
960: if (IsKernelServer)
961: warn("duplicate KernelServer keyword");
962: IsKernelServer = TRUE;
963: ;
964: break;}
965: case 24:
966: #line 237 "../gnumach/mig/parser.y"
967: { SubsystemName = yyvsp[0].identifier; ;
968: break;}
969: case 25:
970: #line 240 "../gnumach/mig/parser.y"
971: { SubsystemBase = yyvsp[0].number; ;
972: break;}
973: case 26:
974: #line 244 "../gnumach/mig/parser.y"
975: {
976: if (streql(yyvsp[0].string, "MACH_MSG_OPTION_NONE"))
977: {
978: MsgOption = strNULL;
979: if (BeVerbose)
980: printf("MsgOption: canceled\n\n");
981: }
982: else
983: {
984: MsgOption = yyvsp[0].string;
985: if (BeVerbose)
986: printf("MsgOption %s\n\n",yyvsp[0].string);
987: }
988: ;
989: break;}
990: case 27:
991: #line 261 "../gnumach/mig/parser.y"
992: {
993: WaitTime = yyvsp[0].string;
994: if (BeVerbose)
995: printf("WaitTime %s\n\n", WaitTime);
996: ;
997: break;}
998: case 28:
999: #line 267 "../gnumach/mig/parser.y"
1000: {
1001: WaitTime = strNULL;
1002: if (BeVerbose)
1003: printf("NoWaitTime\n\n");
1004: ;
1005: break;}
1006: case 29:
1007: #line 275 "../gnumach/mig/parser.y"
1008: {
1009: ErrorProc = yyvsp[0].identifier;
1010: if (BeVerbose)
1011: printf("ErrorProc %s\n\n", ErrorProc);
1012: ;
1013: break;}
1014: case 30:
1015: #line 283 "../gnumach/mig/parser.y"
1016: {
1017: ServerPrefix = yyvsp[0].identifier;
1018: if (BeVerbose)
1019: printf("ServerPrefix %s\n\n", ServerPrefix);
1020: ;
1021: break;}
1022: case 31:
1023: #line 291 "../gnumach/mig/parser.y"
1024: {
1025: UserPrefix = yyvsp[0].identifier;
1026: if (BeVerbose)
1027: printf("UserPrefix %s\n\n", UserPrefix);
1028: ;
1029: break;}
1030: case 32:
1031: #line 299 "../gnumach/mig/parser.y"
1032: {
1033: ServerDemux = yyvsp[0].identifier;
1034: if (BeVerbose)
1035: printf("ServerDemux %s\n\n", ServerDemux);
1036: ;
1037: break;}
1038: case 33:
1039: #line 307 "../gnumach/mig/parser.y"
1040: {
1041: register statement_t *st = stAlloc();
1042: st->stKind = yyvsp[-1].statement_kind;
1043: st->stFileName = yyvsp[0].string;
1044:
1045: if (BeVerbose)
1046: printf("%s %s\n\n", import_name(yyvsp[-1].statement_kind), yyvsp[0].string);
1047: ;
1048: break;}
1049: case 34:
1050: #line 317 "../gnumach/mig/parser.y"
1051: { yyval.statement_kind = skImport; ;
1052: break;}
1053: case 35:
1054: #line 318 "../gnumach/mig/parser.y"
1055: { yyval.statement_kind = skUImport; ;
1056: break;}
1057: case 36:
1058: #line 319 "../gnumach/mig/parser.y"
1059: { yyval.statement_kind = skSImport; ;
1060: break;}
1061: case 37:
1062: #line 323 "../gnumach/mig/parser.y"
1063: {
1064: if (RCSId != strNULL)
1065: warn("previous RCS decl will be ignored");
1066: if (BeVerbose)
1067: printf("RCSId %s\n\n", yyvsp[0].string);
1068: RCSId = yyvsp[0].string;
1069: ;
1070: break;}
1071: case 38:
1072: #line 333 "../gnumach/mig/parser.y"
1073: {
1074: register identifier_t name = yyvsp[0].type->itName;
1075:
1076: if (itLookUp(name) != itNULL)
1077: warn("overriding previous definition of %s", name);
1078: itInsert(name, yyvsp[0].type);
1079: ;
1080: break;}
1081: case 39:
1082: #line 343 "../gnumach/mig/parser.y"
1083: { itTypeDecl(yyvsp[-2].identifier, yyval.type = yyvsp[0].type); ;
1084: break;}
1085: case 40:
1086: #line 347 "../gnumach/mig/parser.y"
1087: { yyval.type = itResetType(yyvsp[0].type); ;
1088: break;}
1089: case 41:
1090: #line 350 "../gnumach/mig/parser.y"
1091: {
1092: yyval.type = yyvsp[-7].type;
1093:
1094: if ((yyval.type->itTransType != strNULL) && !streql(yyval.type->itTransType, yyvsp[-4].identifier))
1095: warn("conflicting translation types (%s, %s)",
1096: yyval.type->itTransType, yyvsp[-4].identifier);
1097: yyval.type->itTransType = yyvsp[-4].identifier;
1098:
1099: if ((yyval.type->itInTrans != strNULL) && !streql(yyval.type->itInTrans, yyvsp[-3].identifier))
1100: warn("conflicting in-translation functions (%s, %s)",
1101: yyval.type->itInTrans, yyvsp[-3].identifier);
1102: yyval.type->itInTrans = yyvsp[-3].identifier;
1103:
1104: if ((yyval.type->itServerType != strNULL) && !streql(yyval.type->itServerType, yyvsp[-1].identifier))
1105: warn("conflicting server types (%s, %s)",
1106: yyval.type->itServerType, yyvsp[-1].identifier);
1107: yyval.type->itServerType = yyvsp[-1].identifier;
1108: ;
1109: break;}
1110: case 42:
1111: #line 370 "../gnumach/mig/parser.y"
1112: {
1113: yyval.type = yyvsp[-7].type;
1114:
1115: if ((yyval.type->itServerType != strNULL) && !streql(yyval.type->itServerType, yyvsp[-4].identifier))
1116: warn("conflicting server types (%s, %s)",
1117: yyval.type->itServerType, yyvsp[-4].identifier);
1118: yyval.type->itServerType = yyvsp[-4].identifier;
1119:
1120: if ((yyval.type->itOutTrans != strNULL) && !streql(yyval.type->itOutTrans, yyvsp[-3].identifier))
1121: warn("conflicting out-translation functions (%s, %s)",
1122: yyval.type->itOutTrans, yyvsp[-3].identifier);
1123: yyval.type->itOutTrans = yyvsp[-3].identifier;
1124:
1125: if ((yyval.type->itTransType != strNULL) && !streql(yyval.type->itTransType, yyvsp[-1].identifier))
1126: warn("conflicting translation types (%s, %s)",
1127: yyval.type->itTransType, yyvsp[-1].identifier);
1128: yyval.type->itTransType = yyvsp[-1].identifier;
1129: ;
1130: break;}
1131: case 43:
1132: #line 390 "../gnumach/mig/parser.y"
1133: {
1134: yyval.type = yyvsp[-6].type;
1135:
1136: if ((yyval.type->itDestructor != strNULL) && !streql(yyval.type->itDestructor, yyvsp[-3].identifier))
1137: warn("conflicting destructor functions (%s, %s)",
1138: yyval.type->itDestructor, yyvsp[-3].identifier);
1139: yyval.type->itDestructor = yyvsp[-3].identifier;
1140:
1141: if ((yyval.type->itTransType != strNULL) && !streql(yyval.type->itTransType, yyvsp[-1].identifier))
1142: warn("conflicting translation types (%s, %s)",
1143: yyval.type->itTransType, yyvsp[-1].identifier);
1144: yyval.type->itTransType = yyvsp[-1].identifier;
1145: ;
1146: break;}
1147: case 44:
1148: #line 404 "../gnumach/mig/parser.y"
1149: {
1150: yyval.type = yyvsp[-3].type;
1151:
1152: if ((yyval.type->itUserType != strNULL) && !streql(yyval.type->itUserType, yyvsp[0].identifier))
1153: warn("conflicting user types (%s, %s)",
1154: yyval.type->itUserType, yyvsp[0].identifier);
1155: yyval.type->itUserType = yyvsp[0].identifier;
1156:
1157: if ((yyval.type->itServerType != strNULL) && !streql(yyval.type->itServerType, yyvsp[0].identifier))
1158: warn("conflicting server types (%s, %s)",
1159: yyval.type->itServerType, yyvsp[0].identifier);
1160: yyval.type->itServerType = yyvsp[0].identifier;
1161: ;
1162: break;}
1163: case 45:
1164: #line 418 "../gnumach/mig/parser.y"
1165: {
1166: yyval.type = yyvsp[-3].type;
1167:
1168: if ((yyval.type->itUserType != strNULL) && !streql(yyval.type->itUserType, yyvsp[0].identifier))
1169: warn("conflicting user types (%s, %s)",
1170: yyval.type->itUserType, yyvsp[0].identifier);
1171: yyval.type->itUserType = yyvsp[0].identifier;
1172: ;
1173: break;}
1174: case 46:
1175: #line 428 "../gnumach/mig/parser.y"
1176: {
1177: yyval.type = yyvsp[-3].type;
1178:
1179: if ((yyval.type->itServerType != strNULL) && !streql(yyval.type->itServerType, yyvsp[0].identifier))
1180: warn("conflicting server types (%s, %s)",
1181: yyval.type->itServerType, yyvsp[0].identifier);
1182: yyval.type->itServerType = yyvsp[0].identifier;
1183: ;
1184: break;}
1185: case 47:
1186: #line 439 "../gnumach/mig/parser.y"
1187: { yyval.type = yyvsp[0].type; ;
1188: break;}
1189: case 48:
1190: #line 441 "../gnumach/mig/parser.y"
1191: { yyval.type = yyvsp[0].type; ;
1192: break;}
1193: case 49:
1194: #line 443 "../gnumach/mig/parser.y"
1195: { yyval.type = itVarArrayDecl(yyvsp[-1].number, yyvsp[0].type); ;
1196: break;}
1197: case 50:
1198: #line 445 "../gnumach/mig/parser.y"
1199: { yyval.type = itArrayDecl(yyvsp[-1].number, yyvsp[0].type); ;
1200: break;}
1201: case 51:
1202: #line 447 "../gnumach/mig/parser.y"
1203: { yyval.type = itPtrDecl(yyvsp[0].type); ;
1204: break;}
1205: case 52:
1206: #line 449 "../gnumach/mig/parser.y"
1207: { yyval.type = itStructDecl(yyvsp[-1].number, yyvsp[0].type); ;
1208: break;}
1209: case 53:
1210: #line 451 "../gnumach/mig/parser.y"
1211: { yyval.type = yyvsp[0].type; ;
1212: break;}
1213: case 54:
1214: #line 455 "../gnumach/mig/parser.y"
1215: {
1216: yyval.type = itShortDecl(yyvsp[0].symtype.innumber, yyvsp[0].symtype.instr,
1217: yyvsp[0].symtype.outnumber, yyvsp[0].symtype.outstr,
1218: yyvsp[0].symtype.size);
1219: ;
1220: break;}
1221: case 55:
1222: #line 462 "../gnumach/mig/parser.y"
1223: {
1224: yyval.type = itLongDecl(yyvsp[-4].symtype.innumber, yyvsp[-4].symtype.instr,
1225: yyvsp[-4].symtype.outnumber, yyvsp[-4].symtype.outstr,
1226: yyvsp[-4].symtype.size, yyvsp[-2].number, yyvsp[-1].flag);
1227: ;
1228: break;}
1229: case 56:
1230: #line 470 "../gnumach/mig/parser.y"
1231: { yyval.flag = flNone; ;
1232: break;}
1233: case 57:
1234: #line 472 "../gnumach/mig/parser.y"
1235: {
1236: if (yyvsp[-2].flag & yyvsp[0].flag)
1237: warn("redundant IPC flag ignored");
1238: else
1239: yyval.flag = yyvsp[-2].flag | yyvsp[0].flag;
1240: ;
1241: break;}
1242: case 58:
1243: #line 479 "../gnumach/mig/parser.y"
1244: {
1245: if (yyvsp[-2].flag != flDealloc)
1246: warn("only Dealloc is variable");
1247: else
1248: yyval.flag = yyvsp[-4].flag | flMaybeDealloc;
1249: ;
1250: break;}
1251: case 59:
1252: #line 488 "../gnumach/mig/parser.y"
1253: {
1254: yyval.symtype.innumber = yyval.symtype.outnumber = yyvsp[0].number;
1255: yyval.symtype.instr = yyval.symtype.outstr = strNULL;
1256: yyval.symtype.size = 0;
1257: ;
1258: break;}
1259: case 60:
1260: #line 494 "../gnumach/mig/parser.y"
1261: { yyval.symtype = yyvsp[0].symtype; ;
1262: break;}
1263: case 61:
1264: #line 498 "../gnumach/mig/parser.y"
1265: { yyval.symtype = yyvsp[0].symtype; ;
1266: break;}
1267: case 62:
1268: #line 500 "../gnumach/mig/parser.y"
1269: {
1270: if (yyvsp[-2].symtype.size != yyvsp[0].symtype.size)
1271: {
1272: if (yyvsp[-2].symtype.size == 0)
1273: yyval.symtype.size = yyvsp[0].symtype.size;
1274: else if (yyvsp[0].symtype.size == 0)
1275: yyval.symtype.size = yyvsp[-2].symtype.size;
1276: else
1277: {
1278: error("sizes in IPCTypes (%d, %d) aren't equal",
1279: yyvsp[-2].symtype.size, yyvsp[0].symtype.size);
1280: yyval.symtype.size = 0;
1281: }
1282: }
1283: else
1284: yyval.symtype.size = yyvsp[-2].symtype.size;
1285: yyval.symtype.innumber = yyvsp[-2].symtype.innumber;
1286: yyval.symtype.instr = yyvsp[-2].symtype.instr;
1287: yyval.symtype.outnumber = yyvsp[0].symtype.outnumber;
1288: yyval.symtype.outstr = yyvsp[0].symtype.outstr;
1289: ;
1290: break;}
1291: case 63:
1292: #line 524 "../gnumach/mig/parser.y"
1293: { yyval.type = itPrevDecl(yyvsp[0].identifier); ;
1294: break;}
1295: case 64:
1296: #line 528 "../gnumach/mig/parser.y"
1297: { yyval.number = 0; ;
1298: break;}
1299: case 65:
1300: #line 530 "../gnumach/mig/parser.y"
1301: { yyval.number = 0; ;
1302: break;}
1303: case 66:
1304: #line 533 "../gnumach/mig/parser.y"
1305: { yyval.number = yyvsp[-2].number; ;
1306: break;}
1307: case 67:
1308: #line 537 "../gnumach/mig/parser.y"
1309: { yyval.number = yyvsp[-2].number; ;
1310: break;}
1311: case 68:
1312: #line 541 "../gnumach/mig/parser.y"
1313: { yyval.number = yyvsp[-2].number; ;
1314: break;}
1315: case 69:
1316: #line 545 "../gnumach/mig/parser.y"
1317: { yyval.type = itCStringDecl(yyvsp[-1].number, FALSE); ;
1318: break;}
1319: case 70:
1320: #line 548 "../gnumach/mig/parser.y"
1321: { yyval.type = itCStringDecl(yyvsp[-1].number, TRUE); ;
1322: break;}
1323: case 71:
1324: #line 552 "../gnumach/mig/parser.y"
1325: { yyval.number = yyvsp[-2].number + yyvsp[0].number; ;
1326: break;}
1327: case 72:
1328: #line 554 "../gnumach/mig/parser.y"
1329: { yyval.number = yyvsp[-2].number - yyvsp[0].number; ;
1330: break;}
1331: case 73:
1332: #line 556 "../gnumach/mig/parser.y"
1333: { yyval.number = yyvsp[-2].number * yyvsp[0].number; ;
1334: break;}
1335: case 74:
1336: #line 558 "../gnumach/mig/parser.y"
1337: { yyval.number = yyvsp[-2].number / yyvsp[0].number; ;
1338: break;}
1339: case 75:
1340: #line 560 "../gnumach/mig/parser.y"
1341: { yyval.number = yyvsp[0].number; ;
1342: break;}
1343: case 76:
1344: #line 562 "../gnumach/mig/parser.y"
1345: { yyval.number = yyvsp[-1].number; ;
1346: break;}
1347: case 77:
1348: #line 566 "../gnumach/mig/parser.y"
1349: { yyval.routine = yyvsp[0].routine; ;
1350: break;}
1351: case 78:
1352: #line 567 "../gnumach/mig/parser.y"
1353: { yyval.routine = yyvsp[0].routine; ;
1354: break;}
1355: case 79:
1356: #line 568 "../gnumach/mig/parser.y"
1357: { yyval.routine = yyvsp[0].routine; ;
1358: break;}
1359: case 80:
1360: #line 569 "../gnumach/mig/parser.y"
1361: { yyval.routine = yyvsp[0].routine; ;
1362: break;}
1363: case 81:
1364: #line 570 "../gnumach/mig/parser.y"
1365: { yyval.routine = yyvsp[0].routine; ;
1366: break;}
1367: case 82:
1368: #line 574 "../gnumach/mig/parser.y"
1369: { yyval.routine = rtMakeRoutine(yyvsp[-1].identifier, yyvsp[0].argument); ;
1370: break;}
1371: case 83:
1372: #line 578 "../gnumach/mig/parser.y"
1373: { yyval.routine = rtMakeSimpleRoutine(yyvsp[-1].identifier, yyvsp[0].argument); ;
1374: break;}
1375: case 84:
1376: #line 582 "../gnumach/mig/parser.y"
1377: { yyval.routine = rtMakeProcedure(yyvsp[-1].identifier, yyvsp[0].argument); ;
1378: break;}
1379: case 85:
1380: #line 586 "../gnumach/mig/parser.y"
1381: { yyval.routine = rtMakeSimpleProcedure(yyvsp[-1].identifier, yyvsp[0].argument); ;
1382: break;}
1383: case 86:
1384: #line 590 "../gnumach/mig/parser.y"
1385: { yyval.routine = rtMakeFunction(yyvsp[-2].identifier, yyvsp[-1].argument, yyvsp[0].type); ;
1386: break;}
1387: case 87:
1388: #line 594 "../gnumach/mig/parser.y"
1389: { yyval.argument = argNULL; ;
1390: break;}
1391: case 88:
1392: #line 596 "../gnumach/mig/parser.y"
1393: { yyval.argument = yyvsp[-1].argument; ;
1394: break;}
1395: case 89:
1396: #line 601 "../gnumach/mig/parser.y"
1397: { yyval.argument = yyvsp[0].argument; ;
1398: break;}
1399: case 90:
1400: #line 603 "../gnumach/mig/parser.y"
1401: {
1402: yyval.argument = yyvsp[-2].argument;
1403: yyval.argument->argNext = yyvsp[0].argument;
1404: ;
1405: break;}
1406: case 91:
1407: #line 610 "../gnumach/mig/parser.y"
1408: {
1409: yyval.argument = argAlloc();
1410: yyval.argument->argKind = yyvsp[-3].direction;
1411: yyval.argument->argName = yyvsp[-2].identifier;
1412: yyval.argument->argType = yyvsp[-1].type;
1413: yyval.argument->argFlags = yyvsp[0].flag;
1414: ;
1415: break;}
1416: case 92:
1417: #line 619 "../gnumach/mig/parser.y"
1418: { yyval.direction = akNone; ;
1419: break;}
1420: case 93:
1421: #line 620 "../gnumach/mig/parser.y"
1422: { yyval.direction = akIn; ;
1423: break;}
1424: case 94:
1425: #line 621 "../gnumach/mig/parser.y"
1426: { yyval.direction = akOut; ;
1427: break;}
1428: case 95:
1429: #line 622 "../gnumach/mig/parser.y"
1430: { yyval.direction = akInOut; ;
1431: break;}
1432: case 96:
1433: #line 623 "../gnumach/mig/parser.y"
1434: { yyval.direction = akRequestPort; ;
1435: break;}
1436: case 97:
1437: #line 624 "../gnumach/mig/parser.y"
1438: { yyval.direction = akReplyPort; ;
1439: break;}
1440: case 98:
1441: #line 625 "../gnumach/mig/parser.y"
1442: { yyval.direction = akSReplyPort; ;
1443: break;}
1444: case 99:
1445: #line 626 "../gnumach/mig/parser.y"
1446: { yyval.direction = akUReplyPort; ;
1447: break;}
1448: case 100:
1449: #line 627 "../gnumach/mig/parser.y"
1450: { yyval.direction = akWaitTime; ;
1451: break;}
1452: case 101:
1453: #line 628 "../gnumach/mig/parser.y"
1454: { yyval.direction = akMsgOption; ;
1455: break;}
1456: case 102:
1457: #line 629 "../gnumach/mig/parser.y"
1458: { yyval.direction = akMsgSeqno; ;
1459: break;}
1460: case 103:
1461: #line 633 "../gnumach/mig/parser.y"
1462: {
1463: yyval.type = itLookUp(yyvsp[0].identifier);
1464: if (yyval.type == itNULL)
1465: error("type '%s' not defined", yyvsp[0].identifier);
1466: ;
1467: break;}
1468: case 104:
1469: #line 639 "../gnumach/mig/parser.y"
1470: { yyval.type = yyvsp[0].type; ;
1471: break;}
1472: case 105:
1473: #line 643 "../gnumach/mig/parser.y"
1474: { LookString(); ;
1475: break;}
1476: case 106:
1477: #line 647 "../gnumach/mig/parser.y"
1478: { LookFileName(); ;
1479: break;}
1480: case 107:
1481: #line 651 "../gnumach/mig/parser.y"
1482: { LookQString(); ;
1483: break;}
1484: }
1485: /* the action file gets copied in in place of this dollarsign */
1486: #line 487 "/usr/share/bison.simple"
1487:
1488: yyvsp -= yylen;
1489: yyssp -= yylen;
1490: #ifdef YYLSP_NEEDED
1491: yylsp -= yylen;
1492: #endif
1493:
1494: #if YYDEBUG != 0
1495: if (yydebug)
1496: {
1497: short *ssp1 = yyss - 1;
1498: fprintf (stderr, "state stack now");
1499: while (ssp1 != yyssp)
1500: fprintf (stderr, " %d", *++ssp1);
1501: fprintf (stderr, "\n");
1502: }
1503: #endif
1504:
1505: *++yyvsp = yyval;
1506:
1507: #ifdef YYLSP_NEEDED
1508: yylsp++;
1509: if (yylen == 0)
1510: {
1511: yylsp->first_line = yylloc.first_line;
1512: yylsp->first_column = yylloc.first_column;
1513: yylsp->last_line = (yylsp-1)->last_line;
1514: yylsp->last_column = (yylsp-1)->last_column;
1515: yylsp->text = 0;
1516: }
1517: else
1518: {
1519: yylsp->last_line = (yylsp+yylen-1)->last_line;
1520: yylsp->last_column = (yylsp+yylen-1)->last_column;
1521: }
1522: #endif
1523:
1524: /* Now "shift" the result of the reduction.
1525: Determine what state that goes to,
1526: based on the state we popped back to
1527: and the rule number reduced by. */
1528:
1529: yyn = yyr1[yyn];
1530:
1531: yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
1532: if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1533: yystate = yytable[yystate];
1534: else
1535: yystate = yydefgoto[yyn - YYNTBASE];
1536:
1537: goto yynewstate;
1538:
1539: yyerrlab: /* here on detecting error */
1540:
1541: if (! yyerrstatus)
1542: /* If not already recovering from an error, report this error. */
1543: {
1544: ++yynerrs;
1545:
1546: #ifdef YYERROR_VERBOSE
1547: yyn = yypact[yystate];
1548:
1549: if (yyn > YYFLAG && yyn < YYLAST)
1550: {
1551: int size = 0;
1552: char *msg;
1553: int x, count;
1554:
1555: count = 0;
1556: /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
1557: for (x = (yyn < 0 ? -yyn : 0);
1558: x < (sizeof(yytname) / sizeof(char *)); x++)
1559: if (yycheck[x + yyn] == x)
1560: size += strlen(yytname[x]) + 15, count++;
1561: msg = (char *) malloc(size + 15);
1562: if (msg != 0)
1563: {
1564: strcpy(msg, "parse error");
1565:
1566: if (count < 5)
1567: {
1568: count = 0;
1569: for (x = (yyn < 0 ? -yyn : 0);
1570: x < (sizeof(yytname) / sizeof(char *)); x++)
1571: if (yycheck[x + yyn] == x)
1572: {
1573: strcat(msg, count == 0 ? ", expecting `" : " or `");
1574: strcat(msg, yytname[x]);
1575: strcat(msg, "'");
1576: count++;
1577: }
1578: }
1579: yyerror(msg);
1580: free(msg);
1581: }
1582: else
1583: yyerror ("parse error; also virtual memory exceeded");
1584: }
1585: else
1586: #endif /* YYERROR_VERBOSE */
1587: yyerror("parse error");
1588: }
1589:
1590: goto yyerrlab1;
1591: yyerrlab1: /* here on error raised explicitly by an action */
1592:
1593: if (yyerrstatus == 3)
1594: {
1595: /* if just tried and failed to reuse lookahead token after an error, discard it. */
1596:
1597: /* return failure if at end of input */
1598: if (yychar == YYEOF)
1599: YYABORT;
1600:
1601: #if YYDEBUG != 0
1602: if (yydebug)
1603: fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
1604: #endif
1605:
1606: yychar = YYEMPTY;
1607: }
1608:
1609: /* Else will try to reuse lookahead token
1610: after shifting the error token. */
1611:
1612: yyerrstatus = 3; /* Each real token shifted decrements this */
1613:
1614: goto yyerrhandle;
1615:
1616: yyerrdefault: /* current state does not do anything special for the error token. */
1617:
1618: #if 0
1619: /* This is wrong; only states that explicitly want error tokens
1620: should shift them. */
1621: yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
1622: if (yyn) goto yydefault;
1623: #endif
1624:
1625: yyerrpop: /* pop the current state because it cannot handle the error token */
1626:
1627: if (yyssp == yyss) YYABORT;
1628: yyvsp--;
1629: yystate = *--yyssp;
1630: #ifdef YYLSP_NEEDED
1631: yylsp--;
1632: #endif
1633:
1634: #if YYDEBUG != 0
1635: if (yydebug)
1636: {
1637: short *ssp1 = yyss - 1;
1638: fprintf (stderr, "Error: state stack now");
1639: while (ssp1 != yyssp)
1640: fprintf (stderr, " %d", *++ssp1);
1641: fprintf (stderr, "\n");
1642: }
1643: #endif
1644:
1645: yyerrhandle:
1646:
1647: yyn = yypact[yystate];
1648: if (yyn == YYFLAG)
1649: goto yyerrdefault;
1650:
1651: yyn += YYTERROR;
1652: if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
1653: goto yyerrdefault;
1654:
1655: yyn = yytable[yyn];
1656: if (yyn < 0)
1657: {
1658: if (yyn == YYFLAG)
1659: goto yyerrpop;
1660: yyn = -yyn;
1661: goto yyreduce;
1662: }
1663: else if (yyn == 0)
1664: goto yyerrpop;
1665:
1666: if (yyn == YYFINAL)
1667: YYACCEPT;
1668:
1669: #if YYDEBUG != 0
1670: if (yydebug)
1671: fprintf(stderr, "Shifting error token, ");
1672: #endif
1673:
1674: *++yyvsp = yylval;
1675: #ifdef YYLSP_NEEDED
1676: *++yylsp = yylloc;
1677: #endif
1678:
1679: yystate = yyn;
1680: goto yynewstate;
1681: }
1682: #line 654 "../gnumach/mig/parser.y"
1683:
1684:
1685: static const char *
1686: import_name(statement_kind_t sk)
1687: {
1688: switch (sk)
1689: {
1690: case skImport:
1691: return "Import";
1692: case skSImport:
1693: return "SImport";
1694: case skUImport:
1695: return "UImport";
1696: default:
1697: fatal("import_name(%d): not import statement", (int) sk);
1698: /*NOTREACHED*/
1699: }
1700: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.