2 ** Inserted at beginning of c files generated by bison
3 ** REMEMBER: Change bison.reset too.
42 /*@-unqualifiedtrans@*/
46 /*drl added 11/27/2001*/
48 /*@-arrayboundsread@*/
49 /* < end of bison.head > */
52 /* A Bison parser, made from mtgrammar.y
53 by GNU Bison version 1.28 */
55 #define YYBISON 1 /* Identify Bison output. */
57 #define yyparse mtparse
59 #define yyerror mterror
62 #define yydebug mtdebug
63 #define yynerrs mtnerrs
68 #define MT_CONTEXT 261
70 #define MT_DEFAULTS 263
71 #define MT_DEFAULT 264
72 #define MT_REFERENCE 265
73 #define MT_PARAMETER 266
76 #define MT_LITERAL 269
78 #define MT_ANNOTATIONS 271
81 #define MT_TRANSFERS 274
82 #define MT_PRECONDITIONS 275
83 #define MT_POSTCONDITIONS 276
84 #define MT_LOSEREFERENCE 277
92 #define MT_LBRACKET 285
93 #define MT_RBRACKET 286
100 #define MT_DOUBLE 293
102 #define MT_ANYTYPE 295
103 #define MT_INTEGRALTYPE 296
104 #define MT_UNSIGNEDINTEGRALTYPE 297
105 #define MT_SIGNEDINTEGRALTYPE 298
107 #define MT_VOLATILE 300
108 #define MT_STRINGLIT 301
113 # include "bison.reset"
114 # include "lclintMacros.nf"
115 # include "llbasic.h"
118 extern ctype mtscanner_lookupType (mttok p_tok) /*@modifies p_tok@*/ ;
121 /*@i523@*/ /* can't include these here
122 # include "mtgrammar.h"
123 # include "mtscanner.h"
126 static /*@exits@*/ void mterror (char *);
128 /*@-noparams@*/ /* Can't list params since YYSTYPE isn't defined yet. */
129 static void yyprint (/*FILE *p_file, int p_type, YYSTYPE p_value */);
132 # define YYPRINT(file, type, value) yyprint (file, type, value)
136 # include "bison.head"
141 mtDeclarationNode mtdecl;
142 mtDeclarationPiece mtpiece;
143 mtDeclarationPieces mtpieces;
144 mtContextNode mtcontext;
145 mtValuesNode mtvalues;
146 mtDefaultsNode mtdefaults;
147 mtDefaultsDeclList mtdeflist;
148 mtAnnotationsNode mtannotations;
149 mtAnnotationList mtannotlist;
150 mtAnnotationDecl mtannotdecl;
152 mtMergeItem mtmergeitem;
153 mtMergeClauseList mtmergeclauselist;
154 mtMergeClause mtmergeclause;
155 mtTransferClauseList mttransferclauselist;
156 mtTransferClause mttransferclause;
157 mtTransferAction mttransferaction;
158 mtLoseReferenceList mtlosereferencelist;
159 mtLoseReference mtlosereference;
161 /*@only@*/ cstringList cstringlist;
163 /*@only@*/ qtype qtyp;
181 #define YYFLAG -32768
184 #define YYTRANSLATE(x) ((unsigned)(x) <= 302 ? yytranslate[x] : 92)
186 static const char yytranslate[] = { 0,
187 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
189 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
194 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
195 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
196 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
197 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
198 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
199 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
200 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
201 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
202 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
203 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
204 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
205 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
207 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
208 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
211 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
212 2, 2, 2, 2, 2, 1, 3, 4, 5, 6,
213 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
214 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
215 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
216 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
221 static const short yyprhs[] = { 0,
222 0, 1, 3, 7, 12, 15, 16, 19, 21, 23,
223 25, 27, 29, 31, 33, 35, 37, 39, 42, 43,
224 45, 48, 51, 54, 57, 60, 63, 64, 66, 68,
225 71, 73, 77, 80, 81, 83, 85, 87, 90, 92,
226 95, 98, 102, 104, 106, 108, 111, 115, 118, 122,
227 124, 126, 128, 130, 132, 134, 136, 138, 140, 142,
228 144, 147, 149, 153, 156, 159, 163, 168, 171, 173,
229 176, 181, 184, 186, 189, 195, 197, 199, 202, 205,
230 208, 211, 213, 216, 220, 222, 225, 231, 233, 235,
234 static const short yyrhs[] = { -1,
235 50, 0, 5, 51, 4, 0, 6, 5, 51, 4,
236 0, 48, 52, 0, 0, 53, 52, 0, 54, 0,
237 69, 0, 72, 0, 71, 0, 74, 0, 77, 0,
238 83, 0, 81, 0, 82, 0, 84, 0, 7, 56,
239 0, 0, 56, 0, 12, 57, 0, 11, 57, 0,
240 13, 57, 0, 14, 57, 0, 15, 57, 0, 16,
241 57, 0, 0, 58, 0, 59, 0, 59, 62, 0,
242 60, 0, 59, 28, 58, 0, 67, 61, 0, 0,
243 59, 0, 63, 0, 66, 0, 63, 66, 0, 27,
244 0, 27, 65, 0, 27, 63, 0, 27, 65, 63,
245 0, 45, 0, 46, 0, 64, 0, 65, 64, 0,
246 29, 62, 30, 0, 31, 32, 0, 66, 31, 32,
247 0, 36, 0, 37, 0, 38, 0, 39, 0, 40,
248 0, 41, 0, 42, 0, 43, 0, 44, 0, 68,
249 0, 48, 0, 8, 70, 0, 48, 0, 48, 35,
250 70, 0, 10, 91, 0, 9, 73, 0, 56, 18,
251 91, 0, 56, 18, 91, 73, 0, 17, 75, 0,
252 76, 0, 76, 75, 0, 48, 55, 18, 91, 0,
253 19, 78, 0, 79, 0, 79, 78, 0, 80, 26,
254 80, 18, 89, 0, 91, 0, 27, 0, 21, 87,
255 0, 22, 87, 0, 20, 87, 0, 23, 85, 0,
256 86, 0, 86, 85, 0, 91, 18, 90, 0, 88,
257 0, 88, 87, 0, 91, 24, 91, 18, 89, 0,
258 91, 0, 90, 0, 25, 0, 25, 47, 0, 48,
265 static const short yyrline[] = { 0,
266 152, 153, 156, 158, 162, 166, 167, 171, 172, 173,
267 174, 175, 176, 177, 178, 179, 180, 183, 187, 188,
268 191, 192, 193, 194, 195, 196, 203, 204, 207, 208,
269 211, 212, 216, 219, 220, 224, 225, 226, 229, 230,
270 231, 232, 235, 236, 239, 240, 243, 244, 245, 252,
271 253, 254, 255, 256, 257, 258, 259, 260, 261, 267,
272 270, 273, 274, 278, 281, 284, 286, 290, 293, 294,
273 298, 302, 305, 306, 309, 313, 314, 317, 320, 323,
274 326, 329, 330, 333, 336, 337, 340, 344, 345, 348,
280 #if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
282 static const char * const yytname[] = { "$","error","$undefined.","MT_BADTOK",
283 "MT_END","MT_STATE","MT_GLOBAL","MT_CONTEXT","MT_ONEOF","MT_DEFAULTS","MT_DEFAULT",
284 "MT_REFERENCE","MT_PARAMETER","MT_RESULT","MT_CLAUSE","MT_LITERAL","MT_NULL",
285 "MT_ANNOTATIONS","MT_ARROW","MT_MERGE","MT_TRANSFERS","MT_PRECONDITIONS","MT_POSTCONDITIONS",
286 "MT_LOSEREFERENCE","MT_AS","MT_ERROR","MT_PLUS","MT_STAR","MT_BAR","MT_LPAREN",
287 "MT_RPAREN","MT_LBRACKET","MT_RBRACKET","MT_LBRACE","MT_RBRACE","MT_COMMA","MT_CHAR",
288 "MT_INT","MT_FLOAT","MT_DOUBLE","MT_VOID","MT_ANYTYPE","MT_INTEGRALTYPE","MT_UNSIGNEDINTEGRALTYPE",
289 "MT_SIGNEDINTEGRALTYPE","MT_CONST","MT_VOLATILE","MT_STRINGLIT","MT_IDENT","file",
290 "mtsDeclaration","declarationNode","declarationPieces","declarationPiece","contextDeclaration",
291 "optContextSelection","contextSelection","optType","typeExpression","completeType",
292 "completeTypeAux","optCompleteType","abstractDecl","pointers","innerMods","innerModsList",
293 "abstractDeclBase","typeSpecifier","typeName","valuesDeclaration","valuesList",
294 "defaultNode","defaultsDeclaration","defaultDeclarationList","annotationsDeclaration",
295 "annotationsDeclarationList","annotationDeclaration","mergeDeclaration","mergeClauses",
296 "mergeClause","mergeItem","preconditionsDeclaration","postconditionsDeclaration",
297 "transfersDeclaration","loseReferenceDeclaration","lostClauses","lostClause",
298 "transferClauses","transferClause","transferAction","errorAction","valueChoice", NULL
302 static const short yyr1[] = { 0,
303 49, 49, 50, 50, 51, 52, 52, 53, 53, 53,
304 53, 53, 53, 53, 53, 53, 53, 54, 55, 55,
305 56, 56, 56, 56, 56, 56, 57, 57, 58, 58,
306 59, 59, 60, 61, 61, 62, 62, 62, 63, 63,
307 63, 63, 64, 64, 65, 65, 66, 66, 66, 67,
308 67, 67, 67, 67, 67, 67, 67, 67, 67, 68,
309 69, 70, 70, 71, 72, 73, 73, 74, 75, 75,
310 76, 77, 78, 78, 79, 80, 80, 81, 82, 83,
311 84, 85, 85, 86, 87, 87, 88, 89, 89, 90,
315 static const short yyr2[] = { 0,
316 0, 1, 3, 4, 2, 0, 2, 1, 1, 1,
317 1, 1, 1, 1, 1, 1, 1, 2, 0, 1,
318 2, 2, 2, 2, 2, 2, 0, 1, 1, 2,
319 1, 3, 2, 0, 1, 1, 1, 2, 1, 2,
320 2, 3, 1, 1, 1, 2, 3, 2, 3, 1,
321 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
322 2, 1, 3, 2, 2, 3, 4, 2, 1, 2,
323 4, 2, 1, 2, 5, 1, 1, 2, 2, 2,
324 2, 1, 2, 3, 1, 2, 5, 1, 1, 1,
328 static const short yydefact[] = { 1,
329 0, 0, 2, 6, 0, 0, 0, 0, 0, 0,
330 0, 0, 0, 0, 0, 0, 5, 6, 8, 9,
331 11, 10, 12, 13, 15, 16, 14, 17, 3, 0,
332 27, 27, 27, 27, 27, 27, 18, 62, 61, 0,
333 65, 92, 64, 19, 68, 69, 77, 72, 73, 0,
334 76, 80, 85, 0, 78, 79, 81, 82, 0, 7,
335 4, 50, 51, 52, 53, 54, 55, 56, 57, 58,
336 60, 22, 28, 29, 31, 34, 59, 21, 23, 24,
337 25, 26, 0, 0, 0, 20, 70, 74, 0, 86,
338 0, 83, 0, 39, 0, 0, 0, 30, 36, 37,
339 35, 33, 63, 66, 0, 0, 0, 90, 84, 43,
340 44, 41, 45, 40, 32, 0, 48, 38, 0, 67,
341 71, 0, 0, 91, 42, 46, 47, 49, 75, 89,
345 static const short yydefgoto[] = { 133,
346 3, 5, 17, 18, 19, 85, 40, 72, 73, 74,
347 75, 102, 98, 99, 113, 114, 100, 76, 77, 20,
348 39, 21, 22, 41, 23, 45, 46, 24, 48, 49,
349 50, 25, 26, 27, 28, 57, 58, 52, 53, 129,
353 static const short yypact[] = { 4,
354 -37, 35,-32768, 36, 37, -37, 21, 2, 21, 17,
355 18, -19, 17, 17, 17, 17,-32768, 36,-32768,-32768,
356 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768, 63,
357 -23, -23, -23, -23, -23, -23,-32768, 33,-32768, 51,
358 -32768,-32768,-32768, 21,-32768, 18,-32768,-32768, -19, 44,
359 -32768,-32768, 17, 47,-32768,-32768,-32768, 17, 54,-32768,
360 -32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
361 -32768,-32768,-32768, -5,-32768, -23,-32768,-32768,-32768,-32768,
362 -32768,-32768, 2, 17, 55,-32768,-32768,-32768, -19,-32768,
363 17,-32768, 50, -15, -23, 20, 45,-32768, 23, 49,
364 48,-32768,-32768, 21, 17, 60, 64, 38,-32768,-32768,
365 -32768,-32768,-32768, -15,-32768, 53,-32768, 49, 52,-32768,
366 -32768, -20, -20,-32768,-32768,-32768,-32768,-32768,-32768,-32768,
367 -32768,-32768, 86, 87,-32768
370 static const short yypgoto[] = {-32768,
371 -32768, 82, 71,-32768,-32768,-32768, -6, 28, -4, 14,
372 -32768,-32768, -3, -87, -22,-32768, -2,-32768,-32768,-32768,
373 11,-32768,-32768, -8,-32768, 56,-32768,-32768, 57,-32768,
374 9,-32768,-32768,-32768,-32768, 41,-32768, -11,-32768, -18,
382 static const short yytable[] = { 43,
383 37, 51, 55, 56, 108, 59, 112, 47, 1, 2,
384 4, 94, 62, 63, 64, 65, 66, 67, 68, 69,
385 70, 94, 95, 96, 71, 97, 125, 42, 42, 110,
386 111, 31, 32, 33, 34, 35, 36, 86, 51, 6,
387 29, 90, 7, 8, 9, 10, 94, 59, 96, 38,
388 97, 96, 11, 97, 12, 13, 14, 15, 16, 78,
389 79, 80, 81, 82, 42, 44, 61, 83, 84, 89,
390 91, 93, 105, 104, 108, 95, 117, 122, 51, 119,
391 107, 123, 127, 128, 124, 134, 135, 30, 60, 101,
392 115, 126, 116, 103, 121, 120, 118, 106, 92, 109,
393 0, 87, 0, 0, 132, 88, 0, 0, 0, 0,
397 static const short yycheck[] = { 10,
398 7, 12, 14, 15, 25, 16, 94, 27, 5, 6,
399 48, 27, 36, 37, 38, 39, 40, 41, 42, 43,
400 44, 27, 28, 29, 48, 31, 114, 48, 48, 45,
401 46, 11, 12, 13, 14, 15, 16, 44, 49, 5,
402 4, 53, 7, 8, 9, 10, 27, 58, 29, 48,
403 31, 29, 17, 31, 19, 20, 21, 22, 23, 32,
404 33, 34, 35, 36, 48, 48, 4, 35, 18, 26,
405 24, 18, 18, 84, 25, 28, 32, 18, 89, 31,
406 91, 18, 30, 32, 47, 0, 0, 6, 18, 76,
407 95, 114, 96, 83, 105, 104, 99, 89, 58, 93,
408 -1, 46, -1, -1, 123, 49, -1, -1, -1, -1,
413 /* -*-C-*- Note some compilers choke on comments on `#line' lines. */
415 /* This file comes from bison-1.28. */
417 /* Skeleton output parser for bison,
418 Copyright (C) 1984, 1989, 1990 Free Software Foundation, Inc.
420 This program is free software; you can redistribute it and/or modify
421 it under the terms of the GNU General Public License as published by
422 the Free Software Foundation; either version 2, or (at your option)
425 This program is distributed in the hope that it will be useful,
426 but WITHOUT ANY WARRANTY; without even the implied warranty of
427 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
428 GNU General Public License for more details.
430 You should have received a copy of the GNU General Public License
431 along with this program; if not, write to the Free Software
432 Foundation, Inc., 59 Temple Place - Suite 330,
433 Boston, MA 02111-1307, USA. */
435 /* As a special exception, when this file is copied by Bison into a
436 Bison output file, you may use that output file without restriction.
437 This special exception was added by the Free Software Foundation
438 in version 1.24 of Bison. */
440 /* This is the parser code that is written into each bison parser
441 when the %semantic_parser declaration is not specified in the grammar.
442 It was written by Richard Stallman by simplifying the hairy parser
443 used when %semantic_parser is specified. */
445 #ifndef YYSTACK_USE_ALLOCA
447 #define YYSTACK_USE_ALLOCA
448 #else /* alloca not defined */
450 #define YYSTACK_USE_ALLOCA
451 #define alloca __builtin_alloca
452 #else /* not GNU C. */
453 #if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
454 #define YYSTACK_USE_ALLOCA
456 #else /* not sparc */
457 /* We think this test detects Watcom and Microsoft C. */
458 /* This used to test MSDOS, but that is a bad idea
459 since that symbol is in the user namespace. */
460 #if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
461 #if 0 /* No need for malloc.h, which pollutes the namespace;
462 instead, just don't use alloca. */
465 #else /* not MSDOS, or __TURBOC__ */
467 /* I don't know what this was needed for, but it pollutes the namespace.
468 So I turned it off. rms, 2 May 1997. */
469 /* #include <malloc.h> */
471 #define YYSTACK_USE_ALLOCA
472 #else /* not MSDOS, or __TURBOC__, or _AIX */
474 #ifdef __hpux /* haible@ilog.fr says this works for HPUX 9.05 and up,
475 and on HPUX 10. Eventually we can turn this on. */
476 #define YYSTACK_USE_ALLOCA
477 #define alloca __builtin_alloca
480 #endif /* not _AIX */
481 #endif /* not MSDOS, or __TURBOC__ */
482 #endif /* not sparc */
483 #endif /* not GNU C */
484 #endif /* alloca not defined */
485 #endif /* YYSTACK_USE_ALLOCA not defined */
487 #ifdef YYSTACK_USE_ALLOCA
488 #define YYSTACK_ALLOC alloca
490 #define YYSTACK_ALLOC malloc
493 /* Note: there must be only one dollar sign in this file.
494 It is replaced by the list of actions, each action
495 as one case of the switch. */
497 #define yyerrok (yyerrstatus = 0)
498 #define yyclearin (yychar = YYEMPTY)
501 #define YYACCEPT goto yyacceptlab
502 #define YYABORT goto yyabortlab
503 #define YYERROR goto yyerrlab1
504 /* Like YYERROR except do call yyerror.
505 This remains here temporarily to ease the
506 transition to the new meaning of YYERROR, for GCC.
507 Once GCC version 2 has supplanted version 1, this can go. */
508 #define YYFAIL goto yyerrlab
509 #define YYRECOVERING() (!!yyerrstatus)
510 #define YYBACKUP(token, value) \
512 if (yychar == YYEMPTY && yylen == 1) \
513 { yychar = (token), yylval = (value); \
514 yychar1 = YYTRANSLATE (yychar); \
519 { yyerror ("syntax error: cannot back up"); YYERROR; } \
523 #define YYERRCODE 256
526 #define YYLEX yylex()
532 #define YYLEX yylex(&yylval, &yylloc, YYLEX_PARAM)
534 #define YYLEX yylex(&yylval, &yylloc)
536 #else /* not YYLSP_NEEDED */
538 #define YYLEX yylex(&yylval, YYLEX_PARAM)
540 #define YYLEX yylex(&yylval)
542 #endif /* not YYLSP_NEEDED */
545 /* If nonreentrant, generate the variables here */
549 int yychar; /* the lookahead symbol */
550 YYSTYPE yylval; /* the semantic value of the */
551 /* lookahead symbol */
554 YYLTYPE yylloc; /* location data for the lookahead */
558 int yynerrs; /* number of parse errors so far */
559 #endif /* not YYPURE */
562 int yydebug; /* nonzero means print parse trace */
563 /* Since this is uninitialized, it does not stop multiple parsers
567 /* YYINITDEPTH indicates the initial size of the parser's stacks */
570 #define YYINITDEPTH 200
573 /* YYMAXDEPTH is the maximum size the stacks can grow to
574 (effective only if the built-in stack extension method is used). */
581 #define YYMAXDEPTH 10000
584 /* Define __yy_memcpy. Note that the size argument
585 should be passed with type unsigned int, because that is what the non-GCC
586 definitions require. With GCC, __builtin_memcpy takes an arg
587 of type size_t, but it can handle unsigned int. */
589 #if __GNUC__ > 1 /* GNU C and GNU C++ define this. */
590 #define __yy_memcpy(TO,FROM,COUNT) __builtin_memcpy(TO,FROM,COUNT)
591 #else /* not GNU C or C++ */
594 /* This is the most reliable way to avoid incompatibilities
595 in available built-in functions on various systems. */
597 __yy_memcpy (to, from, count)
602 register char *f = from;
603 register char *t = to;
604 register int i = count;
610 #else /* __cplusplus */
612 /* This is the most reliable way to avoid incompatibilities
613 in available built-in functions on various systems. */
615 __yy_memcpy (char *to, char *from, unsigned int count)
617 register char *t = to;
618 register char *f = from;
619 register int i = count;
630 /* The user can define YYPARSE_PARAM as the name of an argument to be passed
631 into yyparse. The argument should have type void *.
632 It should actually point to an object.
633 Grammar actions can access the variable by casting it
634 to the proper pointer type. */
638 #define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
639 #define YYPARSE_PARAM_DECL
640 #else /* not __cplusplus */
641 #define YYPARSE_PARAM_ARG YYPARSE_PARAM
642 #define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
643 #endif /* not __cplusplus */
644 #else /* not YYPARSE_PARAM */
645 #define YYPARSE_PARAM_ARG
646 #define YYPARSE_PARAM_DECL
647 #endif /* not YYPARSE_PARAM */
649 /* Prevent warning if -Wstrict-prototypes. */
652 int yyparse (void *);
659 yyparse(YYPARSE_PARAM_ARG)
662 register int yystate;
664 register short *yyssp;
665 register YYSTYPE *yyvsp;
666 int yyerrstatus; /* number of tokens to shift before error messages enabled */
667 int yychar1 = 0; /* lookahead token as an internal (translated) token number */
669 short yyssa[YYINITDEPTH]; /* the state stack */
670 YYSTYPE yyvsa[YYINITDEPTH]; /* the semantic value stack */
672 short *yyss = yyssa; /* refer to the stacks thru separate pointers */
673 YYSTYPE *yyvs = yyvsa; /* to allow yyoverflow to reallocate them elsewhere */
676 YYLTYPE yylsa[YYINITDEPTH]; /* the location stack */
677 YYLTYPE *yyls = yylsa;
680 #define YYPOPSTACK (yyvsp--, yyssp--, yylsp--)
682 #define YYPOPSTACK (yyvsp--, yyssp--)
685 int yystacksize = YYINITDEPTH;
686 int yyfree_stacks = 0;
697 YYSTYPE yyval; /* the variable used to return */
698 /* semantic values from the action */
705 fprintf(stderr, "Starting parse\n");
711 yychar = YYEMPTY; /* Cause a token to be read. */
713 /* Initialize stack pointers.
714 Waste one element of value and location stack
715 so that they stay on the same level as the state stack.
716 The wasted elements are never initialized. */
724 /* Push a new state, which is found in yystate . */
725 /* In all cases, when you get here, the value and location stacks
726 have just been pushed. so pushing a state here evens the stacks. */
731 if (yyssp >= yyss + yystacksize - 1)
733 /* Give user a chance to reallocate the stack */
734 /* Use copies of these so that the &'s don't force the real ones into memory. */
735 YYSTYPE *yyvs1 = yyvs;
738 YYLTYPE *yyls1 = yyls;
741 /* Get the current used size of the three stacks, in elements. */
742 int size = yyssp - yyss + 1;
745 /* Each stack pointer address is followed by the size of
746 the data in use in that stack, in bytes. */
748 /* This used to be a conditional around just the two extra args,
749 but that might be undefined if yyoverflow is a macro. */
750 yyoverflow("parser stack overflow",
751 &yyss1, size * sizeof (*yyssp),
752 &yyvs1, size * sizeof (*yyvsp),
753 &yyls1, size * sizeof (*yylsp),
756 yyoverflow("parser stack overflow",
757 &yyss1, size * sizeof (*yyssp),
758 &yyvs1, size * sizeof (*yyvsp),
762 yyss = yyss1; yyvs = yyvs1;
766 #else /* no yyoverflow */
767 /* Extend the stack our own way. */
768 if (yystacksize >= YYMAXDEPTH)
770 yyerror("parser stack overflow");
782 if (yystacksize > YYMAXDEPTH)
783 yystacksize = YYMAXDEPTH;
784 #ifndef YYSTACK_USE_ALLOCA
787 yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
788 __yy_memcpy ((char *)yyss, (char *)yyss1,
789 size * (unsigned int) sizeof (*yyssp));
790 yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
791 __yy_memcpy ((char *)yyvs, (char *)yyvs1,
792 size * (unsigned int) sizeof (*yyvsp));
794 yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
795 __yy_memcpy ((char *)yyls, (char *)yyls1,
796 size * (unsigned int) sizeof (*yylsp));
798 #endif /* no yyoverflow */
800 yyssp = yyss + size - 1;
801 yyvsp = yyvs + size - 1;
803 yylsp = yyls + size - 1;
808 fprintf(stderr, "Stack size increased to %d\n", yystacksize);
811 if (yyssp >= yyss + yystacksize - 1)
817 fprintf(stderr, "Entering state %d\n", yystate);
823 /* Do appropriate processing given the current state. */
824 /* Read a lookahead token if we need one and don't already have one. */
827 /* First try to decide what to do without reference to lookahead token. */
829 yyn = yypact[yystate];
833 /* Not known => get a lookahead token if don't already have one. */
835 /* yychar is either YYEMPTY or YYEOF
836 or a valid token in external form. */
838 if (yychar == YYEMPTY)
842 fprintf(stderr, "Reading a token: ");
847 /* Convert token to internal form (in yychar1) for indexing tables with */
849 if (yychar <= 0) /* This means end of input. */
852 yychar = YYEOF; /* Don't call YYLEX any more */
856 fprintf(stderr, "Now at end of input.\n");
861 yychar1 = YYTRANSLATE(yychar);
866 fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
867 /* Give the individual parser a way to print the precise meaning
868 of a token, for further debugging info. */
870 YYPRINT (stderr, yychar, yylval);
872 fprintf (stderr, ")\n");
878 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
883 /* yyn is what to do for this token type in this state.
884 Negative => reduce, -yyn is rule number.
885 Positive => shift, yyn is new state.
886 New state is final state => don't bother to shift,
888 0, or most negative number => error. */
903 /* Shift the lookahead token. */
907 fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
910 /* Discard the token being shifted unless it is eof. */
919 /* count tokens shifted since error; after three, turn off error status. */
920 if (yyerrstatus) yyerrstatus--;
925 /* Do the default action for the current state. */
928 yyn = yydefact[yystate];
932 /* Do a reduction. yyn is the number of a rule to reduce with. */
936 yyval = yyvsp[1-yylen]; /* implement default value of the action */
943 fprintf (stderr, "Reducing via rule %d (line %d), ",
946 /* Print the symbols being reduced, and their result. */
947 for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
948 fprintf (stderr, "%s ", yytname[yyrhs[i]]);
949 fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
963 { mtreader_processDeclaration (yyvsp[-1].mtdecl); ;
966 { mtreader_processGlobalDeclaration (yyvsp[-1].mtdecl); ;
969 { yyval.mtdecl = mtDeclarationNode_create (yyvsp[-1].tok, yyvsp[0].mtpieces); ;
972 { yyval.mtpieces = mtDeclarationPieces_create (); ;
975 { yyval.mtpieces = mtDeclarationPieces_append (yyvsp[0].mtpieces, yyvsp[-1].mtpiece); ;
978 { yyval.mtpiece = mtDeclarationPiece_createContext (yyvsp[0].mtcontext); ;
981 { yyval.mtpiece = mtDeclarationPiece_createValues (yyvsp[0].mtvalues); ;
984 { yyval.mtpiece = mtDeclarationPiece_createDefaults (yyvsp[0].mtdefaults); ;
987 { yyval.mtpiece = mtDeclarationPiece_createValueDefault (yyvsp[0].tok); ;
990 { yyval.mtpiece = mtDeclarationPiece_createAnnotations (yyvsp[0].mtannotations); ;
993 { yyval.mtpiece = mtDeclarationPiece_createMerge (yyvsp[0].mtmerge); ;
996 { yyval.mtpiece = mtDeclarationPiece_createTransfers (yyvsp[0].mttransferclauselist); ;
999 { yyval.mtpiece = mtDeclarationPiece_createPreconditions (yyvsp[0].mttransferclauselist); ;
1002 { yyval.mtpiece = mtDeclarationPiece_createPostconditions (yyvsp[0].mttransferclauselist); ;
1005 { yyval.mtpiece = mtDeclarationPiece_createLosers (yyvsp[0].mtlosereferencelist); ;
1008 { yyval.mtcontext = yyvsp[0].mtcontext; ;
1011 { yyval.mtcontext = mtContextNode_createAny (); ;
1014 { yyval.mtcontext = mtContextNode_createParameter (yyvsp[0].ctyp); ;
1017 { yyval.mtcontext = mtContextNode_createReference (yyvsp[0].ctyp); ;
1020 { yyval.mtcontext = mtContextNode_createResult (yyvsp[0].ctyp); ;
1023 { yyval.mtcontext = mtContextNode_createClause (yyvsp[0].ctyp); ;
1026 { yyval.mtcontext = mtContextNode_createLiteral (yyvsp[0].ctyp); ;
1029 { yyval.mtcontext = mtContextNode_createNull (yyvsp[0].ctyp); ;
1032 { yyval.ctyp = ctype_unknown; ;
1035 { DPRINTF (("Type: %s", qtype_unparse (yyvsp[0].qtyp))); yyval.ctyp = qtype_getType (yyvsp[0].qtyp); ;
1038 { yyval.qtyp = qtype_newBase (yyvsp[-1].qtyp, yyvsp[0].ctyp); ;
1041 { yyval.qtyp = yyvsp[0].qtyp; ;
1044 { yyval.qtyp = qtype_mergeAlt (yyvsp[-2].qtyp, yyvsp[0].qtyp); ;
1047 { yyval.qtyp = qtype_combine (yyvsp[0].qtyp, yyvsp[-1].ctyp); ;
1050 { yyval.qtyp = qtype_unknown (); ;
1053 { yyval.qtyp = yyvsp[0].qtyp; ;
1056 { yyval.ctyp = ctype_adjustPointers (yyvsp[0].count, ctype_unknown); ;
1059 { yyval.ctyp = ctype_adjustPointers (yyvsp[-1].count, yyvsp[0].ctyp); ;
1062 { yyval.count = 1; ;
1065 { yyval.count = 1; ;
1068 { yyval.count = 1 + yyvsp[0].count; ;
1071 { yyval.count = 1 + yyvsp[0].count; ;
1074 { /* ignored for now */; ;
1086 { yyval.ctyp = ctype_expectFunction (yyvsp[-1].ctyp); ;
1089 { yyval.ctyp = ctype_makeArray (ctype_unknown); ;
1092 { yyval.ctyp = ctype_makeArray (yyvsp[-2].ctyp); ;
1095 { yyval.ctyp = ctype_char; ;
1098 { yyval.ctyp = ctype_int; ;
1101 { yyval.ctyp = ctype_float; ;
1104 { yyval.ctyp = ctype_double; ;
1107 { yyval.ctyp = ctype_void; ;
1110 { yyval.ctyp = ctype_unknown; ;
1113 { yyval.ctyp = ctype_anyintegral; ;
1116 { yyval.ctyp = ctype_unsignedintegral; ;
1119 { yyval.ctyp = ctype_signedintegral; ;
1122 { yyval.ctyp = mtscanner_lookupType (yyvsp[0].tok); ;
1125 { yyval.mtvalues = mtValuesNode_create (yyvsp[0].cstringlist); ;
1128 { yyval.cstringlist = cstringList_single (mttok_getText (yyvsp[0].tok)); ;
1131 { yyval.cstringlist = cstringList_prepend (yyvsp[0].cstringlist, mttok_getText (yyvsp[-2].tok)); ;
1134 { yyval.tok = yyvsp[0].tok; ;
1137 { yyval.mtdefaults = mtDefaultsNode_create (yyvsp[-1].tok, yyvsp[0].mtdeflist); ;
1140 { yyval.mtdeflist = mtDefaultsDeclList_single (mtDefaultsDecl_create (yyvsp[-2].mtcontext, yyvsp[0].tok)); ;
1143 { yyval.mtdeflist = mtDefaultsDeclList_prepend (yyvsp[0].mtdeflist, mtDefaultsDecl_create (yyvsp[-3].mtcontext, yyvsp[-1].tok)); ;
1146 { yyval.mtannotations = mtAnnotationsNode_create (yyvsp[0].mtannotlist); ;
1149 { yyval.mtannotlist = mtAnnotationList_single (yyvsp[0].mtannotdecl); ;
1152 { yyval.mtannotlist = mtAnnotationList_prepend (yyvsp[0].mtannotlist, yyvsp[-1].mtannotdecl); ;
1155 { yyval.mtannotdecl = mtAnnotationDecl_create (yyvsp[-3].tok, yyvsp[-2].mtcontext, yyvsp[0].tok); ;
1158 { yyval.mtmerge = mtMergeNode_create (yyvsp[0].mtmergeclauselist); ;
1161 { yyval.mtmergeclauselist = mtMergeClauseList_single (yyvsp[0].mtmergeclause); ;
1164 { yyval.mtmergeclauselist = mtMergeClauseList_prepend (yyvsp[0].mtmergeclauselist, yyvsp[-1].mtmergeclause); ;
1167 { yyval.mtmergeclause = mtMergeClause_create (yyvsp[-4].mtmergeitem, yyvsp[-2].mtmergeitem, yyvsp[0].mttransferaction); ;
1170 { yyval.mtmergeitem = mtMergeItem_createValue (yyvsp[0].tok); ;
1173 { yyval.mtmergeitem = mtMergeItem_createStar (yyvsp[0].tok); ;
1176 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
1179 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
1182 { yyval.mttransferclauselist = yyvsp[0].mttransferclauselist; ;
1185 { yyval.mtlosereferencelist = yyvsp[0].mtlosereferencelist; ;
1188 { yyval.mtlosereferencelist = mtLoseReferenceList_single (yyvsp[0].mtlosereference); ;
1191 { yyval.mtlosereferencelist = mtLoseReferenceList_prepend (yyvsp[0].mtlosereferencelist, yyvsp[-1].mtlosereference); ;
1194 { yyval.mtlosereference = mtLoseReference_create (yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
1197 { yyval.mttransferclauselist = mtTransferClauseList_single (yyvsp[0].mttransferclause); ;
1200 { yyval.mttransferclauselist = mtTransferClauseList_prepend (yyvsp[0].mttransferclauselist, yyvsp[-1].mttransferclause); ;
1203 { yyval.mttransferclause = mtTransferClause_create (yyvsp[-4].tok, yyvsp[-2].tok, yyvsp[0].mttransferaction); ;
1206 { yyval.mttransferaction = mtTransferAction_createValue (yyvsp[0].tok); ;
1209 { yyval.mttransferaction = yyvsp[0].mttransferaction; ;
1212 { yyval.mttransferaction = mtTransferAction_createError (yyvsp[0].tok); ;
1215 { yyval.mttransferaction = mtTransferAction_createErrorMessage (yyvsp[0].tok); ;
1218 /* the action file gets copied in in place of this dollarsign */
1230 short *ssp1 = yyss - 1;
1231 fprintf (stderr, "state stack now");
1232 while (ssp1 != yyssp)
1233 fprintf (stderr, " %d", *++ssp1);
1234 fprintf (stderr, "\n");
1244 yylsp->first_line = yylloc.first_line;
1245 yylsp->first_column = yylloc.first_column;
1246 yylsp->last_line = (yylsp-1)->last_line;
1247 yylsp->last_column = (yylsp-1)->last_column;
1252 yylsp->last_line = (yylsp+yylen-1)->last_line;
1253 yylsp->last_column = (yylsp+yylen-1)->last_column;
1257 /* Now "shift" the result of the reduction.
1258 Determine what state that goes to,
1259 based on the state we popped back to
1260 and the rule number reduced by. */
1264 yystate = yypgoto[yyn - YYNTBASE] + *yyssp;
1265 if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
1266 yystate = yytable[yystate];
1268 yystate = yydefgoto[yyn - YYNTBASE];
1272 yyerrlab: /* here on detecting error */
1275 /* If not already recovering from an error, report this error. */
1279 #ifdef YYERROR_VERBOSE
1280 yyn = yypact[yystate];
1282 if (yyn > YYFLAG && yyn < YYLAST)
1289 /* Start X at -yyn if nec to avoid negative indexes in yycheck. */
1290 for (x = (yyn < 0 ? -yyn : 0);
1291 x < (sizeof(yytname) / sizeof(char *)); x++)
1292 if (yycheck[x + yyn] == x)
1293 size += strlen(yytname[x]) + 15, count++;
1294 msg = (char *) malloc(size + 15);
1297 strcpy(msg, "parse error");
1302 for (x = (yyn < 0 ? -yyn : 0);
1303 x < (sizeof(yytname) / sizeof(char *)); x++)
1304 if (yycheck[x + yyn] == x)
1306 strcat(msg, count == 0 ? ", expecting `" : " or `");
1307 strcat(msg, yytname[x]);
1316 yyerror ("parse error; also virtual memory exceeded");
1319 #endif /* YYERROR_VERBOSE */
1320 yyerror("parse error");
1324 yyerrlab1: /* here on error raised explicitly by an action */
1326 if (yyerrstatus == 3)
1328 /* if just tried and failed to reuse lookahead token after an error, discard it. */
1330 /* return failure if at end of input */
1331 if (yychar == YYEOF)
1336 fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
1342 /* Else will try to reuse lookahead token
1343 after shifting the error token. */
1345 yyerrstatus = 3; /* Each real token shifted decrements this */
1349 yyerrdefault: /* current state does not do anything special for the error token. */
1352 /* This is wrong; only states that explicitly want error tokens
1353 should shift them. */
1354 yyn = yydefact[yystate]; /* If its default is to accept any token, ok. Otherwise pop it.*/
1355 if (yyn) goto yydefault;
1358 yyerrpop: /* pop the current state because it cannot handle the error token */
1360 if (yyssp == yyss) YYABORT;
1370 short *ssp1 = yyss - 1;
1371 fprintf (stderr, "Error: state stack now");
1372 while (ssp1 != yyssp)
1373 fprintf (stderr, " %d", *++ssp1);
1374 fprintf (stderr, "\n");
1380 yyn = yypact[yystate];
1385 if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
1404 fprintf(stderr, "Shifting error token, ");
1416 /* YYACCEPT comes here. */
1428 /* YYABORT comes here. */
1441 # include "bison.reset"
1443 extern char *yytext;
1445 static void mterror (char *s)
1451 (message ("Parse error in meta-state file: %s", cstring_fromChars (s)));
1456 (message ("Parse error in meta-state file"));
1461 static void yyprint (FILE *file, int type, YYSTYPE value)
1463 cstring tname = mttok_unparse (value.tok);
1464 fprintf (file, " (%s)", cstring_toCharsSafe (tname));
1465 cstring_free (tname);
1472 ** Resets all flags in bison.head
1494 /*@=evalorderuncon@*/
1503 /*@=elseifcomplete@*/
1507 /*@=readonlytrans@*/
1510 /*@=systemunrecog@*/
1511 /*@=dependenttrans@*/
1512 /*@=unqualifiedtrans@*/
1516 /*drl added 11/27/2001*/
1518 /*@=arrayboundsread@*/