PIPS
cyacc.tab.c
Go to the documentation of this file.
1 /* A Bison parser, made by GNU Bison 3.8.2. */
2 
3 /* Bison implementation for Yacc-like parsers in C
4 
5  Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
6  Inc.
7 
8  This program is free software: you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation, either version 3 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program. If not, see <https://www.gnu.org/licenses/>. */
20 
21 /* As a special exception, you may create a larger work that contains
22  part or all of the Bison parser skeleton and distribute that work
23  under terms of your choice, so long as that work isn't itself a
24  parser generator using the skeleton or a modified version thereof
25  as a parser skeleton. Alternatively, if you modify or redistribute
26  the parser skeleton itself, you may (at your option) remove this
27  special exception, which will cause the skeleton and the resulting
28  Bison output files to be licensed under the GNU General Public
29  License without this special exception.
30 
31  This special exception was added by the Free Software Foundation in
32  version 2.2 of Bison. */
33 
34 /* C LALR(1) parser skeleton written by Richard Stallman, by
35  simplifying the original so-called "semantic" parser. */
36 
37 /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual,
38  especially those whose name start with YY_ or yy_. They are
39  private implementation details that can be changed or removed. */
40 
41 /* All symbols defined below should begin with yy or YY, to avoid
42  infringing on user name space. This should be done even for local
43  variables, as they might otherwise be expanded by user macros.
44  There are some unavoidable exceptions within include files to
45  define necessary library symbols; they are noted "INFRINGES ON
46  USER NAME SPACE" below. */
47 
48 /* Identify Bison output, and Bison version. */
49 #define YYBISON 30802
50 
51 /* Bison version string. */
52 #define YYBISON_VERSION "3.8.2"
53 
54 /* Skeleton name. */
55 #define YYSKELETON_NAME "yacc.c"
56 
57 /* Pure parsers. */
58 #define YYPURE 0
59 
60 /* Push parsers. */
61 #define YYPUSH 0
62 
63 /* Pull parsers. */
64 #define YYPULL 1
65 
66 
67 /* Substitute the variable and function names. */
68 #define yyparse c_parse
69 #define yylex c_lex
70 #define yyerror c_error
71 #define yydebug c_debug
72 #define yynerrs c_nerrs
73 #define yylval c_lval
74 #define yychar c_char
75 
76 /* First part of user prologue. */
77 #line 52 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
78 
79 #ifdef HAVE_CONFIG_H
80  #include "pips_config.h"
81 #endif
82  /* C declarations */
83 #include <stdio.h>
84 #include <string.h>
85 #include <stdlib.h>
86 #include <ctype.h>
87 
88 #include "genC.h"
89 #include "linear.h"
90 #include "ri.h"
91 #include "ri-util.h"
92 #include "text-util.h"
93 #include "misc.h"
94 #include "properties.h"
95 
96 #include "c_parser_private.h"
97 
98 #include "c_syntax.h"
99 
100 #define C_ERROR_VERBOSE 1 /* much clearer error messages with bison */
101 
102 /* Increase the parser stack to have SPEC2006/445.gobmk/owl_defendpat.c
103  going through without a:
104 
105  user warning in splitc_error: C memory exhausted near "0" at preprocessed line 13459 (user line 8732)
106 */
107 #define YYMAXDEPTH 1000000
108 
109 // To set breakpoint in cyacc.y
110 // void breakpoint(int l) {;}
111 // #define BREAKPOINT breakpoint(__LINE__)
112 #define BREAKPOINT ;
113 
114 static int CurrentMode = 0; /**< to know the mode of the formal parameter: by value or by reference*/
115 static bool is_external = true; /**< to know if the variable is declared inside or outside a function, so its scope
116  is the current function or the compilation unit or TOP-LEVEL*/
117 static int enum_counter = 0; /**< to compute the enumerator value: val(i) = val(i-1) + 1 */
118 static int abstract_counter = 1; /**< to create temporary entities for abstract types */
119 
120  static list initialization_expressions = NIL; /**< to preserve information about the declarations for the prettyprinter, especially for the global variables, but also the derived types (struct, union, enum). */
121 
122  /* init_p = 0 => no initialization for a variable or no definition
123  for a derived entity (struct, union, maybe enum) */
124 static void add_initialization_expression(int init_p)
125 {
128 }
129 
130 /* The following structures must be stacks because all the related
131  entities are in recursive structures. Since there are not stacks
132  with basic types such as integer or logical domain, I used
133  basic_domain to avoid creating special stacks for FormalStack,
134  OffsetStack, ... */
135 
136 static void PushFunction(entity f)
137 {
138  stack_push((char *) f, FunctionStack);
139 }
140 
141 static void PopFunction()
142 {
144  }
145 
147 {
149  return f;
150 }
151 
152  // FI: I assumed it was the current context; in fact the current
153  // context is rather the top of the ContextStack. I tried to maintain
154  // as an invariant ycontext==stack_head(ContextStack). But this is not
155  // be a good idea as it interferes with cyacc.y use of ycontext and
156  // ContextStack
158 
159 ␌
160 /* FI: these two variables are used in conjunction with comma
161  expressions. I do not remember why they are needed. They sometimes
162  stay set although they have become useless. The parser used not to
163  reset them systematically, which caused problems with
164  io_intrinsics*.c */
167 
168 /* we don't want an expression comment with new lines, it is disgracefull */
170 {
172  /* Too bad. This should not happen, but it happens with comma
173  expressions in header files */
176  }
177 
179 }
180 
181 /* flushes all expression comments and add them to statement s */
185  char *tmp = statement_comments(s);
187  free(tmp);
189  }
190  else
195  }
196  return s;
197 }
198 
199 
200 /* after a while (crocodile) expression comments are pushed into a list that
201  is purged upon call to add_expression_comment */
207  }
209 }
210 /* flushes all statement comments and add them to statement s */
212  s=flush_expression_comment(s); // should not be necessary
214  pips_assert("not on a block",!statement_block_p(s));
218  char *tmp = statement_comments(s);
219  asprintf(&statement_comments(s),"%s%s",statement_comments(s), comments);
220  free(tmp);
221  free(comments);
222  }
223  else
224  statement_comments(s) = comments;
228  }
229  return s;
230 }
231 ␌
232 
233 /* The scope is moved up the scope tree and a NULL is return when
234  there are no more scope to explore. */
235 string pop_block_scope(string old_scope)
236 {
237  string new_scope = old_scope;
238  string last_scope = string_undefined;
239 
240  pips_debug(8, "old_scope = \"%s\"\n", old_scope);
241  pips_assert("old_scope is a scope", string_block_scope_p(old_scope));
242 
243  if(strlen(old_scope)>0) {
244  /* get rid of last block separator */
245  new_scope[strlen(new_scope)-1] = '\0';
246  last_scope = strrchr(new_scope, BLOCK_SEP_CHAR);
247 
248  if(last_scope==NULL)
249  *new_scope = '\0';
250  else
251  *(last_scope+1) = '\0';
252  }
253  else
254  new_scope = NULL;
255 
256  if(new_scope!=NULL) {
257  pips_debug(8, "new_scope = \"%s\"\n", new_scope);
258  pips_assert("new_scope is a scope", string_block_scope_p(new_scope));
259  }
260  else {
261  pips_debug(8, "new_scope = NULL\n");
262  }
263 
264  return new_scope;
265 }
266 
267 /* Allocate a new string containing only block scope information */
268 string scope_to_block_scope(string full_scope)
269 {
270  string l_scope = strrchr(full_scope, BLOCK_SEP_CHAR);
271  string f_scope = strchr(full_scope, MODULE_SEP);
272  string block_scope = string_undefined;
273 
274  pips_debug(8, "full_scope = \"%s\"\n", full_scope);
275 
276  if(f_scope==NULL)
277  f_scope = full_scope;
278  else
279  f_scope++;
280 
281  if(l_scope==NULL)
282  block_scope = strdup("");
283  else
284  block_scope = gen_strndup0(f_scope, (unsigned) (l_scope-f_scope+1));
285 
286  pips_debug(8, "f_scope = \"%s\", l_scope = \"%s\"\n", f_scope, l_scope);
287  pips_assert("block_scope is a scope", string_block_scope_p(block_scope));
288 
289  return block_scope;
290 }
291 
293 {
297  NIL,
298  false,
299  false);
300  pips_debug(8, "New default context %p\n", c);
301  return c;
302 }
303 
304 static int C_scope_identifier = -2;
305 
306 void InitScope()
307 {
308  C_scope_identifier = -1;
309 }
310 
311 static void EnterScope()
312 {
314  string cs = string_undefined;
315 
316  push_new_c_parser_scope(); // For the lexical analyzer
317 
318  pips_assert("C_scope_identifier has been initialized", C_scope_identifier>-2);
319 
322  pips_assert("The current context is defined", !c_parser_context_undefined_p(c));
323  pips_assert("The current context scope is defined",
325  && c_parser_context_scope(c)!=NULL);
326  pips_assert("The current context only contains scope information",
327  //type_undefined_p(c_parser_context_type(c)) &&
330  //&& !c_parser_context_typedef(c)
331  //&& !c_parser_context_static(c)
332  );
333  cs = c_parser_context_scope(c);
334  pips_assert("scope contains only block scope information", string_block_scope_p(cs));
335  }
336  else
337  cs = "";
338 
339  // Add scope information if any
341  // A scope is needed right away to distinguish between formal
342  // parameters and local variables. See
343  // Validation/C_syntax/block_scope01.c, identifier x in function foo
344  if(C_scope_identifier>=0) {
345  string ns = int2a(C_scope_identifier);
346 
347  char * stf = c_parser_context_scope(nc);
349  free(stf);
350  free(ns);
351  }
352  else {
353  char * stf = c_parser_context_scope(nc);
354  c_parser_context_scope(nc) = strdup(cs);
355  free(stf);
356  }
357 
358  stack_push((char *) nc, ContextStack);
359  //ycontext = nc;
360  //pips_assert("ycontext is consistant with stack_head(ContextStack)",
361  // ycontext==stack_head(ContextStack));
362  pips_debug(8, "New block scope string: \"%s\" for context %p\n",
363  c_parser_context_scope(nc), nc);
364 }
365 
367 {
368  return stack_size(ContextStack);
369 }
370 
371 string GetScope()
372 {
373  string s = "";
374 
375  /* FI: I do not know if it wouldn't be better to initialize the
376  ContextStack with a default context before calling the C
377  parser */
380 
381  s = c_parser_context_scope(c);
382  }
383 
384  return s;
385 }
386 
388 {
389  string s = "";
390 
393 
394  s = c_parser_context_scope(c);
395  }
396 
397  return s;
398 }
399 
400 void ExitScope()
401 {
403 
405 
406  pips_assert("The current context is defined", !c_parser_context_undefined_p(c));
407  pips_assert("The current context scope is defined",
409  && c_parser_context_scope(c)!=NULL);
410  pips_assert("The current context only contains scope information",
411  //type_undefined_p(c_parser_context_type(c)) &&
414  //&& !c_parser_context_typedef(c)
415  //&& !c_parser_context_static(c)
416  );
417  pips_debug(8, "Exiting context scope \"\%s\" in context %p\n",
418  c_parser_context_scope(c), c);
420  (void) stack_pop(ContextStack);
423  //pips_assert("ycontext is consistant with stack_head(ContextStack)",
424  // ycontext==stack_head(ContextStack));
425  pips_debug(8, "Back to context scope \"\%s\" in context %p\n",
426  c_parser_context_scope(oc), oc);
427  }
428  else {
429  // ycontext = c_parser_context_undefined;
430  pips_debug(8, "Back to undefined context scope\n");
431  }
432 }
433 
435 {
436  stack_push((char *) c, ContextStack);
437  pips_debug(8, "Context %p with scope \"%s\" is put in stack position %d\n",
439 }
440 
442 {
444 
445  pips_debug(8, "Context %p with scope \"%s\" is popped from stack position %d\n",
447  (void)stack_pop(ContextStack);
449  pips_debug(8, "context stack is now empty\n");
450  }
451  else {
453  pips_debug(8, "Context %p with scope \"%s\" is top of stack at position %d\n",
455  }
456 }
457 
459 {
460 
462 
465  else
466  // Should we return a default context?
467  // Not really compatible with a clean memory allocation policy
468  pips_internal_error("No current context");
469 
470  pips_debug(8, "Context %p is obtained from stack position %d\n",
472 
473  return c;
474 }
475 
477 {
480  pips_debug(8, "Context copy %p with scope \"%s\" is obtained from context %p with scope \"%s\" at stack position %d\n",
481  cc, c_parser_context_scope(cc),
484  return cc;
485 }
486 /* Declaration counter
487  *
488  * It is used to declare the formal parameters in function declarations.
489  */
490  static int declaration_counter = 0;
491 
493  {
495  }
496 
498  {
499  return declaration_counter;
500  }
501 ␌
502  /* Each scope in the current unit has its own number.
503  *
504  * The scope management in the C parser is the same as in the C preprocessor.
505  *
506  * The scope numbers defined here are used by the C parser lexical
507  * analyzer to disambiguate between named types and variables, but
508  * different scopes are defined for the internal representation.
509  */
510 #define SCOPE_UNDEFINED (-1)
513 
515  {
517  pips_assert("The stack is undefined",
520  }
521 
523  {
528  }
529  else {
530  // pips_internal_error? Could be a bad input C file...
531  pips_user_warning("Parser scope stack is not empty.\n");
532  }
533  }
535  return;
536  }
537 
538  /* To be used by an error handler */
540  {
544  }
546  return;
547  }
548 
550  {
552  string sn = string_undefined;
553  (void) asprintf(&sn, "%d", c_parser_scope_number);
554  stack_push((void *) sn, c_parser_scope_stack);
555  return;
556  }
557 
559  {
561  return;
562  }
563 
565 {
567 }
568 
570  {
571  string sn = string_undefined;
573  // We are at the global level: no scope has been entered yet
574  sn = "";
575  }
576  else
578  return sn;
579  }
580 
582  {
583  string sn = (string) stack_nth(c_parser_scope_stack, n);
584  return sn;
585  }
586 
588  {
590  return n;
591  }
592 ␌
593 /* When struct and union declarations are nested, the rules cannot
594  return information about the internal declarations because they
595  must return type information. Hence internal declarations must be
596  recorded and re-used when the final continue/declaration statement
597  is generated. In order not to confuse the prettyprinter, they must
598  appear first in the declaration list, that is in the innermost to
599  outermost order. */
600 
602 
604 {
607  CONS(ENTITY, de, NIL));
608 }
609 
611 {
613  /* The list spine is going to be reused by the caller. No need to
614  free. */
616  return l;
617 }
618 
620 {
624  }
625 }
626 
627 #line 628 "cyacc.tab.c"
628 
629 # ifndef YY_CAST
630 # ifdef __cplusplus
631 # define YY_CAST(Type, Val) static_cast<Type> (Val)
632 # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val)
633 # else
634 # define YY_CAST(Type, Val) ((Type) (Val))
635 # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val))
636 # endif
637 # endif
638 # ifndef YY_NULLPTR
639 # if defined __cplusplus
640 # if 201103L <= __cplusplus
641 # define YY_NULLPTR nullptr
642 # else
643 # define YY_NULLPTR 0
644 # endif
645 # else
646 # define YY_NULLPTR ((void*)0)
647 # endif
648 # endif
649 
650 #include "cyacc.tab.h"
651 /* Symbol kind. */
653 {
655  YYSYMBOL_YYEOF = 0, /* "end of file" */
656  YYSYMBOL_YYerror = 1, /* error */
657  YYSYMBOL_YYUNDEF = 2, /* "invalid token" */
658  YYSYMBOL_TK_IDENT = 3, /* TK_IDENT */
659  YYSYMBOL_TK_CHARCON = 4, /* TK_CHARCON */
660  YYSYMBOL_TK_INTCON = 5, /* TK_INTCON */
661  YYSYMBOL_TK_FLOATCON = 6, /* TK_FLOATCON */
662  YYSYMBOL_TK_NAMED_TYPE = 7, /* TK_NAMED_TYPE */
663  YYSYMBOL_TK_STRINGCON = 8, /* TK_STRINGCON */
664  YYSYMBOL_TK_WSTRINGCON = 9, /* TK_WSTRINGCON */
665  YYSYMBOL_TK_EOF = 10, /* TK_EOF */
666  YYSYMBOL_TK_CHAR = 11, /* TK_CHAR */
667  YYSYMBOL_TK_INT = 12, /* TK_INT */
668  YYSYMBOL_TK_INT128 = 13, /* TK_INT128 */
669  YYSYMBOL_TK_UINT128 = 14, /* TK_UINT128 */
670  YYSYMBOL_TK_DOUBLE = 15, /* TK_DOUBLE */
671  YYSYMBOL_TK_FLOAT = 16, /* TK_FLOAT */
672  YYSYMBOL_TK_VOID = 17, /* TK_VOID */
673  YYSYMBOL_TK_COMPLEX = 18, /* TK_COMPLEX */
674  YYSYMBOL_TK_ENUM = 19, /* TK_ENUM */
675  YYSYMBOL_TK_STRUCT = 20, /* TK_STRUCT */
676  YYSYMBOL_TK_TYPEDEF = 21, /* TK_TYPEDEF */
677  YYSYMBOL_TK_UNION = 22, /* TK_UNION */
678  YYSYMBOL_TK_SIGNED = 23, /* TK_SIGNED */
679  YYSYMBOL_TK_UNSIGNED = 24, /* TK_UNSIGNED */
680  YYSYMBOL_TK_LONG = 25, /* TK_LONG */
681  YYSYMBOL_TK_SHORT = 26, /* TK_SHORT */
682  YYSYMBOL_TK_VOLATILE = 27, /* TK_VOLATILE */
683  YYSYMBOL_TK_EXTERN = 28, /* TK_EXTERN */
684  YYSYMBOL_TK_STATIC = 29, /* TK_STATIC */
685  YYSYMBOL_TK_STATIC_DIMENSION = 30, /* TK_STATIC_DIMENSION */
686  YYSYMBOL_TK_CONST = 31, /* TK_CONST */
687  YYSYMBOL_TK_RESTRICT = 32, /* TK_RESTRICT */
688  YYSYMBOL_TK_AUTO = 33, /* TK_AUTO */
689  YYSYMBOL_TK_REGISTER = 34, /* TK_REGISTER */
690  YYSYMBOL_TK_THREAD = 35, /* TK_THREAD */
691  YYSYMBOL_TK_SIZEOF = 36, /* TK_SIZEOF */
692  YYSYMBOL_TK_ALIGNOF = 37, /* TK_ALIGNOF */
693  YYSYMBOL_TK_EQ = 38, /* TK_EQ */
694  YYSYMBOL_TK_PLUS_EQ = 39, /* TK_PLUS_EQ */
695  YYSYMBOL_TK_MINUS_EQ = 40, /* TK_MINUS_EQ */
696  YYSYMBOL_TK_STAR_EQ = 41, /* TK_STAR_EQ */
697  YYSYMBOL_TK_SLASH_EQ = 42, /* TK_SLASH_EQ */
698  YYSYMBOL_TK_PERCENT_EQ = 43, /* TK_PERCENT_EQ */
699  YYSYMBOL_TK_AND_EQ = 44, /* TK_AND_EQ */
700  YYSYMBOL_TK_PIPE_EQ = 45, /* TK_PIPE_EQ */
701  YYSYMBOL_TK_CIRC_EQ = 46, /* TK_CIRC_EQ */
702  YYSYMBOL_TK_INF_INF_EQ = 47, /* TK_INF_INF_EQ */
703  YYSYMBOL_TK_SUP_SUP_EQ = 48, /* TK_SUP_SUP_EQ */
704  YYSYMBOL_TK_ARROW = 49, /* TK_ARROW */
705  YYSYMBOL_TK_DOT = 50, /* TK_DOT */
706  YYSYMBOL_TK_EQ_EQ = 51, /* TK_EQ_EQ */
707  YYSYMBOL_TK_EXCLAM_EQ = 52, /* TK_EXCLAM_EQ */
708  YYSYMBOL_TK_INF = 53, /* TK_INF */
709  YYSYMBOL_TK_SUP = 54, /* TK_SUP */
710  YYSYMBOL_TK_INF_EQ = 55, /* TK_INF_EQ */
711  YYSYMBOL_TK_SUP_EQ = 56, /* TK_SUP_EQ */
712  YYSYMBOL_TK_PLUS = 57, /* TK_PLUS */
713  YYSYMBOL_TK_MINUS = 58, /* TK_MINUS */
714  YYSYMBOL_TK_STAR = 59, /* TK_STAR */
715  YYSYMBOL_TK_SLASH = 60, /* TK_SLASH */
716  YYSYMBOL_TK_PERCENT = 61, /* TK_PERCENT */
717  YYSYMBOL_TK_TILDE = 62, /* TK_TILDE */
718  YYSYMBOL_TK_AND = 63, /* TK_AND */
719  YYSYMBOL_TK_PIPE = 64, /* TK_PIPE */
720  YYSYMBOL_TK_CIRC = 65, /* TK_CIRC */
721  YYSYMBOL_TK_EXCLAM = 66, /* TK_EXCLAM */
722  YYSYMBOL_TK_AND_AND = 67, /* TK_AND_AND */
723  YYSYMBOL_TK_PIPE_PIPE = 68, /* TK_PIPE_PIPE */
724  YYSYMBOL_TK_INF_INF = 69, /* TK_INF_INF */
725  YYSYMBOL_TK_SUP_SUP = 70, /* TK_SUP_SUP */
726  YYSYMBOL_TK_PLUS_PLUS = 71, /* TK_PLUS_PLUS */
727  YYSYMBOL_TK_MINUS_MINUS = 72, /* TK_MINUS_MINUS */
728  YYSYMBOL_TK_RPAREN = 73, /* TK_RPAREN */
729  YYSYMBOL_TK_LPAREN = 74, /* TK_LPAREN */
730  YYSYMBOL_TK_RBRACE = 75, /* TK_RBRACE */
731  YYSYMBOL_TK_LBRACE = 76, /* TK_LBRACE */
732  YYSYMBOL_TK_LBRACKET = 77, /* TK_LBRACKET */
733  YYSYMBOL_TK_RBRACKET = 78, /* TK_RBRACKET */
734  YYSYMBOL_TK_COLON = 79, /* TK_COLON */
735  YYSYMBOL_TK_SEMICOLON = 80, /* TK_SEMICOLON */
736  YYSYMBOL_TK_COMMA = 81, /* TK_COMMA */
737  YYSYMBOL_TK_ELLIPSIS = 82, /* TK_ELLIPSIS */
738  YYSYMBOL_TK_QUEST = 83, /* TK_QUEST */
739  YYSYMBOL_TK_BREAK = 84, /* TK_BREAK */
740  YYSYMBOL_TK_CONTINUE = 85, /* TK_CONTINUE */
741  YYSYMBOL_TK_GOTO = 86, /* TK_GOTO */
742  YYSYMBOL_TK_RETURN = 87, /* TK_RETURN */
743  YYSYMBOL_TK_SWITCH = 88, /* TK_SWITCH */
744  YYSYMBOL_TK_CASE = 89, /* TK_CASE */
745  YYSYMBOL_TK_DEFAULT = 90, /* TK_DEFAULT */
746  YYSYMBOL_TK_WHILE = 91, /* TK_WHILE */
747  YYSYMBOL_TK_DO = 92, /* TK_DO */
748  YYSYMBOL_TK_FOR = 93, /* TK_FOR */
749  YYSYMBOL_TK_IF = 94, /* TK_IF */
750  YYSYMBOL_TK_ELSE = 95, /* TK_ELSE */
751  YYSYMBOL_TK_ATTRIBUTE = 96, /* TK_ATTRIBUTE */
752  YYSYMBOL_TK_INLINE = 97, /* TK_INLINE */
753  YYSYMBOL_TK_ASM = 98, /* TK_ASM */
754  YYSYMBOL_TK_TYPEOF = 99, /* TK_TYPEOF */
755  YYSYMBOL_TK_FUNCTION__ = 100, /* TK_FUNCTION__ */
756  YYSYMBOL_TK_PRETTY_FUNCTION__ = 101, /* TK_PRETTY_FUNCTION__ */
757  YYSYMBOL_TK_LABEL__ = 102, /* TK_LABEL__ */
758  YYSYMBOL_TK_BUILTIN_VA_ARG = 103, /* TK_BUILTIN_VA_ARG */
759  YYSYMBOL_TK_BUILTIN_VA_LIST = 104, /* TK_BUILTIN_VA_LIST */
760  YYSYMBOL_TK_BLOCKATTRIBUTE = 105, /* TK_BLOCKATTRIBUTE */
761  YYSYMBOL_TK_DECLSPEC = 106, /* TK_DECLSPEC */
762  YYSYMBOL_TK_MSASM = 107, /* TK_MSASM */
763  YYSYMBOL_TK_MSATTR = 108, /* TK_MSATTR */
764  YYSYMBOL_TK_PRAGMA = 109, /* TK_PRAGMA */
765  YYSYMBOL_TK__Pragma = 110, /* TK__Pragma */
766  YYSYMBOL_TK_AT_TRANSFORM = 111, /* TK_AT_TRANSFORM */
767  YYSYMBOL_TK_AT_TRANSFORMEXPR = 112, /* TK_AT_TRANSFORMEXPR */
768  YYSYMBOL_TK_AT_SPECIFIER = 113, /* TK_AT_SPECIFIER */
769  YYSYMBOL_TK_AT_EXPR = 114, /* TK_AT_EXPR */
770  YYSYMBOL_TK_AT_NAME = 115, /* TK_AT_NAME */
771  YYSYMBOL_TK_COMPLEXCON = 116, /* TK_COMPLEXCON */
772  YYSYMBOL_TK_CAST = 117, /* TK_CAST */
773  YYSYMBOL_TK_ADDROF = 118, /* TK_ADDROF */
774  YYSYMBOL_YYACCEPT = 119, /* $accept */
775  YYSYMBOL_interpret = 120, /* interpret */
776  YYSYMBOL_file = 121, /* file */
777  YYSYMBOL_globals = 122, /* globals */
778  YYSYMBOL_123_1 = 123, /* $@1 */
779  YYSYMBOL_location = 124, /* location */
780  YYSYMBOL_global = 125, /* global */
781  YYSYMBOL_126_2 = 126, /* $@2 */
782  YYSYMBOL_id_or_typename = 127, /* id_or_typename */
783  YYSYMBOL_maybecomma = 128, /* maybecomma */
784  YYSYMBOL_expression = 129, /* expression */
785  YYSYMBOL_constant = 130, /* constant */
786  YYSYMBOL_string_constant = 131, /* string_constant */
787  YYSYMBOL_one_string_constant = 132, /* one_string_constant */
788  YYSYMBOL_string_list = 133, /* string_list */
789  YYSYMBOL_wstring_list = 134, /* wstring_list */
790  YYSYMBOL_one_string = 135, /* one_string */
791  YYSYMBOL_init_expression = 136, /* init_expression */
792  YYSYMBOL_initializer_list = 137, /* initializer_list */
793  YYSYMBOL_initializer_list_opt = 138, /* initializer_list_opt */
794  YYSYMBOL_initializer = 139, /* initializer */
795  YYSYMBOL_eq_opt = 140, /* eq_opt */
796  YYSYMBOL_init_designators = 141, /* init_designators */
797  YYSYMBOL_init_designators_opt = 142, /* init_designators_opt */
798  YYSYMBOL_gcc_init_designators = 143, /* gcc_init_designators */
799  YYSYMBOL_arguments = 144, /* arguments */
800  YYSYMBOL_opt_expression = 145, /* opt_expression */
801  YYSYMBOL_comma_expression = 146, /* comma_expression */
802  YYSYMBOL_comma_expression_opt = 147, /* comma_expression_opt */
803  YYSYMBOL_statement_paren_comma_expression = 148, /* statement_paren_comma_expression */
804  YYSYMBOL_paren_comma_expression = 149, /* paren_comma_expression */
805  YYSYMBOL_bracket_comma_expression = 150, /* bracket_comma_expression */
806  YYSYMBOL_statements_inside_block = 151, /* statements_inside_block */
807  YYSYMBOL_152_3 = 152, /* $@3 */
808  YYSYMBOL_block = 153, /* block */
809  YYSYMBOL_block_attrs = 154, /* block_attrs */
810  YYSYMBOL_statement_list = 155, /* statement_list */
811  YYSYMBOL_local_labels = 156, /* local_labels */
812  YYSYMBOL_local_label_names = 157, /* local_label_names */
813  YYSYMBOL_label = 158, /* label */
814  YYSYMBOL_pragma = 159, /* pragma */
815  YYSYMBOL_pragmas = 160, /* pragmas */
816  YYSYMBOL_statement = 161, /* statement */
817  YYSYMBOL_statement_without_pragma = 162, /* statement_without_pragma */
818  YYSYMBOL_163_4 = 163, /* $@4 */
819  YYSYMBOL_164_5 = 164, /* $@5 */
820  YYSYMBOL_165_6 = 165, /* $@6 */
821  YYSYMBOL_166_7 = 166, /* $@7 */
822  YYSYMBOL_167_8 = 167, /* $@8 */
823  YYSYMBOL_168_9 = 168, /* $@9 */
824  YYSYMBOL_169_10 = 169, /* $@10 */
825  YYSYMBOL_for_clause = 170, /* for_clause */
826  YYSYMBOL_171_11 = 171, /* $@11 */
827  YYSYMBOL_declaration = 172, /* declaration */
828  YYSYMBOL_init_declarator_list = 173, /* init_declarator_list */
829  YYSYMBOL_init_declarator = 174, /* init_declarator */
830  YYSYMBOL_decl_spec_list = 175, /* decl_spec_list */
831  YYSYMBOL_176_12 = 176, /* $@12 */
832  YYSYMBOL_my_decl_spec_list = 177, /* my_decl_spec_list */
833  YYSYMBOL_decl_spec_list_opt = 178, /* decl_spec_list_opt */
834  YYSYMBOL_decl_spec_list_opt_no_named = 179, /* decl_spec_list_opt_no_named */
835  YYSYMBOL_type_spec = 180, /* type_spec */
836  YYSYMBOL_181_13 = 181, /* $@13 */
837  YYSYMBOL_182_14 = 182, /* $@14 */
838  YYSYMBOL_183_15 = 183, /* $@15 */
839  YYSYMBOL_184_16 = 184, /* $@16 */
840  YYSYMBOL_struct_decl_list = 185, /* struct_decl_list */
841  YYSYMBOL_186_17 = 186, /* $@17 */
842  YYSYMBOL_field_decl_list = 187, /* field_decl_list */
843  YYSYMBOL_field_decl = 188, /* field_decl */
844  YYSYMBOL_enum_list = 189, /* enum_list */
845  YYSYMBOL_enumerator = 190, /* enumerator */
846  YYSYMBOL_declarator = 191, /* declarator */
847  YYSYMBOL_direct_decl = 192, /* direct_decl */
848  YYSYMBOL_193_18 = 193, /* $@18 */
849  YYSYMBOL_parameter_list_startscope = 194, /* parameter_list_startscope */
850  YYSYMBOL_rest_par_list = 195, /* rest_par_list */
851  YYSYMBOL_rest_par_list1 = 196, /* rest_par_list1 */
852  YYSYMBOL_197_19 = 197, /* $@19 */
853  YYSYMBOL_198_20 = 198, /* $@20 */
854  YYSYMBOL_parameter_decl = 199, /* parameter_decl */
855  YYSYMBOL_old_proto_decl = 200, /* old_proto_decl */
856  YYSYMBOL_direct_old_proto_decl = 201, /* direct_old_proto_decl */
857  YYSYMBOL_202_21 = 202, /* $@21 */
858  YYSYMBOL_old_parameter_list_ne = 203, /* old_parameter_list_ne */
859  YYSYMBOL_old_pardef_list = 204, /* old_pardef_list */
860  YYSYMBOL_old_pardef = 205, /* old_pardef */
861  YYSYMBOL_pointer = 206, /* pointer */
862  YYSYMBOL_pointer_opt = 207, /* pointer_opt */
863  YYSYMBOL_type_name = 208, /* type_name */
864  YYSYMBOL_abstract_decl = 209, /* abstract_decl */
865  YYSYMBOL_abs_direct_decl = 210, /* abs_direct_decl */
866  YYSYMBOL_211_22 = 211, /* $@22 */
867  YYSYMBOL_abs_direct_decl_opt = 212, /* abs_direct_decl_opt */
868  YYSYMBOL_function_def = 213, /* function_def */
869  YYSYMBOL_214_23 = 214, /* $@23 */
870  YYSYMBOL_function_def_start = 215, /* function_def_start */
871  YYSYMBOL_216_24 = 216, /* $@24 */
872  YYSYMBOL_217_25 = 217, /* $@25 */
873  YYSYMBOL_attributes = 218, /* attributes */
874  YYSYMBOL_attributes_with_asm = 219, /* attributes_with_asm */
875  YYSYMBOL_attribute = 220, /* attribute */
876  YYSYMBOL_asmattr = 221, /* asmattr */
877  YYSYMBOL_asmoutputs = 222, /* asmoutputs */
878  YYSYMBOL_asmoperands = 223, /* asmoperands */
879  YYSYMBOL_asmoperandsne = 224, /* asmoperandsne */
880  YYSYMBOL_asmoperand = 225, /* asmoperand */
881  YYSYMBOL_asminputs = 226, /* asminputs */
882  YYSYMBOL_asmclobber = 227, /* asmclobber */
883  YYSYMBOL_asmcloberlst_ne = 228 /* asmcloberlst_ne */
884 };
885 typedef enum yysymbol_kind_t yysymbol_kind_t;
886 
887 
888 
889 
890 #ifdef short
891 # undef short
892 #endif
893 
894 /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure
895  <limits.h> and (if available) <stdint.h> are included
896  so that the code can choose integer types of a good width. */
897 
898 #ifndef __PTRDIFF_MAX__
899 # include <limits.h> /* INFRINGES ON USER NAME SPACE */
900 # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
901 # include <stdint.h> /* INFRINGES ON USER NAME SPACE */
902 # define YY_STDINT_H
903 # endif
904 #endif
905 
906 /* Narrow types that promote to a signed type and that can represent a
907  signed or unsigned integer of at least N bits. In tables they can
908  save space and decrease cache pressure. Promoting to a signed type
909  helps avoid bugs in integer arithmetic. */
910 
911 #ifdef __INT_LEAST8_MAX__
912 typedef __INT_LEAST8_TYPE__ yytype_int8;
913 #elif defined YY_STDINT_H
914 typedef int_least8_t yytype_int8;
915 #else
916 typedef signed char yytype_int8;
917 #endif
918 
919 #ifdef __INT_LEAST16_MAX__
920 typedef __INT_LEAST16_TYPE__ yytype_int16;
921 #elif defined YY_STDINT_H
923 #else
924 typedef short yytype_int16;
925 #endif
926 
927 /* Work around bug in HP-UX 11.23, which defines these macros
928  incorrectly for preprocessor constants. This workaround can likely
929  be removed in 2023, as HPE has promised support for HP-UX 11.23
930  (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
931  <https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
932 #ifdef __hpux
933 # undef UINT_LEAST8_MAX
934 # undef UINT_LEAST16_MAX
935 # define UINT_LEAST8_MAX 255
936 # define UINT_LEAST16_MAX 65535
937 #endif
938 
939 #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
940 typedef __UINT_LEAST8_TYPE__ yytype_uint8;
941 #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
942  && UINT_LEAST8_MAX <= INT_MAX)
944 #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX
945 typedef unsigned char yytype_uint8;
946 #else
947 typedef short yytype_uint8;
948 #endif
949 
950 #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__
951 typedef __UINT_LEAST16_TYPE__ yytype_uint16;
952 #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \
953  && UINT_LEAST16_MAX <= INT_MAX)
955 #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX
956 typedef unsigned short yytype_uint16;
957 #else
958 typedef int yytype_uint16;
959 #endif
960 
961 #ifndef YYPTRDIFF_T
962 # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__
963 # define YYPTRDIFF_T __PTRDIFF_TYPE__
964 # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__
965 # elif defined PTRDIFF_MAX
966 # ifndef ptrdiff_t
967 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
968 # endif
969 # define YYPTRDIFF_T ptrdiff_t
970 # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX
971 # else
972 # define YYPTRDIFF_T long
973 # define YYPTRDIFF_MAXIMUM LONG_MAX
974 # endif
975 #endif
976 
977 #ifndef YYSIZE_T
978 # ifdef __SIZE_TYPE__
979 # define YYSIZE_T __SIZE_TYPE__
980 # elif defined size_t
981 # define YYSIZE_T size_t
982 # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__
983 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */
984 # define YYSIZE_T size_t
985 # else
986 # define YYSIZE_T unsigned
987 # endif
988 #endif
989 
990 #define YYSIZE_MAXIMUM \
991  YY_CAST (YYPTRDIFF_T, \
992  (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \
993  ? YYPTRDIFF_MAXIMUM \
994  : YY_CAST (YYSIZE_T, -1)))
995 
996 #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X))
997 
998 
999 /* Stored state numbers (used for stacks). */
1001 
1002 /* State numbers in computations. */
1003 typedef int yy_state_fast_t;
1004 
1005 #ifndef YY_
1006 # if defined YYENABLE_NLS && YYENABLE_NLS
1007 # if ENABLE_NLS
1008 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */
1009 # define YY_(Msgid) dgettext ("bison-runtime", Msgid)
1010 # endif
1011 # endif
1012 # ifndef YY_
1013 # define YY_(Msgid) Msgid
1014 # endif
1015 #endif
1016 
1017 
1018 #ifndef YY_ATTRIBUTE_PURE
1019 # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__)
1020 # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__))
1021 # else
1022 # define YY_ATTRIBUTE_PURE
1023 # endif
1024 #endif
1025 
1026 #ifndef YY_ATTRIBUTE_UNUSED
1027 # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__)
1028 # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
1029 # else
1030 # define YY_ATTRIBUTE_UNUSED
1031 # endif
1032 #endif
1033 
1034 /* Suppress unused-variable warnings by "using" E. */
1035 #if ! defined lint || defined __GNUC__
1036 # define YY_USE(E) ((void) (E))
1037 #else
1038 # define YY_USE(E) /* empty */
1039 #endif
1040 
1041 /* Suppress an incorrect diagnostic about yylval being uninitialized. */
1042 #if defined __GNUC__ && ! defined __ICC && 406 <= __GNUC__ * 100 + __GNUC_MINOR__
1043 # if __GNUC__ * 100 + __GNUC_MINOR__ < 407
1044 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1045  _Pragma ("GCC diagnostic push") \
1046  _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")
1047 # else
1048 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
1049  _Pragma ("GCC diagnostic push") \
1050  _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \
1051  _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
1052 # endif
1053 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \
1054  _Pragma ("GCC diagnostic pop")
1055 #else
1056 # define YY_INITIAL_VALUE(Value) Value
1057 #endif
1058 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1059 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
1060 # define YY_IGNORE_MAYBE_UNINITIALIZED_END
1061 #endif
1062 #ifndef YY_INITIAL_VALUE
1063 # define YY_INITIAL_VALUE(Value) /* Nothing. */
1064 #endif
1065 
1066 #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__
1067 # define YY_IGNORE_USELESS_CAST_BEGIN \
1068  _Pragma ("GCC diagnostic push") \
1069  _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"")
1070 # define YY_IGNORE_USELESS_CAST_END \
1071  _Pragma ("GCC diagnostic pop")
1072 #endif
1073 #ifndef YY_IGNORE_USELESS_CAST_BEGIN
1074 # define YY_IGNORE_USELESS_CAST_BEGIN
1075 # define YY_IGNORE_USELESS_CAST_END
1076 #endif
1077 
1078 
1079 #define YY_ASSERT(E) ((void) (0 && (E)))
1080 
1081 #if !defined yyoverflow
1082 
1083 /* The parser invokes alloca or malloc; define the necessary symbols. */
1084 
1085 # ifdef YYSTACK_USE_ALLOCA
1086 # if YYSTACK_USE_ALLOCA
1087 # ifdef __GNUC__
1088 # define YYSTACK_ALLOC __builtin_alloca
1089 # elif defined __BUILTIN_VA_ARG_INCR
1090 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */
1091 # elif defined _AIX
1092 # define YYSTACK_ALLOC __alloca
1093 # elif defined _MSC_VER
1094 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */
1095 # define alloca _alloca
1096 # else
1097 # define YYSTACK_ALLOC alloca
1098 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
1099 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1100  /* Use EXIT_SUCCESS as a witness for stdlib.h. */
1101 # ifndef EXIT_SUCCESS
1102 # define EXIT_SUCCESS 0
1103 # endif
1104 # endif
1105 # endif
1106 # endif
1107 # endif
1108 
1109 # ifdef YYSTACK_ALLOC
1110  /* Pacify GCC's 'empty if-body' warning. */
1111 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
1112 # ifndef YYSTACK_ALLOC_MAXIMUM
1113  /* The OS might guarantee only one guard page at the bottom of the stack,
1114  and a page size can be as small as 4096 bytes. So we cannot safely
1115  invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
1116  to allow for a few compiler-allocated temporary stack slots. */
1117 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
1118 # endif
1119 # else
1120 # define YYSTACK_ALLOC YYMALLOC
1121 # define YYSTACK_FREE YYFREE
1122 # ifndef YYSTACK_ALLOC_MAXIMUM
1123 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
1124 # endif
1125 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
1126  && ! ((defined YYMALLOC || defined malloc) \
1127  && (defined YYFREE || defined free)))
1128 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
1129 # ifndef EXIT_SUCCESS
1130 # define EXIT_SUCCESS 0
1131 # endif
1132 # endif
1133 # ifndef YYMALLOC
1134 # define YYMALLOC malloc
1135 # if ! defined malloc && ! defined EXIT_SUCCESS
1136 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
1137 # endif
1138 # endif
1139 # ifndef YYFREE
1140 # define YYFREE free
1141 # if ! defined free && ! defined EXIT_SUCCESS
1142 void free (void *); /* INFRINGES ON USER NAME SPACE */
1143 # endif
1144 # endif
1145 # endif
1146 #endif /* !defined yyoverflow */
1147 
1148 #if (! defined yyoverflow \
1149  && (! defined __cplusplus \
1150  || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
1151 
1152 /* A type that is properly aligned for any stack member. */
1153 union yyalloc
1154 {
1157 };
1158 
1159 /* The size of the maximum gap between one aligned stack and the next. */
1160 # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1)
1161 
1162 /* The size of an array large to enough to hold all stacks, each with
1163  N elements. */
1164 # define YYSTACK_BYTES(N) \
1165  ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \
1166  + YYSTACK_GAP_MAXIMUM)
1167 
1168 # define YYCOPY_NEEDED 1
1169 
1170 /* Relocate STACK from its old location to the new one. The
1171  local variables YYSIZE and YYSTACKSIZE give the old and new number of
1172  elements in the stack, and YYPTR gives the new location of the
1173  stack. Advance YYPTR to a properly aligned location for the next
1174  stack. */
1175 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
1176  do \
1177  { \
1178  YYPTRDIFF_T yynewbytes; \
1179  YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
1180  Stack = &yyptr->Stack_alloc; \
1181  yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \
1182  yyptr += yynewbytes / YYSIZEOF (*yyptr); \
1183  } \
1184  while (0)
1185 
1186 #endif
1187 
1188 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
1189 /* Copy COUNT objects from SRC to DST. The source and destination do
1190  not overlap. */
1191 # ifndef YYCOPY
1192 # if defined __GNUC__ && 1 < __GNUC__
1193 # define YYCOPY(Dst, Src, Count) \
1194  __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src)))
1195 # else
1196 # define YYCOPY(Dst, Src, Count) \
1197  do \
1198  { \
1199  YYPTRDIFF_T yyi; \
1200  for (yyi = 0; yyi < (Count); yyi++) \
1201  (Dst)[yyi] = (Src)[yyi]; \
1202  } \
1203  while (0)
1204 # endif
1205 # endif
1206 #endif /* !YYCOPY_NEEDED */
1207 
1208 /* YYFINAL -- State number of the termination state. */
1209 #define YYFINAL 7
1210 /* YYLAST -- Last index in YYTABLE. */
1211 #define YYLAST 3204
1212 
1213 /* YYNTOKENS -- Number of terminals. */
1214 #define YYNTOKENS 119
1215 /* YYNNTS -- Number of nonterminals. */
1216 #define YYNNTS 110
1217 /* YYNRULES -- Number of rules. */
1218 #define YYNRULES 324
1219 /* YYNSTATES -- Number of states. */
1220 #define YYNSTATES 597
1221 
1222 /* YYMAXUTOK -- Last valid token kind. */
1223 #define YYMAXUTOK 373
1224 
1225 
1226 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
1227  as returned by yylex, with out-of-bounds checking. */
1228 #define YYTRANSLATE(YYX) \
1229  (0 <= (YYX) && (YYX) <= YYMAXUTOK \
1230  ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \
1231  : YYSYMBOL_YYUNDEF)
1232 
1233 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
1234  as returned by yylex. */
1235 static const yytype_int8 yytranslate[] =
1236 {
1237  0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1238  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1239  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1240  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1241  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1242  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1243  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1244  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1245  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1246  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1247  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1248  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1249  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1250  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1251  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1252  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1253  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1254  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1255  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1256  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1257  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1258  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1259  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1260  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1261  2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
1262  2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
1263  5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
1264  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1265  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
1266  35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
1267  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
1268  55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
1269  65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
1270  75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
1271  85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
1272  95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
1273  105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
1274  115, 116, 117, 118
1275 };
1276 
1277 #if YYDEBUG
1278 /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
1279 static const yytype_int16 yyrline[] =
1280 {
1281  0, 775, 775, 777, 815, 816, 816, 901, 915, 919,
1282  920, 921, 926, 940, 939, 1006, 1012, 1017, 1025, 1027,
1283  1029, 1035, 1037, 1043, 1047, 1053, 1057, 1061, 1065, 1069,
1284  1073, 1077, 1081, 1085, 1089, 1093, 1097, 1101, 1105, 1109,
1285  1116, 1121, 1125, 1152, 1156, 1171, 1175, 1179, 1183, 1187,
1286  1191, 1195, 1199, 1203, 1207, 1211, 1215, 1219, 1223, 1227,
1287  1231, 1235, 1239, 1243, 1247, 1251, 1270, 1275, 1280, 1285,
1288  1290, 1295, 1300, 1305, 1310, 1315, 1320, 1325, 1330, 1334,
1289  1341, 1346, 1351, 1358, 1363, 1371, 1381, 1390, 1394, 1398,
1290  1405, 1409, 1413, 1421, 1422, 1424, 1429, 1438, 1445, 1449,
1291  1455, 1456, 1459, 1463, 1467, 1470, 1474, 1479, 1481, 1483,
1292  1487, 1488, 1492, 1499, 1500, 1505, 1507, 1512, 1518, 1524,
1293  1531, 1532, 1536, 1543, 1549, 1557, 1564, 1568, 1578, 1577,
1294  1593, 1598, 1604, 1611, 1612, 1618, 1623, 1627, 1628, 1633,
1295  1634, 1638, 1648, 1656, 1664, 1668, 1676, 1686, 1694, 1707,
1296  1728, 1729, 1751, 1761, 1771, 1777, 1770, 1793, 1792, 1808,
1297  1807, 1826, 1820, 1837, 1848, 1836, 1858, 1869, 1873, 1877,
1298  1881, 1909, 1962, 1966, 1970, 1975, 1979, 1997, 1999, 2008,
1299  2007, 2037, 2088, 2114, 2119, 2126, 2135, 2157, 2157, 2219,
1300  2228, 2250, 2257, 2265, 2273, 2282, 2335, 2341, 2353, 2363,
1301  2368, 2377, 2396, 2402, 2407, 2413, 2419, 2429, 2439, 2449,
1302  2472, 2477, 2483, 2510, 2529, 2547, 2582, 2581, 2618, 2617,
1303  2644, 2671, 2670, 2693, 2692, 2721, 2761, 2776, 2789, 2812,
1304  2816, 2825, 2826, 2857, 2856, 2899, 2906, 2911, 2919, 2951,
1305  2965, 2987, 2993, 2999, 3006, 3031, 3084, 3114, 3181, 3194,
1306  3210, 3215, 3214, 3280, 3288, 3289, 3295, 3297, 3296, 3314,
1307  3313, 3324, 3335, 3347, 3357, 3363, 3373, 3372, 3403, 3407,
1308  3414, 3415, 3424, 3445, 3449, 3453, 3460, 3474, 3475, 3479,
1309  3493, 3503, 3510, 3538, 3546, 3551, 3557, 3556, 3576, 3578,
1310  3597, 3596, 3615, 3627, 3640, 3639, 3672, 3671, 3715, 3716,
1311  3725, 3726, 3728, 3740, 3743, 3747, 3751, 3755, 3871, 3872,
1312  3874, 3880, 3881, 3886, 3887, 3891, 3893, 3897, 3899, 3904,
1313  3905, 3910, 3911, 3915, 3917
1314 };
1315 #endif
1316 
1317 /** Accessing symbol of state STATE. */
1318 #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State])
1319 
1320 #if YYDEBUG || 0
1321 /* The user-facing name of the symbol whose (internal) number is
1322  YYSYMBOL. No bounds checking. */
1323 static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED;
1324 
1325 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
1326  First, the terminals, then, starting at YYNTOKENS, nonterminals. */
1327 static const char *const yytname[] =
1328 {
1329  "\"end of file\"", "error", "\"invalid token\"", "TK_IDENT",
1330  "TK_CHARCON", "TK_INTCON", "TK_FLOATCON", "TK_NAMED_TYPE",
1331  "TK_STRINGCON", "TK_WSTRINGCON", "TK_EOF", "TK_CHAR", "TK_INT",
1332  "TK_INT128", "TK_UINT128", "TK_DOUBLE", "TK_FLOAT", "TK_VOID",
1333  "TK_COMPLEX", "TK_ENUM", "TK_STRUCT", "TK_TYPEDEF", "TK_UNION",
1334  "TK_SIGNED", "TK_UNSIGNED", "TK_LONG", "TK_SHORT", "TK_VOLATILE",
1335  "TK_EXTERN", "TK_STATIC", "TK_STATIC_DIMENSION", "TK_CONST",
1336  "TK_RESTRICT", "TK_AUTO", "TK_REGISTER", "TK_THREAD", "TK_SIZEOF",
1337  "TK_ALIGNOF", "TK_EQ", "TK_PLUS_EQ", "TK_MINUS_EQ", "TK_STAR_EQ",
1338  "TK_SLASH_EQ", "TK_PERCENT_EQ", "TK_AND_EQ", "TK_PIPE_EQ", "TK_CIRC_EQ",
1339  "TK_INF_INF_EQ", "TK_SUP_SUP_EQ", "TK_ARROW", "TK_DOT", "TK_EQ_EQ",
1340  "TK_EXCLAM_EQ", "TK_INF", "TK_SUP", "TK_INF_EQ", "TK_SUP_EQ", "TK_PLUS",
1341  "TK_MINUS", "TK_STAR", "TK_SLASH", "TK_PERCENT", "TK_TILDE", "TK_AND",
1342  "TK_PIPE", "TK_CIRC", "TK_EXCLAM", "TK_AND_AND", "TK_PIPE_PIPE",
1343  "TK_INF_INF", "TK_SUP_SUP", "TK_PLUS_PLUS", "TK_MINUS_MINUS",
1344  "TK_RPAREN", "TK_LPAREN", "TK_RBRACE", "TK_LBRACE", "TK_LBRACKET",
1345  "TK_RBRACKET", "TK_COLON", "TK_SEMICOLON", "TK_COMMA", "TK_ELLIPSIS",
1346  "TK_QUEST", "TK_BREAK", "TK_CONTINUE", "TK_GOTO", "TK_RETURN",
1347  "TK_SWITCH", "TK_CASE", "TK_DEFAULT", "TK_WHILE", "TK_DO", "TK_FOR",
1348  "TK_IF", "TK_ELSE", "TK_ATTRIBUTE", "TK_INLINE", "TK_ASM", "TK_TYPEOF",
1349  "TK_FUNCTION__", "TK_PRETTY_FUNCTION__", "TK_LABEL__",
1350  "TK_BUILTIN_VA_ARG", "TK_BUILTIN_VA_LIST", "TK_BLOCKATTRIBUTE",
1351  "TK_DECLSPEC", "TK_MSASM", "TK_MSATTR", "TK_PRAGMA", "TK__Pragma",
1352  "TK_AT_TRANSFORM", "TK_AT_TRANSFORMEXPR", "TK_AT_SPECIFIER",
1353  "TK_AT_EXPR", "TK_AT_NAME", "TK_COMPLEXCON", "TK_CAST", "TK_ADDROF",
1354  "$accept", "interpret", "file", "globals", "$@1", "location", "global",
1355  "$@2", "id_or_typename", "maybecomma", "expression", "constant",
1356  "string_constant", "one_string_constant", "string_list", "wstring_list",
1357  "one_string", "init_expression", "initializer_list",
1358  "initializer_list_opt", "initializer", "eq_opt", "init_designators",
1359  "init_designators_opt", "gcc_init_designators", "arguments",
1360  "opt_expression", "comma_expression", "comma_expression_opt",
1361  "statement_paren_comma_expression", "paren_comma_expression",
1362  "bracket_comma_expression", "statements_inside_block", "$@3", "block",
1363  "block_attrs", "statement_list", "local_labels", "local_label_names",
1364  "label", "pragma", "pragmas", "statement", "statement_without_pragma",
1365  "$@4", "$@5", "$@6", "$@7", "$@8", "$@9", "$@10", "for_clause", "$@11",
1366  "declaration", "init_declarator_list", "init_declarator",
1367  "decl_spec_list", "$@12", "my_decl_spec_list", "decl_spec_list_opt",
1368  "decl_spec_list_opt_no_named", "type_spec", "$@13", "$@14", "$@15",
1369  "$@16", "struct_decl_list", "$@17", "field_decl_list", "field_decl",
1370  "enum_list", "enumerator", "declarator", "direct_decl", "$@18",
1371  "parameter_list_startscope", "rest_par_list", "rest_par_list1", "$@19",
1372  "$@20", "parameter_decl", "old_proto_decl", "direct_old_proto_decl",
1373  "$@21", "old_parameter_list_ne", "old_pardef_list", "old_pardef",
1374  "pointer", "pointer_opt", "type_name", "abstract_decl",
1375  "abs_direct_decl", "$@22", "abs_direct_decl_opt", "function_def", "$@23",
1376  "function_def_start", "$@24", "$@25", "attributes",
1377  "attributes_with_asm", "attribute", "asmattr", "asmoutputs",
1378  "asmoperands", "asmoperandsne", "asmoperand", "asminputs", "asmclobber",
1379  "asmcloberlst_ne", YY_NULLPTR
1380 };
1381 
1382 static const char *
1384 {
1385  return yytname[yysymbol];
1386 }
1387 #endif
1388 
1389 #define YYPACT_NINF (-445)
1390 
1391 #define yypact_value_is_default(Yyn) \
1392  ((Yyn) == YYPACT_NINF)
1393 
1394 #define YYTABLE_NINF (-299)
1395 
1396 #define yytable_value_is_error(Yyn) \
1397  0
1398 
1399 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
1400  STATE-NUM. */
1401 static const yytype_int16 yypact[] =
1402 {
1403  46, 170, 42, 60, -445, 90, -445, -445, -445, 3,
1404  18, -445, 65, 69, 180, 170, -445, 26, 2435, -445,
1405  -445, 115, -445, 43, 90, 2210, 123, -445, 288, -445,
1406  125, 137, 72, -445, -445, 15, -445, -445, -445, -445,
1407  -445, -445, -445, -445, -445, 22, 114, 2435, 117, -445,
1408  -445, -445, -445, -445, 2435, 2435, -445, -445, -445, 2435,
1409  2435, 2435, 2435, 154, -445, 185, -445, 2538, 2435, 25,
1410  190, 115, -445, 175, -445, -445, -445, 199, 43, -445,
1411  187, -445, -445, -445, -445, -445, 2282, 2300, 2210, 2210,
1412  2210, 2210, 2210, 2210, 276, 2210, 2210, 1150, 207, 208,
1413  -445, 2660, -445, -445, 11, -445, -445, 226, 288, -445,
1414  226, 2062, -445, -445, 288, 214, -445, 273, -445, 287,
1415  218, -445, 222, -445, -445, -445, 230, -445, -445, -445,
1416  -445, -445, -445, 2210, 304, -445, -445, -445, -445, -445,
1417  235, -445, 115, 240, 243, 248, 150, 244, 257, 261,
1418  -445, 321, 1150, 262, 1150, 262, 262, 262, 262, 262,
1419  262, 262, -445, 262, 262, 119, 2706, 272, 278, 17,
1420  283, 2210, 346, 2210, 2210, 2210, 2210, 2210, 2210, 2210,
1421  2210, 2210, 2210, 2210, 76, 76, 2210, 2210, 2210, 2210,
1422  2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210, 2210,
1423  2210, 2210, 2210, 2210, -445, -445, 1345, 354, 1828, 1419,
1424  -445, -445, -445, -445, -445, -445, 320, 15, 442, 3028,
1425  -445, 226, 356, 357, 288, 290, -445, -445, 265, 327,
1426  285, -445, 287, 2406, -445, 2406, -445, 2752, 294, 297,
1427  299, 270, -445, -445, 295, 27, 303, -445, 143, 124,
1428  -445, -445, 296, -445, -445, 301, 310, 311, -445, 1900,
1429  1900, -445, -445, 313, -445, 2136, 2798, 312, 3028, 3028,
1430  3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028, 3028, -445,
1431  -445, 1789, 1789, 2097, 2097, 2097, 2097, 363, 363, 262,
1432  262, 262, 1380, 2439, 1185, 3127, 3098, 1641, 1641, 308,
1433  317, -445, 315, -21, 319, 316, -445, 454, 323, 76,
1434  2210, 326, -445, -445, 324, 333, 360, 2062, 334, 335,
1435  115, 1491, 43, 175, -445, 2210, 122, 325, 285, 336,
1436  338, 340, 2406, 344, 2406, -445, -445, -445, -445, 418,
1437  -445, 45, 345, -445, -445, 379, 183, 181, 347, 248,
1438  171, 1680, 1680, -445, -445, 206, 442, 262, -445, -445,
1439  -445, 2210, -445, -445, 2210, -445, 4, 2536, -445, -445,
1440  442, -445, 2062, -445, -445, -445, 355, 189, -445, 349,
1441  358, 366, 3028, -445, -445, -445, 361, 2406, 2406, -18,
1442  -445, 367, -445, 369, 352, 350, 580, -445, 371, 374,
1443  -445, 384, 226, -445, 1509, -445, -445, 257, 385, 226,
1444  386, 389, 2844, 3063, -445, -445, 4, 2210, -445, -445,
1445  27, -445, -445, 288, -445, -445, -445, -445, 2210, 383,
1446  390, 387, -445, -445, 418, 270, 308, 391, -445, 393,
1447  394, 36, 1592, -445, 2210, 396, -445, -445, -445, 402,
1448  28, -445, -445, 403, 400, -445, -445, 694, 159, 922,
1449  580, -445, 1264, -445, 26, 45, 145, -445, 392, 405,
1450  175, -445, -445, -445, -445, -445, -445, 2890, -445, -445,
1451  3028, 2406, -18, 2210, -445, -445, 177, -445, -445, -445,
1452  408, 1900, -445, 411, 402, 2614, -445, 402, 808, 419,
1453  1918, 808, 28, 28, 421, 43, -445, 808, 1036, -445,
1454  -445, -445, -445, 422, -445, -445, -445, -445, -445, -445,
1455  425, -445, -445, -445, 3028, -445, -445, 423, -445, -445,
1456  -445, 2210, 808, 373, -445, 149, 433, 415, -445, -445,
1457  43, 439, 1673, 1673, -445, -445, 808, 2936, -445, 402,
1458  -445, -445, 808, 436, -445, 440, 441, -445, -445, 443,
1459  -445, 43, 449, 1754, 1754, -445, 450, 446, 445, -445,
1460  447, -445, 457, 1990, 43, -445, 43, -445, 459, -445,
1461  460, 2982, 455, -445, 808, 808, -445, -445, 527, -445,
1462  -445, -445, -445, 456, -445, 527, -445
1463 };
1464 
1465 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
1466  Performed when YYTABLE does not specify something else to do. Zero
1467  means the default is an error. */
1468 static const yytype_int16 yydefact[] =
1469 {
1470  5, 5, 0, 0, 3, 187, 7, 1, 2, 0,
1471  0, 12, 0, 0, 0, 5, 9, 277, 0, 10,
1472  290, 253, 294, 0, 187, 0, 0, 6, 298, 182,
1473  0, 183, 185, 293, 278, 0, 228, 204, 206, 207,
1474  208, 212, 211, 203, 209, 0, 0, 199, 0, 213,
1475  214, 210, 205, 306, 199, 199, 307, 304, 305, 199,
1476  199, 199, 199, 0, 303, 0, 188, 201, 199, 0,
1477  268, 0, 296, 187, 93, 94, 95, 0, 86, 88,
1478  0, 24, 83, 80, 81, 90, 0, 0, 0, 0,
1479  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1480  82, 0, 23, 84, 85, 42, 17, 277, 298, 181,
1481  277, 0, 18, 19, 298, 0, 247, 300, 265, 0,
1482  225, 218, 215, 200, 189, 223, 220, 190, 191, 193,
1483  194, 192, 196, 187, 0, 202, 195, 197, 8, 128,
1484  0, 291, 0, 0, 0, 187, 277, 0, 256, 0,
1485  89, 0, 0, 25, 0, 27, 29, 30, 31, 34,
1486  32, 33, 78, 35, 37, 8, 117, 0, 0, 277,
1487  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1488  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1490  0, 0, 0, 0, 36, 38, 0, 0, 0, 0,
1491  45, 92, 91, 276, 299, 184, 185, 0, 100, 96,
1492  186, 277, 0, 253, 298, 0, 251, 246, 300, 244,
1493  21, 241, 0, 0, 216, 0, 221, 0, 0, 0,
1494  0, 137, 130, 269, 187, 187, 0, 261, 278, 289,
1495  262, 295, 259, 255, 11, 0, 0, 0, 125, 0,
1496  0, 124, 41, 289, 279, 0, 0, 0, 65, 66,
1497  67, 68, 69, 70, 71, 72, 73, 74, 75, 39,
1498  40, 57, 58, 59, 60, 61, 62, 47, 48, 49,
1499  50, 51, 54, 55, 56, 52, 53, 63, 64, 0,
1500  0, 114, 0, 0, 0, 0, 116, 300, 24, 0,
1501  0, 0, 104, 101, 0, 98, 106, 0, 0, 0,
1502  0, 0, 0, 187, 301, 0, 0, 0, 21, 0,
1503  233, 0, 0, 0, 0, 229, 230, 198, 131, 0,
1504  132, 0, 0, 297, 264, 0, 288, 0, 0, 187,
1505  5, 26, 28, 119, 118, 0, 100, 76, 187, 79,
1506  43, 0, 127, 126, 0, 253, 110, 0, 112, 97,
1507  100, 105, 0, 103, 248, 20, 0, 0, 121, 0,
1508  0, 0, 245, 243, 242, 227, 0, 0, 0, 277,
1509  219, 0, 224, 0, 139, 0, 0, 275, 273, 0,
1510  14, 0, 277, 281, 0, 286, 258, 256, 0, 277,
1511  0, 0, 0, 46, 111, 107, 110, 0, 99, 102,
1512  187, 250, 249, 298, 252, 226, 235, 232, 0, 0,
1513  236, 238, 217, 222, 0, 137, 8, 24, 148, 0,
1514  0, 0, 0, 154, 0, 0, 157, 159, 179, 0,
1515  308, 177, 143, 0, 0, 150, 129, 0, 144, 0,
1516  0, 147, 0, 151, 277, 0, 187, 284, 0, 0,
1517  187, 260, 15, 77, 44, 16, 108, 0, 267, 302,
1518  240, 0, 277, 0, 140, 138, 0, 141, 172, 173,
1519  0, 0, 170, 0, 0, 0, 169, 0, 0, 0,
1520  0, 0, 308, 308, 0, 0, 149, 0, 0, 166,
1521  145, 146, 135, 0, 187, 274, 271, 272, 283, 285,
1522  0, 109, 234, 237, 239, 178, 174, 0, 171, 155,
1523  167, 0, 0, 0, 180, 0, 0, 152, 309, 310,
1524  0, 0, 0, 0, 287, 175, 0, 0, 158, 0,
1525  123, 122, 0, 311, 142, 0, 0, 156, 168, 0,
1526  153, 313, 0, 0, 0, 160, 0, 319, 314, 315,
1527  0, 161, 0, 0, 313, 312, 0, 176, 0, 164,
1528  0, 0, 321, 316, 0, 0, 318, 317, 0, 320,
1529  162, 165, 87, 323, 322, 0, 324
1530 };
1531 
1532 /* YYPGOTO[NTERM-NUM]. */
1533 static const yytype_int16 yypgoto[] =
1534 {
1535  -445, -445, -445, 2, -445, -134, 512, -445, -1, 211,
1536  -24, -445, -23, -445, -445, -445, -29, -98, -445, -144,
1537  -445, -445, -342, 128, -445, -445, -435, -74, 136, -444,
1538  -445, -445, -445, -445, -39, -445, 81, 111, 113, -364,
1539  -445, -358, -223, -424, -445, -445, -445, -445, -445, -445,
1540  -445, -445, -445, -3, 438, -445, 109, -445, 19, 505,
1541  -445, -445, -445, -445, -445, -445, -192, -445, 68, -445,
1542  322, 229, -10, 526, -445, -4, -283, 156, -445, -445,
1543  -129, -445, -445, -445, -60, -231, 103, -136, -8, -118,
1544  -30, -445, -445, -445, -445, -445, -445, -445, -445, -102,
1545  341, -20, -226, -445, -2, -445, -6, -445, -445, -19
1546 };
1547 
1548 /* YYDEFGOTO[NTERM-NUM]. */
1549 static const yytype_int16 yydefgoto[] =
1550 {
1551  0, 2, 3, 4, 5, 14, 15, 71, 116, 327,
1552  166, 102, 103, 593, 78, 104, 79, 312, 313, 314,
1553  315, 372, 316, 415, 317, 300, 305, 454, 379, 501,
1554  105, 210, 140, 241, 455, 396, 456, 340, 395, 507,
1555  458, 508, 460, 461, 494, 546, 497, 498, 578, 514,
1556  585, 462, 499, 463, 30, 31, 464, 18, 123, 124,
1557  136, 67, 332, 233, 334, 235, 331, 389, 429, 430,
1558  230, 231, 216, 307, 323, 226, 147, 253, 348, 349,
1559  148, 33, 118, 320, 72, 342, 399, 34, 217, 170,
1560  468, 346, 470, 347, 19, 69, 20, 73, 144, 107,
1561  227, 68, 504, 562, 567, 568, 569, 575, 589, 594
1562 };
1563 
1564 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
1565  positive, shift that token. If negative, reduce the rule whose
1566  number is the opposite. If YYTABLE_NINF, syntax error. */
1567 static const yytype_int16 yytable[] =
1568 {
1569  77, 101, 16, 6, 240, 22, 214, 32, 108, 35,
1570  248, 143, 221, 220, 343, 238, 246, 27, 112, 74,
1571  211, 16, 113, 167, 414, 112, 138, 513, -270, 113,
1572  141, 240, 457, 248, 256, 511, 257, 66, 459, 490,
1573  381, 28, 7, 333, 120, 122, 397, 126, -277, 150,
1574  529, 74, -277, 532, 309, 502, -4, 362, 168, 503,
1575  259, 428, 153, 155, 156, 157, 158, 159, 160, 161,
1576  8, 163, 164, -292, 414, 212, 28, 21, 167, 112,
1577  167, 310, 243, 113, 511, 28, 135, 219, 108, 114,
1578  -280, -8, 23, 9, 108, 491, 457, 228, 119, 213,
1579  510, 139, 459, -270, 28, 559, 29, 555, 556, 237,
1580  111, 75, 76, 168, 17, 168, 250, 112, 70, -277,
1581  112, 113, 321, 383, 113, 229, 1, 112, 571, 572,
1582  115, 113, 301, 17, 304, 306, 247, 115, 249, 264,
1583  391, 24, 393, 75, 76, 25, -270, 266, -292, 268,
1584  269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
1585  -277, 263, 281, 282, 283, 284, 285, 286, 287, 288,
1586  289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
1587  -4, 26, 146, 279, 280, 353, 354, 520, 10, 478,
1588  121, 115, 258, 125, 219, 426, 427, -22, 345, 11,
1589  259, 12, 13, 106, 108, 109, 169, 401, 228, 28,
1590  53, 318, 410, 56, 57, 58, -282, 311, 110, 373,
1591  407, -270, 550, -263, -282, -270, 418, 516, 133, 115,
1592  259, -263, 115, 53, 509, 517, 56, 57, 58, 115,
1593  411, 357, 169, 402, 403, -4, -4, 378, -254, 145,
1594  1, 1, 338, 409, 146, 365, -298, 525, 404, 134,
1595  376, 169, 151, 169, -298, -298, 248, 421, 452, 453,
1596  259, 142, 149, 248, 419, 533, 538, 539, 537, 162,
1597  -298, 171, 172, -298, 509, 28, 367, 228, 222, 522,
1598  229, 64, 53, 219, 232, 56, 57, 58, 234, 380,
1599  53, 382, 486, 56, 57, 58, 236, 239, 366, 548,
1600  242, 184, 185, 244, 64, 53, 245, 251, 56, 57,
1601  58, 479, 145, 557, 255, 108, 108, 357, 357, 560,
1602  378, 398, 219, 204, 205, 108, 206, 412, 252, 208,
1603  413, 254, 330, 405, 330, 261, 219, 223, 219, 267,
1604  224, 262, 408, 341, 341, 311, 265, 302, 111, 319,
1605  -266, 590, 591, 225, 322, 325, 326, 336, 493, 311,
1606  337, 225, 339, 64, 338, -270, 344, 350, -257, 431,
1607  401, 64, -298, 351, 352, 359, -298, 355, 306, 259,
1608  360, 361, 318, 477, 249, 364, 64, 363, 371, 369,
1609  385, 263, -18, 108, 480, 368, 53, 374, 375, 56,
1610  57, 58, 184, 185, 370, 390, 387, 527, 388, 392,
1611  495, 394, 194, 195, 196, 400, 536, 422, 420, 406,
1612  435, 423, 146, 434, 204, 205, 425, 206, -298, 424,
1613  208, 330, 432, 330, 433, 308, 82, 83, 84, 113,
1614  74, 85, 465, -298, 466, 398, -298, 467, 146, 524,
1615  472, 473, 474, 481, 549, 518, 483, 169, 306, 306,
1616  487, 482, 431, 488, 489, 496, 500, 505, 86, 87,
1617  506, 53, 541, 519, 56, 57, 58, 64, 526, 306,
1618  306, 528, 309, 534, -298, 540, 330, 330, 544, 88,
1619  89, 90, 542, 545, 91, 92, 551, 547, 93, 94,
1620  552, 543, 554, 95, 96, 561, 97, 553, 218, 310,
1621  563, 564, 570, 565, 573, 574, 576, 577, 365, 341,
1622  579, 224, 584, 586, 588, 592, 80, 595, 566, 386,
1623  469, 512, 75, 76, 476, 98, 485, 484, 215, 581,
1624  523, 566, 225, 566, 328, 384, 99, 115, 100, 127,
1625  128, 117, 64, 471, 129, 130, 131, 132, 515, 324,
1626  583, 0, 582, 137, 0, 341, 596, 0, 0, 146,
1627  0, 436, 0, 437, 82, 83, 84, -187, 74, 85,
1628  330, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1629  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1630  -187, -187, -187, -187, -187, -187, 86, 87, 0, 0,
1631  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1632  0, 0, 0, 0, 0, 0, 0, 88, 89, 90,
1633  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1634  0, 95, 96, 0, 97, -133, 139, 0, 0, 0,
1635  438, 0, 0, 0, 439, 440, 441, 442, 443, 444,
1636  445, 446, 447, 448, 449, 0, 0, -187, 450, -187,
1637  75, 76, 0, 98, 0, 0, 0, 451, -187, 452,
1638  453, 0, 0, -187, 99, 436, 100, 437, 82, 83,
1639  84, -187, 74, 85, 0, -187, -187, -187, -187, -187,
1640  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1641  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1642  86, 87, 0, 0, 0, 0, 0, 0, 0, 0,
1643  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1644  0, 88, 89, 90, 0, 0, 91, 92, 0, 0,
1645  93, 94, 0, 0, 0, 95, 96, 0, 97, -136,
1646  139, 0, 0, 0, 438, 0, 0, 0, 439, 440,
1647  441, 442, 443, 444, 445, 446, 447, 448, 449, 0,
1648  0, -187, 450, -187, 75, 76, 0, 98, 0, 0,
1649  0, 451, -187, 452, 453, 0, 0, -187, 99, 436,
1650  100, 437, 82, 83, 84, -187, 74, 85, 0, -187,
1651  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1652  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1653  -187, -187, -187, -187, 86, 87, 0, 0, 0, 0,
1654  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1655  0, 0, 0, 0, 0, 88, 89, 90, 0, 0,
1656  91, 92, 0, 0, 93, 94, 0, 0, 0, 95,
1657  96, 0, 97, 0, 139, 0, 0, 0, 438, 0,
1658  0, 0, 439, 440, 441, 442, 443, 444, 445, 446,
1659  447, 448, 449, 0, 0, -187, 450, -187, 75, 76,
1660  0, 98, 0, 0, 0, 451, -187, 452, 453, 0,
1661  0, -187, 99, 436, 100, 437, 82, 83, 84, -187,
1662  74, 85, 0, -187, -187, -187, -187, -187, -187, -187,
1663  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1664  -187, -187, -187, -187, -187, -187, -187, -187, 86, 87,
1665  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1666  0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
1667  89, 90, 0, 0, 91, 92, 0, 0, 93, 94,
1668  0, 0, 0, 95, 96, 0, 97, -134, 139, 0,
1669  0, 0, 438, 0, 0, 0, 439, 440, 441, 442,
1670  443, 444, 445, 446, 447, 448, 449, 0, 0, -187,
1671  450, -187, 75, 76, 0, 98, 0, 0, 0, 451,
1672  -187, 0, 0, 0, 0, -187, 99, 436, 100, 437,
1673  82, 83, 84, -187, 74, 85, 0, -187, -187, -187,
1674  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1675  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1676  -187, -187, 86, 87, 0, 0, 0, 0, 0, 0,
1677  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1678  0, 0, 0, 88, 89, 90, 0, 0, 91, 92,
1679  0, 0, 93, 94, 0, 0, 0, 95, 96, 0,
1680  97, 0, 139, 0, 0, 0, 438, 0, 0, 0,
1681  439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
1682  449, 0, 0, -187, 450, -187, 75, 76, 0, 98,
1683  0, 0, 0, 451, -187, 0, 0, 0, 0, -187,
1684  99, 165, 100, 81, 82, 83, 84, -187, 74, 85,
1685  0, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1686  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1687  -187, -187, -187, -187, -187, -187, 86, 87, 0, 0,
1688  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1689  0, 0, 0, 0, 0, 0, 0, 88, 89, 90,
1690  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1691  0, 95, 96, 0, 97, 0, 139, 0, 0, 0,
1692  0, 0, 0, 0, 184, 185, 186, 187, 188, 189,
1693  190, 191, 192, 193, 194, 195, 196, -187, 197, -187,
1694  75, 76, 0, 98, 202, 203, 204, 205, -187, 206,
1695  0, 0, 208, -187, 99, 299, 100, 81, 82, 83,
1696  84, -163, 74, 85, 0, -163, -163, -163, -163, -163,
1697  -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
1698  -163, -163, -163, -163, -163, -163, -163, -163, -163, -163,
1699  86, 87, 0, 0, 0, 0, 0, 0, 0, 0,
1700  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1701  0, 88, 89, 90, 0, 0, 91, 92, 0, 0,
1702  93, 94, 0, 0, 0, 95, 96, 0, 97, 0,
1703  0, 0, 0, 0, -115, 0, 299, 0, 81, 82,
1704  83, 84, 0, 74, 85, 0, 0, 0, 0, 0,
1705  0, -163, 0, -163, 75, 76, 0, 98, 0, 0,
1706  0, 0, -163, 0, 0, 0, 0, -163, 99, 0,
1707  100, 86, 87, 0, 0, 0, 0, 0, 0, 0,
1708  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1709  0, 0, 88, 89, 90, 0, 0, 91, 92, 0,
1710  0, 93, 94, 0, 0, 0, 95, 96, -113, 97,
1711  299, 0, 81, 82, 83, 84, 0, 74, 85, 184,
1712  185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
1713  195, 196, 0, 0, 0, 75, 76, 0, 98, 202,
1714  203, 204, 205, 0, 206, 86, 87, 208, 0, 99,
1715  0, 100, 0, 0, 0, 0, 0, 0, 0, 0,
1716  0, 0, 0, 0, 0, 0, 88, 89, 90, 0,
1717  0, 91, 92, 0, 0, 93, 94, 0, 0, 0,
1718  95, 96, 377, 97, 81, 82, 83, 84, -115, 74,
1719  85, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1720  299, 0, 81, 82, 83, 84, 0, 74, 85, 75,
1721  76, 0, 98, 0, 0, 0, 0, 86, 87, 0,
1722  0, 0, 0, 99, 0, 100, 0, 0, 0, 0,
1723  0, 0, 0, 0, 0, 86, 87, 0, 88, 89,
1724  90, 0, 0, 91, 92, 0, 0, 93, 94, 0,
1725  0, 0, 95, 96, 0, 97, 88, 89, 90, -120,
1726  0, 91, 92, 0, 0, 93, 94, 0, 0, 0,
1727  95, 96, 0, 97, 0, 0, 0, -120, 0, 0,
1728  0, 75, 76, 299, 98, 81, 82, 83, 84, 0,
1729  74, 85, 0, 0, 0, 99, 0, 100, 0, 75,
1730  76, 0, 98, 0, 0, 0, 0, 0, 0, 0,
1731  0, 0, 0, 99, 0, 100, 0, 0, 86, 87,
1732  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1733  0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
1734  89, 90, 0, 0, 91, 92, 0, 0, 93, 94,
1735  0, 0, 0, 95, 96, 0, 97, 0, 0, 0,
1736  0, 0, 492, 0, 299, 0, 81, 82, 83, 84,
1737  0, 74, 85, 81, 82, 83, 84, 0, 74, 85,
1738  184, 185, 75, 76, 0, 98, 0, 0, 192, 193,
1739  194, 195, 196, 0, 0, 0, 99, 0, 100, 86,
1740  87, 0, 204, 205, 0, 206, 86, 87, 208, 0,
1741  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1742  88, 89, 90, 0, 0, 91, 92, 0, 0, 93,
1743  94, 0, 91, 0, 95, 96, 93, 97, 0, 0,
1744  0, 95, 96, -115, 97, 299, 356, 81, 82, 83,
1745  84, 0, 74, 85, 0, 0, 0, 0, 0, 0,
1746  0, 0, 0, 75, 76, 0, 98, 0, 0, 0,
1747  75, 76, 0, 98, 0, 0, 0, 99, 0, 100,
1748  86, 87, 0, 0, 99, 0, 100, 0, 0, 0,
1749  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1750  0, 88, 89, 90, 0, 0, 91, 92, 0, 0,
1751  93, 94, 0, 0, 0, 95, 96, -115, 97, 303,
1752  0, 81, 82, 83, 84, 0, 74, 85, 184, 185,
1753  0, 0, 188, 189, 190, 191, 192, 193, 194, 195,
1754  196, 0, 0, 0, 75, 76, 0, 98, 202, 203,
1755  204, 205, 0, 206, 86, 87, 208, 0, 99, 0,
1756  100, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1757  0, 0, 0, 0, 0, 88, 89, 90, 0, 0,
1758  91, 92, 0, 0, 93, 94, 0, 0, 0, 95,
1759  96, 299, 97, 81, 82, 83, 84, 0, 74, 85,
1760  0, 0, 0, 0, 0, 0, 0, 0, 0, 535,
1761  0, 81, 82, 83, 84, 0, 74, 85, 75, 76,
1762  0, 98, 0, 0, 0, 0, 86, 87, 0, 0,
1763  0, 0, 99, 0, 100, 0, 0, 0, 0, 0,
1764  0, 0, 0, 0, 86, 87, 0, 88, 89, 90,
1765  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1766  0, 95, 96, 0, 97, 88, 89, 90, 0, 0,
1767  91, 92, 0, 0, 93, 94, 0, 0, 0, 95,
1768  96, 580, 97, 81, 82, 83, 84, 0, 74, 85,
1769  75, 76, 0, 98, 0, 0, 0, 0, 0, 0,
1770  0, 0, 0, 0, 99, 0, 100, 0, 75, 76,
1771  0, 98, 0, 0, 0, 0, 86, 87, 0, 0,
1772  0, 0, 99, 0, 100, 0, 0, 0, 0, 0,
1773  0, 0, 0, 0, 0, 0, 0, 88, 89, 90,
1774  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1775  0, 95, 96, 0, 97, 81, 82, 83, 84, 0,
1776  74, 85, 0, 0, 0, 0, 0, 0, 0, 0,
1777  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1778  75, 76, 0, 98, 0, 0, 0, 0, 86, 87,
1779  0, 0, 0, 0, 99, 0, 100, 0, 0, 0,
1780  0, 0, 0, 0, 0, 0, 0, 0, 0, 88,
1781  89, 90, 0, 0, 91, 92, 0, 0, 93, 94,
1782  0, 0, 0, 95, 96, 0, 97, 0, 218, 81,
1783  82, 83, 84, 0, 74, 85, 184, 185, 0, 0,
1784  0, 0, 0, 0, 192, 193, 194, 195, 196, 0,
1785  0, 0, 75, 76, 0, 98, 202, 203, 204, 205,
1786  0, 206, 86, 87, 208, 0, 99, 0, 100, 0,
1787  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1788  0, 0, 0, 88, 89, 90, 0, 0, 91, 92,
1789  0, 0, 93, 94, 0, 0, 0, 95, 96, 0,
1790  97, 0, 356, 81, 82, 83, 84, 0, 74, 85,
1791  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1792  0, 0, 0, 0, 0, 0, 75, 76, 0, 98,
1793  0, 0, 0, 0, 0, 0, 86, 87, 0, 0,
1794  99, 0, 100, 0, 0, 0, 0, 0, 0, 0,
1795  0, 0, 0, 0, 0, 0, 0, 88, 89, 90,
1796  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1797  0, 95, 96, 0, 97, 81, 82, 83, 84, 0,
1798  74, 85, 0, 0, 0, 0, 0, 0, 0, 0,
1799  0, 0, 0, 81, 82, 83, 84, 0, 74, 85,
1800  75, 76, 0, 98, 0, 0, 0, 0, 86, 87,
1801  0, 0, 0, 0, 99, 0, 100, 0, 0, 0,
1802  0, 0, 0, 0, 0, 0, 86, 87, 0, 88,
1803  89, 90, 0, 0, 91, 92, 0, 0, 93, 94,
1804  0, 0, 0, 95, 96, 0, 152, 88, 89, 90,
1805  0, 0, 91, 92, 0, 0, 93, 94, 0, 0,
1806  0, 95, 96, 0, 154, 0, 0, 0, 0, 0,
1807  0, 0, 75, 76, 0, 98, 0, 0, 0, 0,
1808  0, 0, 0, 0, 0, 0, 99, 0, 100, 0,
1809  75, 76, 0, 98, 0, 0, 0, 329, 0, 0,
1810  0, 0, 0, -187, 99, 0, 100, -187, -187, -187,
1811  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1812  -187, -187, -187, -187, -187, -187, -187, -187, -187, -187,
1813  -187, -187, 36, 0, 0, 0, 37, 38, 39, 40,
1814  41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
1815  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
1816  61, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1817  0, -231, 0, 0, 0, 0, 0, 0, 184, 185,
1818  186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
1819  196, 0, 197, -187, 199, -187, 0, 0, 202, 203,
1820  204, 205, 0, 206, -187, 0, 208, 0, 0, -187,
1821  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1822  0, 0, 62, 0, 63, 0, 0, 0, 0, 0,
1823  0, 0, 0, 64, 0, 0, 0, 0, 65, 37,
1824  38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
1825  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
1826  58, 59, 60, 61, 173, 174, 175, 176, 177, 178,
1827  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1828  189, 190, 191, 192, 193, 194, 195, 196, 0, 197,
1829  198, 199, 0, 200, 201, 202, 203, 204, 205, 0,
1830  206, 0, 0, 208, 416, 0, 0, 0, 417, 209,
1831  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1832  0, 0, 0, 0, 0, 62, 0, 63, 0, 0,
1833  0, 0, 0, 0, 0, 0, 64, 0, 0, 0,
1834  0, 65, 173, 174, 175, 176, 177, 178, 179, 180,
1835  181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1836  191, 192, 193, 194, 195, 196, 0, 197, 198, 199,
1837  0, 200, 201, 202, 203, 204, 205, 0, 206, 0,
1838  0, 208, 0, 530, 0, 0, 531, 209, 173, 174,
1839  175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
1840  185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
1841  195, 196, 0, 197, 198, 199, 0, 200, 201, 202,
1842  203, 204, 205, 0, 206, 207, 0, 208, 0, 0,
1843  0, 0, 0, 209, 173, 174, 175, 176, 177, 178,
1844  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1845  189, 190, 191, 192, 193, 194, 195, 196, 0, 197,
1846  198, 199, 0, 200, 201, 202, 203, 204, 205, 0,
1847  206, 0, 0, 208, 0, 0, 0, 260, 0, 209,
1848  173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
1849  183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1850  193, 194, 195, 196, 0, 197, 198, 199, 0, 200,
1851  201, 202, 203, 204, 205, 335, 206, 0, 0, 208,
1852  0, 0, 0, 0, 0, 209, 173, 174, 175, 176,
1853  177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
1854  187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
1855  0, 197, 198, 199, 0, 200, 201, 202, 203, 204,
1856  205, 0, 206, 0, 0, 208, 0, 0, 0, 358,
1857  0, 209, 173, 174, 175, 176, 177, 178, 179, 180,
1858  181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
1859  191, 192, 193, 194, 195, 196, 0, 197, 198, 199,
1860  0, 200, 201, 202, 203, 204, 205, 0, 206, 475,
1861  0, 208, 0, 0, 0, 0, 0, 209, 173, 174,
1862  175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
1863  185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
1864  195, 196, 0, 197, 198, 199, 0, 200, 201, 202,
1865  203, 204, 205, 0, 206, 0, 0, 208, 521, 0,
1866  0, 0, 0, 209, 173, 174, 175, 176, 177, 178,
1867  179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
1868  189, 190, 191, 192, 193, 194, 195, 196, 0, 197,
1869  198, 199, 0, 200, 201, 202, 203, 204, 205, 0,
1870  206, 0, 0, 208, 0, 558, 0, 0, 0, 209,
1871  173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
1872  183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
1873  193, 194, 195, 196, 0, 197, 198, 199, 0, 200,
1874  201, 202, 203, 204, 205, 587, 206, 0, 0, 208,
1875  0, 0, 0, 0, 0, 209, 173, 174, 175, 176,
1876  177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
1877  187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
1878  0, 197, 198, 199, 0, 200, 201, 202, 203, 204,
1879  205, 0, 206, 0, 0, 208, 0, 0, 0, 0,
1880  0, 209, 184, 185, 186, 187, 188, 189, 190, 191,
1881  192, 193, 194, 195, 196, 0, 197, 198, 199, 0,
1882  200, 201, 202, 203, 204, 205, 0, 206, 0, 0,
1883  208, 0, 0, 0, 0, 0, 209, 184, 185, 186,
1884  187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
1885  0, 197, 198, 199, 0, 200, 0, 202, 203, 204,
1886  205, 0, 206, 0, 0, 208, 184, 185, 186, 187,
1887  188, 189, 190, 191, 192, 193, 194, 195, 196, 0,
1888  197, 198, 199, 0, 0, 0, 202, 203, 204, 205,
1889  0, 206, 0, 0, 208
1890 };
1891 
1892 static const yytype_int16 yycheck[] =
1893 {
1894  23, 25, 5, 1, 138, 9, 108, 17, 28, 17,
1895  146, 71, 114, 111, 245, 133, 145, 15, 3, 8,
1896  9, 24, 7, 97, 366, 3, 1, 462, 1, 7,
1897  69, 165, 396, 169, 152, 459, 154, 18, 396, 3,
1898  323, 59, 0, 235, 45, 46, 1, 48, 3, 78,
1899  494, 8, 7, 497, 50, 27, 10, 78, 97, 31,
1900  81, 79, 86, 87, 88, 89, 90, 91, 92, 93,
1901  10, 95, 96, 1, 416, 104, 59, 74, 152, 3,
1902  154, 77, 142, 7, 508, 59, 67, 111, 108, 74,
1903  73, 1, 74, 3, 114, 59, 460, 117, 76, 107,
1904  458, 76, 460, 76, 59, 549, 80, 542, 543, 133,
1905  38, 100, 101, 152, 5, 154, 146, 3, 3, 74,
1906  3, 7, 224, 1, 7, 3, 80, 3, 563, 564,
1907  115, 7, 206, 24, 208, 209, 146, 115, 146, 169,
1908  332, 76, 334, 100, 101, 76, 1, 171, 76, 173,
1909  174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
1910  115, 169, 186, 187, 188, 189, 190, 191, 192, 193,
1911  194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
1912  10, 1, 73, 184, 185, 259, 260, 470, 98, 420,
1913  76, 115, 73, 76, 218, 387, 388, 75, 74, 109,
1914  81, 111, 112, 80, 224, 80, 97, 1, 228, 59,
1915  27, 221, 356, 30, 31, 32, 73, 218, 81, 317,
1916  349, 76, 73, 73, 81, 80, 370, 82, 74, 115,
1917  81, 81, 115, 27, 457, 466, 30, 31, 32, 115,
1918  358, 265, 133, 345, 346, 75, 75, 321, 73, 74,
1919  80, 80, 75, 355, 145, 74, 73, 80, 77, 74,
1920  320, 152, 75, 154, 81, 59, 402, 78, 109, 110,
1921  81, 81, 73, 409, 372, 498, 502, 503, 501, 3,
1922  74, 74, 74, 77, 507, 59, 310, 307, 74, 481,
1923  3, 108, 27, 317, 76, 30, 31, 32, 76, 322,
1924  27, 325, 436, 30, 31, 32, 76, 3, 309, 532,
1925  75, 49, 50, 73, 108, 27, 73, 73, 30, 31,
1926  32, 423, 74, 546, 3, 345, 346, 351, 352, 552,
1927  404, 341, 356, 71, 72, 355, 74, 361, 81, 77,
1928  364, 80, 233, 347, 235, 73, 370, 74, 372, 3,
1929  77, 73, 350, 244, 245, 356, 73, 3, 38, 3,
1930  3, 584, 585, 98, 74, 38, 81, 73, 442, 370,
1931  73, 98, 102, 108, 75, 80, 73, 76, 82, 389,
1932  1, 108, 3, 73, 73, 73, 7, 74, 462, 81,
1933  73, 76, 402, 417, 402, 79, 108, 78, 38, 75,
1934  75, 409, 79, 423, 428, 79, 27, 73, 73, 30,
1935  31, 32, 49, 50, 81, 75, 80, 491, 80, 75,
1936  444, 3, 59, 60, 61, 80, 500, 78, 73, 82,
1937  80, 73, 323, 81, 71, 72, 75, 74, 59, 73,
1938  77, 332, 75, 334, 75, 3, 4, 5, 6, 7,
1939  8, 9, 81, 74, 80, 465, 77, 73, 349, 483,
1940  75, 75, 73, 80, 91, 73, 79, 358, 542, 543,
1941  79, 81, 482, 80, 80, 79, 74, 74, 36, 37,
1942  80, 27, 505, 78, 30, 31, 32, 108, 80, 563,
1943  564, 80, 50, 74, 115, 74, 387, 388, 73, 57,
1944  58, 59, 80, 80, 62, 63, 73, 531, 66, 67,
1945  95, 514, 73, 71, 72, 79, 74, 540, 76, 77,
1946  80, 80, 73, 80, 74, 79, 81, 80, 74, 420,
1947  73, 77, 73, 73, 79, 8, 24, 81, 561, 328,
1948  404, 460, 100, 101, 416, 103, 435, 434, 110, 573,
1949  482, 574, 98, 576, 232, 326, 114, 115, 116, 54,
1950  55, 35, 108, 407, 59, 60, 61, 62, 465, 228,
1951  576, -1, 574, 68, -1, 466, 595, -1, -1, 470,
1952  -1, 1, -1, 3, 4, 5, 6, 7, 8, 9,
1953  481, 11, 12, 13, 14, 15, 16, 17, 18, 19,
1954  20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
1955  30, 31, 32, 33, 34, 35, 36, 37, -1, -1,
1956  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1957  -1, -1, -1, -1, -1, -1, -1, 57, 58, 59,
1958  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
1959  -1, 71, 72, -1, 74, 75, 76, -1, -1, -1,
1960  80, -1, -1, -1, 84, 85, 86, 87, 88, 89,
1961  90, 91, 92, 93, 94, -1, -1, 97, 98, 99,
1962  100, 101, -1, 103, -1, -1, -1, 107, 108, 109,
1963  110, -1, -1, 113, 114, 1, 116, 3, 4, 5,
1964  6, 7, 8, 9, -1, 11, 12, 13, 14, 15,
1965  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
1966  26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
1967  36, 37, -1, -1, -1, -1, -1, -1, -1, -1,
1968  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1969  -1, 57, 58, 59, -1, -1, 62, 63, -1, -1,
1970  66, 67, -1, -1, -1, 71, 72, -1, 74, 75,
1971  76, -1, -1, -1, 80, -1, -1, -1, 84, 85,
1972  86, 87, 88, 89, 90, 91, 92, 93, 94, -1,
1973  -1, 97, 98, 99, 100, 101, -1, 103, -1, -1,
1974  -1, 107, 108, 109, 110, -1, -1, 113, 114, 1,
1975  116, 3, 4, 5, 6, 7, 8, 9, -1, 11,
1976  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
1977  22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
1978  32, 33, 34, 35, 36, 37, -1, -1, -1, -1,
1979  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1980  -1, -1, -1, -1, -1, 57, 58, 59, -1, -1,
1981  62, 63, -1, -1, 66, 67, -1, -1, -1, 71,
1982  72, -1, 74, -1, 76, -1, -1, -1, 80, -1,
1983  -1, -1, 84, 85, 86, 87, 88, 89, 90, 91,
1984  92, 93, 94, -1, -1, 97, 98, 99, 100, 101,
1985  -1, 103, -1, -1, -1, 107, 108, 109, 110, -1,
1986  -1, 113, 114, 1, 116, 3, 4, 5, 6, 7,
1987  8, 9, -1, 11, 12, 13, 14, 15, 16, 17,
1988  18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
1989  28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
1990  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1991  -1, -1, -1, -1, -1, -1, -1, -1, -1, 57,
1992  58, 59, -1, -1, 62, 63, -1, -1, 66, 67,
1993  -1, -1, -1, 71, 72, -1, 74, 75, 76, -1,
1994  -1, -1, 80, -1, -1, -1, 84, 85, 86, 87,
1995  88, 89, 90, 91, 92, 93, 94, -1, -1, 97,
1996  98, 99, 100, 101, -1, 103, -1, -1, -1, 107,
1997  108, -1, -1, -1, -1, 113, 114, 1, 116, 3,
1998  4, 5, 6, 7, 8, 9, -1, 11, 12, 13,
1999  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
2000  24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
2001  34, 35, 36, 37, -1, -1, -1, -1, -1, -1,
2002  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2003  -1, -1, -1, 57, 58, 59, -1, -1, 62, 63,
2004  -1, -1, 66, 67, -1, -1, -1, 71, 72, -1,
2005  74, -1, 76, -1, -1, -1, 80, -1, -1, -1,
2006  84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
2007  94, -1, -1, 97, 98, 99, 100, 101, -1, 103,
2008  -1, -1, -1, 107, 108, -1, -1, -1, -1, 113,
2009  114, 1, 116, 3, 4, 5, 6, 7, 8, 9,
2010  -1, 11, 12, 13, 14, 15, 16, 17, 18, 19,
2011  20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
2012  30, 31, 32, 33, 34, 35, 36, 37, -1, -1,
2013  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2014  -1, -1, -1, -1, -1, -1, -1, 57, 58, 59,
2015  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
2016  -1, 71, 72, -1, 74, -1, 76, -1, -1, -1,
2017  -1, -1, -1, -1, 49, 50, 51, 52, 53, 54,
2018  55, 56, 57, 58, 59, 60, 61, 97, 63, 99,
2019  100, 101, -1, 103, 69, 70, 71, 72, 108, 74,
2020  -1, -1, 77, 113, 114, 1, 116, 3, 4, 5,
2021  6, 7, 8, 9, -1, 11, 12, 13, 14, 15,
2022  16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
2023  26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
2024  36, 37, -1, -1, -1, -1, -1, -1, -1, -1,
2025  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2026  -1, 57, 58, 59, -1, -1, 62, 63, -1, -1,
2027  66, 67, -1, -1, -1, 71, 72, -1, 74, -1,
2028  -1, -1, -1, -1, 80, -1, 1, -1, 3, 4,
2029  5, 6, -1, 8, 9, -1, -1, -1, -1, -1,
2030  -1, 97, -1, 99, 100, 101, -1, 103, -1, -1,
2031  -1, -1, 108, -1, -1, -1, -1, 113, 114, -1,
2032  116, 36, 37, -1, -1, -1, -1, -1, -1, -1,
2033  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2034  -1, -1, 57, 58, 59, -1, -1, 62, 63, -1,
2035  -1, 66, 67, -1, -1, -1, 71, 72, 73, 74,
2036  1, -1, 3, 4, 5, 6, -1, 8, 9, 49,
2037  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
2038  60, 61, -1, -1, -1, 100, 101, -1, 103, 69,
2039  70, 71, 72, -1, 74, 36, 37, 77, -1, 114,
2040  -1, 116, -1, -1, -1, -1, -1, -1, -1, -1,
2041  -1, -1, -1, -1, -1, -1, 57, 58, 59, -1,
2042  -1, 62, 63, -1, -1, 66, 67, -1, -1, -1,
2043  71, 72, 1, 74, 3, 4, 5, 6, 79, 8,
2044  9, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2045  1, -1, 3, 4, 5, 6, -1, 8, 9, 100,
2046  101, -1, 103, -1, -1, -1, -1, 36, 37, -1,
2047  -1, -1, -1, 114, -1, 116, -1, -1, -1, -1,
2048  -1, -1, -1, -1, -1, 36, 37, -1, 57, 58,
2049  59, -1, -1, 62, 63, -1, -1, 66, 67, -1,
2050  -1, -1, 71, 72, -1, 74, 57, 58, 59, 78,
2051  -1, 62, 63, -1, -1, 66, 67, -1, -1, -1,
2052  71, 72, -1, 74, -1, -1, -1, 78, -1, -1,
2053  -1, 100, 101, 1, 103, 3, 4, 5, 6, -1,
2054  8, 9, -1, -1, -1, 114, -1, 116, -1, 100,
2055  101, -1, 103, -1, -1, -1, -1, -1, -1, -1,
2056  -1, -1, -1, 114, -1, 116, -1, -1, 36, 37,
2057  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2058  -1, -1, -1, -1, -1, -1, -1, -1, -1, 57,
2059  58, 59, -1, -1, 62, 63, -1, -1, 66, 67,
2060  -1, -1, -1, 71, 72, -1, 74, -1, -1, -1,
2061  -1, -1, 80, -1, 1, -1, 3, 4, 5, 6,
2062  -1, 8, 9, 3, 4, 5, 6, -1, 8, 9,
2063  49, 50, 100, 101, -1, 103, -1, -1, 57, 58,
2064  59, 60, 61, -1, -1, -1, 114, -1, 116, 36,
2065  37, -1, 71, 72, -1, 74, 36, 37, 77, -1,
2066  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2067  57, 58, 59, -1, -1, 62, 63, -1, -1, 66,
2068  67, -1, 62, -1, 71, 72, 66, 74, -1, -1,
2069  -1, 71, 72, 80, 74, 1, 76, 3, 4, 5,
2070  6, -1, 8, 9, -1, -1, -1, -1, -1, -1,
2071  -1, -1, -1, 100, 101, -1, 103, -1, -1, -1,
2072  100, 101, -1, 103, -1, -1, -1, 114, -1, 116,
2073  36, 37, -1, -1, 114, -1, 116, -1, -1, -1,
2074  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2075  -1, 57, 58, 59, -1, -1, 62, 63, -1, -1,
2076  66, 67, -1, -1, -1, 71, 72, 73, 74, 1,
2077  -1, 3, 4, 5, 6, -1, 8, 9, 49, 50,
2078  -1, -1, 53, 54, 55, 56, 57, 58, 59, 60,
2079  61, -1, -1, -1, 100, 101, -1, 103, 69, 70,
2080  71, 72, -1, 74, 36, 37, 77, -1, 114, -1,
2081  116, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2082  -1, -1, -1, -1, -1, 57, 58, 59, -1, -1,
2083  62, 63, -1, -1, 66, 67, -1, -1, -1, 71,
2084  72, 1, 74, 3, 4, 5, 6, -1, 8, 9,
2085  -1, -1, -1, -1, -1, -1, -1, -1, -1, 1,
2086  -1, 3, 4, 5, 6, -1, 8, 9, 100, 101,
2087  -1, 103, -1, -1, -1, -1, 36, 37, -1, -1,
2088  -1, -1, 114, -1, 116, -1, -1, -1, -1, -1,
2089  -1, -1, -1, -1, 36, 37, -1, 57, 58, 59,
2090  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
2091  -1, 71, 72, -1, 74, 57, 58, 59, -1, -1,
2092  62, 63, -1, -1, 66, 67, -1, -1, -1, 71,
2093  72, 1, 74, 3, 4, 5, 6, -1, 8, 9,
2094  100, 101, -1, 103, -1, -1, -1, -1, -1, -1,
2095  -1, -1, -1, -1, 114, -1, 116, -1, 100, 101,
2096  -1, 103, -1, -1, -1, -1, 36, 37, -1, -1,
2097  -1, -1, 114, -1, 116, -1, -1, -1, -1, -1,
2098  -1, -1, -1, -1, -1, -1, -1, 57, 58, 59,
2099  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
2100  -1, 71, 72, -1, 74, 3, 4, 5, 6, -1,
2101  8, 9, -1, -1, -1, -1, -1, -1, -1, -1,
2102  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2103  100, 101, -1, 103, -1, -1, -1, -1, 36, 37,
2104  -1, -1, -1, -1, 114, -1, 116, -1, -1, -1,
2105  -1, -1, -1, -1, -1, -1, -1, -1, -1, 57,
2106  58, 59, -1, -1, 62, 63, -1, -1, 66, 67,
2107  -1, -1, -1, 71, 72, -1, 74, -1, 76, 3,
2108  4, 5, 6, -1, 8, 9, 49, 50, -1, -1,
2109  -1, -1, -1, -1, 57, 58, 59, 60, 61, -1,
2110  -1, -1, 100, 101, -1, 103, 69, 70, 71, 72,
2111  -1, 74, 36, 37, 77, -1, 114, -1, 116, -1,
2112  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2113  -1, -1, -1, 57, 58, 59, -1, -1, 62, 63,
2114  -1, -1, 66, 67, -1, -1, -1, 71, 72, -1,
2115  74, -1, 76, 3, 4, 5, 6, -1, 8, 9,
2116  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2117  -1, -1, -1, -1, -1, -1, 100, 101, -1, 103,
2118  -1, -1, -1, -1, -1, -1, 36, 37, -1, -1,
2119  114, -1, 116, -1, -1, -1, -1, -1, -1, -1,
2120  -1, -1, -1, -1, -1, -1, -1, 57, 58, 59,
2121  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
2122  -1, 71, 72, -1, 74, 3, 4, 5, 6, -1,
2123  8, 9, -1, -1, -1, -1, -1, -1, -1, -1,
2124  -1, -1, -1, 3, 4, 5, 6, -1, 8, 9,
2125  100, 101, -1, 103, -1, -1, -1, -1, 36, 37,
2126  -1, -1, -1, -1, 114, -1, 116, -1, -1, -1,
2127  -1, -1, -1, -1, -1, -1, 36, 37, -1, 57,
2128  58, 59, -1, -1, 62, 63, -1, -1, 66, 67,
2129  -1, -1, -1, 71, 72, -1, 74, 57, 58, 59,
2130  -1, -1, 62, 63, -1, -1, 66, 67, -1, -1,
2131  -1, 71, 72, -1, 74, -1, -1, -1, -1, -1,
2132  -1, -1, 100, 101, -1, 103, -1, -1, -1, -1,
2133  -1, -1, -1, -1, -1, -1, 114, -1, 116, -1,
2134  100, 101, -1, 103, -1, -1, -1, 1, -1, -1,
2135  -1, -1, -1, 7, 114, -1, 116, 11, 12, 13,
2136  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
2137  24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
2138  34, 35, 7, -1, -1, -1, 11, 12, 13, 14,
2139  15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
2140  25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
2141  35, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2142  -1, 75, -1, -1, -1, -1, -1, -1, 49, 50,
2143  51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
2144  61, -1, 63, 97, 65, 99, -1, -1, 69, 70,
2145  71, 72, -1, 74, 108, -1, 77, -1, -1, 113,
2146  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2147  -1, -1, 97, -1, 99, -1, -1, -1, -1, -1,
2148  -1, -1, -1, 108, -1, -1, -1, -1, 113, 11,
2149  12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
2150  22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
2151  32, 33, 34, 35, 38, 39, 40, 41, 42, 43,
2152  44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
2153  54, 55, 56, 57, 58, 59, 60, 61, -1, 63,
2154  64, 65, -1, 67, 68, 69, 70, 71, 72, -1,
2155  74, -1, -1, 77, 78, -1, -1, -1, 82, 83,
2156  -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
2157  -1, -1, -1, -1, -1, 97, -1, 99, -1, -1,
2158  -1, -1, -1, -1, -1, -1, 108, -1, -1, -1,
2159  -1, 113, 38, 39, 40, 41, 42, 43, 44, 45,
2160  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
2161  56, 57, 58, 59, 60, 61, -1, 63, 64, 65,
2162  -1, 67, 68, 69, 70, 71, 72, -1, 74, -1,
2163  -1, 77, -1, 79, -1, -1, 82, 83, 38, 39,
2164  40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
2165  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
2166  60, 61, -1, 63, 64, 65, -1, 67, 68, 69,
2167  70, 71, 72, -1, 74, 75, -1, 77, -1, -1,
2168  -1, -1, -1, 83, 38, 39, 40, 41, 42, 43,
2169  44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
2170  54, 55, 56, 57, 58, 59, 60, 61, -1, 63,
2171  64, 65, -1, 67, 68, 69, 70, 71, 72, -1,
2172  74, -1, -1, 77, -1, -1, -1, 81, -1, 83,
2173  38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
2174  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
2175  58, 59, 60, 61, -1, 63, 64, 65, -1, 67,
2176  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
2177  -1, -1, -1, -1, -1, 83, 38, 39, 40, 41,
2178  42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
2179  52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
2180  -1, 63, 64, 65, -1, 67, 68, 69, 70, 71,
2181  72, -1, 74, -1, -1, 77, -1, -1, -1, 81,
2182  -1, 83, 38, 39, 40, 41, 42, 43, 44, 45,
2183  46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
2184  56, 57, 58, 59, 60, 61, -1, 63, 64, 65,
2185  -1, 67, 68, 69, 70, 71, 72, -1, 74, 75,
2186  -1, 77, -1, -1, -1, -1, -1, 83, 38, 39,
2187  40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
2188  50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
2189  60, 61, -1, 63, 64, 65, -1, 67, 68, 69,
2190  70, 71, 72, -1, 74, -1, -1, 77, 78, -1,
2191  -1, -1, -1, 83, 38, 39, 40, 41, 42, 43,
2192  44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
2193  54, 55, 56, 57, 58, 59, 60, 61, -1, 63,
2194  64, 65, -1, 67, 68, 69, 70, 71, 72, -1,
2195  74, -1, -1, 77, -1, 79, -1, -1, -1, 83,
2196  38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
2197  48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
2198  58, 59, 60, 61, -1, 63, 64, 65, -1, 67,
2199  68, 69, 70, 71, 72, 73, 74, -1, -1, 77,
2200  -1, -1, -1, -1, -1, 83, 38, 39, 40, 41,
2201  42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
2202  52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
2203  -1, 63, 64, 65, -1, 67, 68, 69, 70, 71,
2204  72, -1, 74, -1, -1, 77, -1, -1, -1, -1,
2205  -1, 83, 49, 50, 51, 52, 53, 54, 55, 56,
2206  57, 58, 59, 60, 61, -1, 63, 64, 65, -1,
2207  67, 68, 69, 70, 71, 72, -1, 74, -1, -1,
2208  77, -1, -1, -1, -1, -1, 83, 49, 50, 51,
2209  52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
2210  -1, 63, 64, 65, -1, 67, -1, 69, 70, 71,
2211  72, -1, 74, -1, -1, 77, 49, 50, 51, 52,
2212  53, 54, 55, 56, 57, 58, 59, 60, 61, -1,
2213  63, 64, 65, -1, -1, -1, 69, 70, 71, 72,
2214  -1, 74, -1, -1, 77
2215 };
2216 
2217 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
2218  state STATE-NUM. */
2219 static const yytype_uint8 yystos[] =
2220 {
2221  0, 80, 120, 121, 122, 123, 122, 0, 10, 3,
2222  98, 109, 111, 112, 124, 125, 172, 175, 176, 213,
2223  215, 74, 194, 74, 76, 76, 1, 122, 59, 80,
2224  173, 174, 191, 200, 206, 207, 7, 11, 12, 13,
2225  14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
2226  24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
2227  34, 35, 97, 99, 108, 113, 177, 180, 220, 214,
2228  3, 126, 203, 216, 8, 100, 101, 131, 133, 135,
2229  125, 3, 4, 5, 6, 9, 36, 37, 57, 58,
2230  59, 62, 63, 66, 67, 71, 72, 74, 103, 114,
2231  116, 129, 130, 131, 134, 149, 80, 218, 220, 80,
2232  81, 38, 3, 7, 74, 115, 127, 192, 201, 76,
2233  127, 76, 127, 177, 178, 76, 127, 178, 178, 178,
2234  178, 178, 178, 74, 74, 177, 179, 178, 1, 76,
2235  151, 153, 81, 203, 217, 74, 175, 195, 199, 73,
2236  135, 75, 74, 129, 74, 129, 129, 129, 129, 129,
2237  129, 129, 3, 129, 129, 1, 129, 146, 153, 175,
2238  208, 74, 74, 38, 39, 40, 41, 42, 43, 44,
2239  45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
2240  55, 56, 57, 58, 59, 60, 61, 63, 64, 65,
2241  67, 68, 69, 70, 71, 72, 74, 75, 77, 83,
2242  150, 9, 135, 207, 218, 173, 191, 207, 76, 129,
2243  136, 218, 74, 74, 77, 98, 194, 219, 220, 3,
2244  189, 190, 76, 182, 76, 184, 76, 129, 208, 3,
2245  124, 152, 75, 203, 73, 73, 199, 191, 206, 207,
2246  209, 73, 81, 196, 80, 3, 208, 208, 73, 81,
2247  81, 73, 73, 207, 209, 73, 129, 3, 129, 129,
2248  129, 129, 129, 129, 129, 129, 129, 129, 129, 127,
2249  127, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2250  129, 129, 129, 129, 129, 129, 129, 129, 129, 1,
2251  144, 146, 3, 1, 146, 145, 146, 192, 3, 50,
2252  77, 127, 136, 137, 138, 139, 141, 143, 191, 3,
2253  202, 218, 74, 193, 219, 38, 81, 128, 189, 1,
2254  175, 185, 181, 185, 183, 73, 73, 73, 75, 102,
2255  156, 175, 204, 204, 73, 74, 210, 212, 197, 198,
2256  76, 73, 73, 146, 146, 74, 76, 129, 81, 73,
2257  73, 76, 78, 78, 79, 74, 127, 129, 79, 75,
2258  81, 38, 140, 136, 73, 73, 203, 1, 146, 147,
2259  131, 195, 129, 1, 190, 75, 128, 80, 80, 186,
2260  75, 185, 75, 185, 3, 157, 154, 1, 191, 205,
2261  80, 1, 218, 218, 77, 194, 82, 199, 122, 218,
2262  138, 208, 129, 129, 141, 142, 78, 82, 138, 136,
2263  73, 78, 78, 73, 73, 75, 185, 185, 79, 187,
2264  188, 191, 75, 75, 81, 80, 1, 3, 80, 84,
2265  85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
2266  98, 107, 109, 110, 146, 153, 155, 158, 159, 160,
2267  161, 162, 170, 172, 175, 81, 80, 73, 209, 147,
2268  211, 196, 75, 75, 73, 75, 142, 129, 204, 218,
2269  129, 80, 81, 79, 157, 156, 124, 79, 80, 80,
2270  3, 59, 80, 146, 163, 129, 79, 165, 166, 171,
2271  74, 148, 27, 31, 221, 74, 80, 158, 160, 161,
2272  160, 162, 155, 145, 168, 205, 82, 204, 73, 78,
2273  195, 78, 185, 187, 129, 80, 80, 146, 80, 148,
2274  79, 82, 148, 161, 74, 1, 146, 161, 221, 221,
2275  74, 131, 80, 172, 73, 80, 164, 129, 161, 91,
2276  73, 73, 95, 131, 73, 145, 145, 161, 79, 148,
2277  161, 79, 222, 80, 80, 80, 131, 223, 224, 225,
2278  73, 145, 145, 74, 79, 226, 81, 80, 167, 73,
2279  1, 129, 223, 225, 73, 169, 73, 73, 79, 227,
2280  161, 161, 8, 132, 228, 81, 228
2281 };
2282 
2283 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM. */
2284 static const yytype_uint8 yyr1[] =
2285 {
2286  0, 119, 120, 121, 122, 123, 122, 122, 124, 125,
2287  125, 125, 125, 126, 125, 125, 125, 125, 127, 127,
2288  127, 128, 128, 129, 129, 129, 129, 129, 129, 129,
2289  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2290  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2291  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2292  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2293  129, 129, 129, 129, 129, 129, 129, 129, 129, 129,
2294  130, 130, 130, 130, 130, 130, 131, 132, 133, 133,
2295  134, 134, 134, 135, 135, 135, 136, 136, 137, 137,
2296  138, 138, 139, 139, 139, 140, 140, 141, 141, 141,
2297  142, 142, 143, 144, 144, 145, 145, 146, 146, 146,
2298  147, 147, 148, 148, 149, 149, 150, 150, 152, 151,
2299  153, 153, 154, 155, 155, 155, 155, 156, 156, 157,
2300  157, 158, 159, 159, 160, 160, 161, 161, 162, 162,
2301  162, 162, 162, 162, 163, 164, 162, 165, 162, 166,
2302  162, 167, 162, 168, 169, 162, 162, 162, 162, 162,
2303  162, 162, 162, 162, 162, 162, 162, 162, 162, 171,
2304  170, 172, 172, 173, 173, 174, 174, 176, 175, 177,
2305  177, 177, 177, 177, 177, 177, 177, 177, 177, 178,
2306  178, 179, 179, 180, 180, 180, 180, 180, 180, 180,
2307  180, 180, 180, 180, 180, 180, 181, 180, 182, 180,
2308  180, 183, 180, 184, 180, 180, 180, 180, 180, 180,
2309  180, 185, 185, 186, 185, 185, 187, 187, 188, 188,
2310  188, 189, 189, 189, 190, 190, 191, 192, 192, 192,
2311  192, 193, 192, 194, 195, 195, 196, 197, 196, 198,
2312  196, 199, 199, 199, 199, 200, 202, 201, 203, 203,
2313  204, 204, 204, 205, 205, 205, 206, 207, 207, 208,
2314  208, 209, 209, 210, 210, 210, 211, 210, 212, 212,
2315  214, 213, 215, 215, 216, 215, 217, 215, 218, 218,
2316  219, 219, 219, 220, 220, 220, 220, 220, 221, 221,
2317  221, 222, 222, 223, 223, 224, 224, 225, 225, 226,
2318  226, 227, 227, 228, 228
2319 };
2320 
2321 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM. */
2322 static const yytype_int8 yyr2[] =
2323 {
2324  0, 2, 2, 1, 0, 0, 3, 2, 0, 1,
2325  1, 5, 1, 0, 7, 8, 8, 3, 1, 1,
2326  4, 0, 1, 1, 1, 2, 4, 2, 4, 2,
2327  2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
2328  3, 3, 1, 4, 6, 2, 5, 3, 3, 3,
2329  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2330  3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
2331  3, 3, 3, 3, 3, 3, 4, 6, 2, 4,
2332  1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
2333  1, 2, 2, 1, 1, 1, 1, 3, 1, 3,
2334  0, 1, 3, 2, 1, 1, 0, 3, 4, 5,
2335  0, 1, 2, 0, 1, 0, 1, 1, 3, 3,
2336  0, 1, 3, 3, 3, 3, 3, 3, 0, 5,
2337  2, 3, 0, 0, 1, 2, 1, 0, 4, 1,
2338  3, 2, 4, 1, 1, 2, 2, 1, 1, 2,
2339  1, 1, 3, 5, 0, 0, 5, 0, 4, 0,
2340  6, 0, 9, 0, 0, 9, 2, 3, 5, 2,
2341  2, 3, 2, 2, 3, 4, 7, 1, 3, 0,
2342  3, 3, 2, 1, 3, 1, 3, 0, 2, 2,
2343  2, 2, 2, 2, 2, 2, 2, 2, 4, 0,
2344  1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
2345  1, 1, 1, 1, 1, 2, 0, 6, 0, 5,
2346  2, 0, 6, 0, 5, 2, 6, 5, 1, 4,
2347  4, 0, 3, 0, 5, 3, 1, 3, 1, 3,
2348  2, 1, 3, 3, 1, 3, 3, 1, 4, 5,
2349  5, 0, 5, 1, 0, 2, 0, 0, 3, 0,
2350  4, 2, 2, 1, 3, 2, 0, 6, 1, 3,
2351  0, 4, 4, 1, 3, 1, 3, 0, 1, 2,
2352  1, 3, 1, 4, 3, 4, 0, 5, 1, 0,
2353  0, 3, 2, 2, 0, 5, 0, 6, 0, 2,
2354  0, 2, 5, 1, 1, 1, 1, 1, 0, 2,
2355  2, 0, 3, 0, 1, 1, 3, 4, 4, 0,
2356  3, 0, 2, 1, 3
2357 };
2358 
2359 
2360 enum { YYENOMEM = -2 };
2361 
2362 #define yyerrok (yyerrstatus = 0)
2363 #define yyclearin (yychar = YYEMPTY)
2364 
2365 #define YYACCEPT goto yyacceptlab
2366 #define YYABORT goto yyabortlab
2367 #define YYERROR goto yyerrorlab
2368 #define YYNOMEM goto yyexhaustedlab
2369 
2370 
2371 #define YYRECOVERING() (!!yyerrstatus)
2372 
2373 #define YYBACKUP(Token, Value) \
2374  do \
2375  if (yychar == YYEMPTY) \
2376  { \
2377  yychar = (Token); \
2378  yylval = (Value); \
2379  YYPOPSTACK (yylen); \
2380  yystate = *yyssp; \
2381  goto yybackup; \
2382  } \
2383  else \
2384  { \
2385  yyerror (YY_("syntax error: cannot back up")); \
2386  YYERROR; \
2387  } \
2388  while (0)
2389 
2390 /* Backward compatibility with an undocumented macro.
2391  Use YYerror or YYUNDEF. */
2392 #define YYERRCODE YYUNDEF
2393 
2394 
2395 /* Enable debugging if requested. */
2396 #if YYDEBUG
2397 
2398 # ifndef YYFPRINTF
2399 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */
2400 # define YYFPRINTF fprintf
2401 # endif
2402 
2403 # define YYDPRINTF(Args) \
2404 do { \
2405  if (yydebug) \
2406  YYFPRINTF Args; \
2407 } while (0)
2408 
2409 
2410 
2411 
2412 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \
2413 do { \
2414  if (yydebug) \
2415  { \
2416  YYFPRINTF (stderr, "%s ", Title); \
2417  yy_symbol_print (stderr, \
2418  Kind, Value); \
2419  YYFPRINTF (stderr, "\n"); \
2420  } \
2421 } while (0)
2422 
2423 
2424 /*-----------------------------------.
2425 | Print this symbol's value on YYO. |
2426 `-----------------------------------*/
2427 
2428 static void
2430  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2431 {
2432  FILE *yyoutput = yyo;
2433  YY_USE (yyoutput);
2434  if (!yyvaluep)
2435  return;
2437  YY_USE (yykind);
2439 }
2440 
2441 
2442 /*---------------------------.
2443 | Print this symbol on YYO. |
2444 `---------------------------*/
2445 
2446 static void
2447 yy_symbol_print (FILE *yyo,
2448  yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep)
2449 {
2450  YYFPRINTF (yyo, "%s %s (",
2451  yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind));
2452 
2453  yy_symbol_value_print (yyo, yykind, yyvaluep);
2454  YYFPRINTF (yyo, ")");
2455 }
2456 
2457 /*------------------------------------------------------------------.
2458 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
2459 | TOP (included). |
2460 `------------------------------------------------------------------*/
2461 
2462 static void
2464 {
2465  YYFPRINTF (stderr, "Stack now");
2466  for (; yybottom <= yytop; yybottom++)
2467  {
2468  int yybot = *yybottom;
2469  YYFPRINTF (stderr, " %d", yybot);
2470  }
2471  YYFPRINTF (stderr, "\n");
2472 }
2473 
2474 # define YY_STACK_PRINT(Bottom, Top) \
2475 do { \
2476  if (yydebug) \
2477  yy_stack_print ((Bottom), (Top)); \
2478 } while (0)
2479 
2480 
2481 /*------------------------------------------------.
2482 | Report that the YYRULE is going to be reduced. |
2483 `------------------------------------------------*/
2484 
2485 static void
2487  int yyrule)
2488 {
2489  int yylno = yyrline[yyrule];
2490  int yynrhs = yyr2[yyrule];
2491  int yyi;
2492  YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n",
2493  yyrule - 1, yylno);
2494  /* The symbols being reduced. */
2495  for (yyi = 0; yyi < yynrhs; yyi++)
2496  {
2497  YYFPRINTF (stderr, " $%d = ", yyi + 1);
2498  yy_symbol_print (stderr,
2499  YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]),
2500  &yyvsp[(yyi + 1) - (yynrhs)]);
2501  YYFPRINTF (stderr, "\n");
2502  }
2503 }
2504 
2505 # define YY_REDUCE_PRINT(Rule) \
2506 do { \
2507  if (yydebug) \
2508  yy_reduce_print (yyssp, yyvsp, Rule); \
2509 } while (0)
2510 
2511 /* Nonzero means print parse trace. It is left uninitialized so that
2512  multiple parsers can coexist. */
2514 #else /* !YYDEBUG */
2515 # define YYDPRINTF(Args) ((void) 0)
2516 # define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
2517 # define YY_STACK_PRINT(Bottom, Top)
2518 # define YY_REDUCE_PRINT(Rule)
2519 #endif /* !YYDEBUG */
2520 
2521 
2522 /* YYINITDEPTH -- initial size of the parser's stacks. */
2523 #ifndef YYINITDEPTH
2524 # define YYINITDEPTH 200
2525 #endif
2526 
2527 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
2528  if the built-in stack extension method is used).
2529 
2530  Do not make this value too large; the results are undefined if
2531  YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
2532  evaluated with infinite-precision integer arithmetic. */
2533 
2534 #ifndef YYMAXDEPTH
2535 # define YYMAXDEPTH 10000
2536 #endif
2537 
2538 
2539 
2540 
2541 
2542 
2543 /*-----------------------------------------------.
2544 | Release the memory associated to this symbol. |
2545 `-----------------------------------------------*/
2546 
2547 static void
2548 yydestruct (const char *yymsg,
2549  yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
2550 {
2551  YY_USE (yyvaluep);
2552  if (!yymsg)
2553  yymsg = "Deleting";
2554  YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
2555 
2557  YY_USE (yykind);
2559 }
2560 
2561 
2562 /* Lookahead token kind. */
2564 
2565 /* The semantic value of the lookahead symbol. */
2567 /* Number of syntax errors so far. */
2569 
2570 
2571 
2572 
2573 /*----------.
2574 | yyparse. |
2575 `----------*/
2576 
2577 int
2578 yyparse (void)
2579 {
2580  yy_state_fast_t yystate = 0;
2581  /* Number of tokens to shift before error messages enabled. */
2582  int yyerrstatus = 0;
2583 
2584  /* Refer to the stacks through separate pointers, to allow yyoverflow
2585  to reallocate them elsewhere. */
2586 
2587  /* Their size. */
2588  YYPTRDIFF_T yystacksize = YYINITDEPTH;
2589 
2590  /* The state stack: array, bottom, top. */
2591  yy_state_t yyssa[YYINITDEPTH];
2592  yy_state_t *yyss = yyssa;
2593  yy_state_t *yyssp = yyss;
2594 
2595  /* The semantic value stack: array, bottom, top. */
2596  YYSTYPE yyvsa[YYINITDEPTH];
2597  YYSTYPE *yyvs = yyvsa;
2598  YYSTYPE *yyvsp = yyvs;
2599 
2600  int yyn;
2601  /* The return value of yyparse. */
2602  int yyresult;
2603  /* Lookahead symbol kind. */
2605  /* The variables used to return semantic value and location from the
2606  action routines. */
2607  YYSTYPE yyval;
2608 
2609 
2610 
2611 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
2612 
2613  /* The number of symbols on the RHS of the reduced rule.
2614  Keep to zero when no symbol should be popped. */
2615  int yylen = 0;
2616 
2617  YYDPRINTF ((stderr, "Starting parse\n"));
2618 
2619  yychar = YYEMPTY; /* Cause a token to be read. */
2620 
2621  goto yysetstate;
2622 
2623 
2624 /*------------------------------------------------------------.
2625 | yynewstate -- push a new state, which is found in yystate. |
2626 `------------------------------------------------------------*/
2627 yynewstate:
2628  /* In all cases, when you get here, the value and location stacks
2629  have just been pushed. So pushing a state here evens the stacks. */
2630  yyssp++;
2631 
2632 
2633 /*--------------------------------------------------------------------.
2634 | yysetstate -- set current state (the top of the stack) to yystate. |
2635 `--------------------------------------------------------------------*/
2636 yysetstate:
2637  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
2638  YY_ASSERT (0 <= yystate && yystate < YYNSTATES);
2640  *yyssp = YY_CAST (yy_state_t, yystate);
2642  YY_STACK_PRINT (yyss, yyssp);
2643 
2644  if (yyss + yystacksize - 1 <= yyssp)
2645 #if !defined yyoverflow && !defined YYSTACK_RELOCATE
2646  YYNOMEM;
2647 #else
2648  {
2649  /* Get the current used size of the three stacks, in elements. */
2650  YYPTRDIFF_T yysize = yyssp - yyss + 1;
2651 
2652 # if defined yyoverflow
2653  {
2654  /* Give user a chance to reallocate the stack. Use copies of
2655  these so that the &'s don't force the real ones into
2656  memory. */
2657  yy_state_t *yyss1 = yyss;
2658  YYSTYPE *yyvs1 = yyvs;
2659 
2660  /* Each stack pointer address is followed by the size of the
2661  data in use in that stack, in bytes. This used to be a
2662  conditional around just the two extra args, but that might
2663  be undefined if yyoverflow is a macro. */
2664  yyoverflow (YY_("memory exhausted"),
2665  &yyss1, yysize * YYSIZEOF (*yyssp),
2666  &yyvs1, yysize * YYSIZEOF (*yyvsp),
2667  &yystacksize);
2668  yyss = yyss1;
2669  yyvs = yyvs1;
2670  }
2671 # else /* defined YYSTACK_RELOCATE */
2672  /* Extend the stack our own way. */
2673  if (YYMAXDEPTH <= yystacksize)
2674  YYNOMEM;
2675  yystacksize *= 2;
2676  if (YYMAXDEPTH < yystacksize)
2677  yystacksize = YYMAXDEPTH;
2678 
2679  {
2680  yy_state_t *yyss1 = yyss;
2681  union yyalloc *yyptr =
2682  YY_CAST (union yyalloc *,
2683  YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize))));
2684  if (! yyptr)
2685  YYNOMEM;
2686  YYSTACK_RELOCATE (yyss_alloc, yyss);
2687  YYSTACK_RELOCATE (yyvs_alloc, yyvs);
2688 # undef YYSTACK_RELOCATE
2689  if (yyss1 != yyssa)
2690  YYSTACK_FREE (yyss1);
2691  }
2692 # endif
2693 
2694  yyssp = yyss + yysize - 1;
2695  yyvsp = yyvs + yysize - 1;
2696 
2698  YYDPRINTF ((stderr, "Stack size increased to %ld\n",
2699  YY_CAST (long, yystacksize)));
2701 
2702  if (yyss + yystacksize - 1 <= yyssp)
2703  YYABORT;
2704  }
2705 #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */
2706 
2707 
2708  if (yystate == YYFINAL)
2709  YYACCEPT;
2710 
2711  goto yybackup;
2712 
2713 
2714 /*-----------.
2715 | yybackup. |
2716 `-----------*/
2717 yybackup:
2718  /* Do appropriate processing given the current state. Read a
2719  lookahead token if we need one and don't already have one. */
2720 
2721  /* First try to decide what to do without reference to lookahead token. */
2722  yyn = yypact[yystate];
2723  if (yypact_value_is_default (yyn))
2724  goto yydefault;
2725 
2726  /* Not known => get a lookahead token if don't already have one. */
2727 
2728  /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */
2729  if (yychar == YYEMPTY)
2730  {
2731  YYDPRINTF ((stderr, "Reading a token\n"));
2732  yychar = yylex ();
2733  }
2734 
2735  if (yychar <= YYEOF)
2736  {
2737  yychar = YYEOF;
2738  yytoken = YYSYMBOL_YYEOF;
2739  YYDPRINTF ((stderr, "Now at end of input.\n"));
2740  }
2741  else if (yychar == YYerror)
2742  {
2743  /* The scanner already issued an error message, process directly
2744  to error recovery. But do not keep the error token as
2745  lookahead, it is too special and may lead us to an endless
2746  loop in error recovery. */
2747  yychar = YYUNDEF;
2748  yytoken = YYSYMBOL_YYerror;
2749  goto yyerrlab1;
2750  }
2751  else
2752  {
2753  yytoken = YYTRANSLATE (yychar);
2754  YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
2755  }
2756 
2757  /* If the proper action on seeing token YYTOKEN is to reduce or to
2758  detect an error, take that action. */
2759  yyn += yytoken;
2760  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
2761  goto yydefault;
2762  yyn = yytable[yyn];
2763  if (yyn <= 0)
2764  {
2765  if (yytable_value_is_error (yyn))
2766  goto yyerrlab;
2767  yyn = -yyn;
2768  goto yyreduce;
2769  }
2770 
2771  /* Count tokens shifted since error; after three, turn off error
2772  status. */
2773  if (yyerrstatus)
2774  yyerrstatus--;
2775 
2776  /* Shift the lookahead token. */
2777  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
2778  yystate = yyn;
2780  *++yyvsp = yylval;
2782 
2783  /* Discard the shifted token. */
2784  yychar = YYEMPTY;
2785  goto yynewstate;
2786 
2787 
2788 /*-----------------------------------------------------------.
2789 | yydefault -- do the default action for the current state. |
2790 `-----------------------------------------------------------*/
2791 yydefault:
2792  yyn = yydefact[yystate];
2793  if (yyn == 0)
2794  goto yyerrlab;
2795  goto yyreduce;
2796 
2797 
2798 /*-----------------------------.
2799 | yyreduce -- do a reduction. |
2800 `-----------------------------*/
2801 yyreduce:
2802  /* yyn is the number of a rule to reduce with. */
2803  yylen = yyr2[yyn];
2804 
2805  /* If YYLEN is nonzero, implement the default value of the action:
2806  '$$ = $1'.
2807 
2808  Otherwise, the following line sets YYVAL to garbage.
2809  This behavior is undocumented and Bison
2810  users should not rely upon it. Assigning to YYVAL
2811  unconditionally makes the parser a bit smaller, and it avoids a
2812  GCC warning that YYVAL may be used uninitialized. */
2813  yyval = yyvsp[1-yylen];
2814 
2815 
2816  YY_REDUCE_PRINT (yyn);
2817  switch (yyn)
2818  {
2819  case 2: /* interpret: file TK_EOF */
2820 #line 776 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2821  {YYACCEPT;}
2822 #line 2823 "cyacc.tab.c"
2823  break;
2824 
2825  case 3: /* file: globals */
2826 #line 778 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2827  {
2828  /* To handle special case: compilation unit module */
2829  list dsl = (yyvsp[0].liste);
2830  list dl = statements_to_declarations(dsl);
2831 
2832  pips_assert("Here, only continue statements are expected",
2833  continue_statements_p(dsl));
2834 
2835  if (true /* dl != NIL*/) { /* A C file with comments only is OK */
2838  pips_assert("Each variable is declared once", gen_once_p(dl));
2839  pips_internal_error("Compilation unit rule used for non"
2840  " compilation unit %s\n",
2842  }
2843  ifdebug(8) {
2844  pips_debug(8, "Declaration list for compilation unit %s: ",
2846  print_entities(dl);
2847  pips_debug(8, "\n");
2848  }
2855  if(ENDP(dl)) {
2856  pips_user_warning("ISO C forbids an empty source file\n");
2857  }
2858  }
2859  }
2860  }
2861 #line 2862 "cyacc.tab.c"
2862  break;
2863 
2864  case 4: /* globals: %empty */
2865 #line 815 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2866  { (yyval.liste) = NIL; }
2867 #line 2868 "cyacc.tab.c"
2868  break;
2869 
2870  case 5: /* $@1: %empty */
2871 #line 816 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2872  {is_external = true; }
2873 #line 2874 "cyacc.tab.c"
2874  break;
2875 
2876  case 6: /* globals: $@1 global globals */
2877 #line 817 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2878  {
2879  list dsl = (yyvsp[0].liste);
2880  list gdsl = (yyvsp[-1].liste);
2881 
2882  /* PRAGMA */
2883  if(!ENDP(dsl) && gen_length(gdsl)==1)
2884  {
2885  statement stmt = STATEMENT(CAR(dsl));
2886  statement stmt_pragma = STATEMENT(CAR(gdsl));
2887  list exs = extensions_extension(statement_extensions(stmt_pragma));
2888  if (!ENDP(exs))
2889  {
2892  gen_full_free_list(gdsl);
2893  gdsl = NIL;
2894  }
2895  }
2896 
2897  ifdebug(1) { // the successive calls to statements_to_declarations are too costly, so I only activate the test upond debug(1)
2898  list dl = statements_to_declarations(dsl);
2899  /* Each variable should be declared only
2900  once. Type and initial value conflict
2901  should have been detected earlier. */
2903  pips_assert("Each variable is declared once", gen_once_p(dl));
2904  }
2905  ifdebug(9) {
2906  list gdl = statements_to_declarations(gdsl);
2907  fprintf(stderr, "New variables $2 (%p) are declared\n", gdl);
2908  print_entities(gdl);
2909  fprintf(stderr, "\n");
2910  fprintf(stderr, "*******Current declarations dl (%p) are: \n", dl);
2911  print_entities(dl);
2912  fprintf(stderr, "\n");
2913  gen_free_list(gdl);
2914  }
2915  gen_free_list(dl);
2916  }
2917 
2918  /* The order of declarations must be
2919  preserved: a structure is declared before
2920  it is used to declare a variable */
2921  /*
2922  $$ = NIL;
2923  MAP(ENTITY, v, {
2924  if(!gen_in_list_p(v, $3))
2925  $$ = gen_nconc($$, CONS(ENTITY, v , NIL));}, $2);
2926  $$ = gen_nconc($$, $3);
2927  */
2928  /* Redeclarations are possible in C as long as they are compatible */
2929  /* It is assumed that compatibility is checked somewhere else... */
2930  (yyval.liste) = gen_nconc(gdsl, dsl);
2931 
2932  ifdebug(9) {
2933  list udl = statements_to_declarations((yyval.liste));
2934  fprintf(stderr, "*******Updated $$ declarations (%p) are: \n", (yyval.liste));
2935  fprintf(stderr, "\n");
2936  if(ENDP((yyval.liste)))
2937  fprintf(stderr, "Empty list\n");
2938  else
2939  print_entities(udl);
2940  fprintf(stderr, "\n");
2941  }
2942 
2944  list udl = statements_to_declarations((yyval.liste));
2945  pips_assert("Each variable is declared once", gen_once_p(udl));
2947  if(strcmp(entity_local_name(m),"main")==0) {
2948  type mt = entity_type(m);
2949  if(type_functional_p(mt)) {
2951  if(!scalar_integer_type_p(rt))
2952  /* Too late for line numbers, do not use c_parser_user_warning */
2953  c_parser_user_warning("The \"main\" function should return an int value\n");
2954  }
2955  else {
2956  pips_internal_error("A function does not have a functional type\n");
2957  }
2958  }
2960  }
2961  }
2962 #line 2963 "cyacc.tab.c"
2963  break;
2964 
2965  case 7: /* globals: TK_SEMICOLON globals */
2966 #line 902 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2967  {
2968  pips_assert("Declarations are unique", gen_once_p((yyvsp[0].liste)));
2969  ifdebug(8) {
2970  list udl = statements_to_declarations((yyvsp[0].liste));
2971  fprintf(stderr, "*******Current declarations are: \n");
2972  print_entities(udl);
2973  fprintf(stderr, "\n");
2974  }
2975  (yyval.liste) = (yyvsp[0].liste);
2976  }
2977 #line 2978 "cyacc.tab.c"
2978  break;
2979 
2980  case 8: /* location: %empty */
2981 #line 915 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2982  {}
2983 #line 2984 "cyacc.tab.c"
2984  break;
2985 
2986  case 9: /* global: declaration */
2987 #line 919 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2988  {pips_debug(1, "Reduction %d: declaration -> global\n", __LINE__); /* discard_C_comment();*/ /* fprintf(stderr, "declaration\n");*/ declaration_counter++; }
2989 #line 2990 "cyacc.tab.c"
2990  break;
2991 
2992  case 10: /* global: function_def */
2993 #line 920 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
2994  { (yyval.liste) = NIL;}
2995 #line 2996 "cyacc.tab.c"
2996  break;
2997 
2998  case 11: /* global: TK_ASM TK_LPAREN string_constant TK_RPAREN TK_SEMICOLON */
2999 #line 922 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3000  {
3001  CParserError("ASM not implemented\n");
3002  (yyval.liste) = NIL;
3003  }
3004 #line 3005 "cyacc.tab.c"
3005  break;
3006 
3007  case 12: /* global: TK_PRAGMA */
3008 #line 927 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3009  {
3010  /*
3011  CParserError("PRAGMA not implemented at top level\n");
3012  $$ = NIL;
3013  */
3015  add_pragma_str_to_statement(s, (yyvsp[0].string), true);
3016  (yyval.liste) = CONS(STATEMENT, s, NIL);
3017  }
3018 #line 3019 "cyacc.tab.c"
3019  break;
3020 
3021  case 13: /* $@2: %empty */
3022 #line 940 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3023  {
3024  entity oe = FindOrCreateEntity(TOP_LEVEL_MODULE_NAME,(yyvsp[-1].string));
3025  free((yyvsp[-1].string));
3026  entity e = oe; //RenameFunctionEntity(oe);
3027  pips_debug(2,"Create function %s with old-style function prototype\n",(yyvsp[-1].string));
3029  //entity_storage(e) = make_storage_return(e);
3031  }
3034  //pips_assert("e is a module", module_name_p(entity_module_name(e)));
3035  else
3036  CCleanLocalEntities(oe);
3037  PushFunction(e);
3038  stack_push((char *) make_basic_logical(true),FormalStack);
3039  stack_push((char *) make_basic_int(1),OffsetStack);
3040  // FI: commented out while looking for
3041  //declaration comments
3042  //discard_C_comment();
3043  }
3044 #line 3045 "cyacc.tab.c"
3045  break;
3046 
3047  case 14: /* global: TK_IDENT TK_LPAREN $@2 old_parameter_list_ne TK_RPAREN old_pardef_list TK_SEMICOLON */
3048 #line 962 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3049  {
3050  entity e = GetFunction();
3051  if (type_undefined_p(entity_type(e)))
3052  {
3053  list paras = MakeParameterList((yyvsp[-3].liste),(yyvsp[-1].liste),FunctionStack);
3056  }
3057  pips_assert("Current function entity is consistent",entity_consistent_p(e));
3058  PopFunction();
3061  gen_free_list((yyvsp[-3].liste));
3062  (yyval.liste) = NIL;
3063  // FI: commented out while trying to
3064  //retrieve all comments
3065  //discard_C_comment();
3066  }
3067 #line 3068 "cyacc.tab.c"
3068  break;
3069 
3070  case 15: /* global: TK_AT_TRANSFORM TK_LBRACE global TK_RBRACE TK_IDENT TK_LBRACE globals TK_RBRACE */
3071 #line 1007 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3072  {
3073  CParserError("CIL AT not implemented\n");
3074  (yyval.liste) = NIL;
3075  }
3076 #line 3077 "cyacc.tab.c"
3077  break;
3078 
3079  case 16: /* global: TK_AT_TRANSFORMEXPR TK_LBRACE expression TK_RBRACE TK_IDENT TK_LBRACE expression TK_RBRACE */
3080 #line 1013 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3081  {
3082  CParserError("CIL AT not implemented\n");
3083  (yyval.liste) = NIL;
3084  }
3085 #line 3086 "cyacc.tab.c"
3086  break;
3087 
3088  case 17: /* global: location error TK_SEMICOLON */
3089 #line 1018 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3090  {
3091  CParserError("Parse error: location error TK_SEMICOLON \n");
3092  (yyval.liste) = NIL;
3093  }
3094 #line 3095 "cyacc.tab.c"
3095  break;
3096 
3097  case 18: /* id_or_typename: TK_IDENT */
3098 #line 1026 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3099  {}
3100 #line 3101 "cyacc.tab.c"
3101  break;
3102 
3103  case 19: /* id_or_typename: TK_NAMED_TYPE */
3104 #line 1028 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3105  {}
3106 #line 3107 "cyacc.tab.c"
3107  break;
3108 
3109  case 20: /* id_or_typename: TK_AT_NAME TK_LPAREN TK_IDENT TK_RPAREN */
3110 #line 1030 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3111  {
3112  CParserError("CIL AT not implemented\n");
3113  }
3114 #line 3115 "cyacc.tab.c"
3115  break;
3116 
3117  case 23: /* expression: constant */
3118 #line 1044 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3119  {
3120  (yyval.expression) = MakeNullaryCall((yyvsp[0].entity));
3121  }
3122 #line 3123 "cyacc.tab.c"
3123  break;
3124 
3125  case 24: /* expression: TK_IDENT */
3126 #line 1048 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3127  {
3128  /* Create the expression corresponding to this identifier */
3129  (yyval.expression) = IdentifierToExpression((yyvsp[0].string));
3130  free((yyvsp[0].string));
3131  }
3132 #line 3133 "cyacc.tab.c"
3133  break;
3134 
3135  case 25: /* expression: TK_SIZEOF expression */
3136 #line 1054 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3137  {
3138  (yyval.expression) = MakeSizeofExpression((yyvsp[0].expression));
3139  }
3140 #line 3141 "cyacc.tab.c"
3141  break;
3142 
3143  case 26: /* expression: TK_SIZEOF TK_LPAREN type_name TK_RPAREN */
3144 #line 1058 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3145  {
3146  (yyval.expression) = MakeSizeofType((yyvsp[-1].type));
3147  }
3148 #line 3149 "cyacc.tab.c"
3149  break;
3150 
3151  case 27: /* expression: TK_ALIGNOF expression */
3152 #line 1062 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3153  {
3154  CParserError("ALIGNOF not implemented\n");
3155  }
3156 #line 3157 "cyacc.tab.c"
3157  break;
3158 
3159  case 28: /* expression: TK_ALIGNOF TK_LPAREN type_name TK_RPAREN */
3160 #line 1066 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3161  {
3162  CParserError("ALIGNOF not implemented\n");
3163  }
3164 #line 3165 "cyacc.tab.c"
3165  break;
3166 
3167  case 29: /* expression: TK_PLUS expression */
3168 #line 1070 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3169  {
3171  }
3172 #line 3173 "cyacc.tab.c"
3173  break;
3174 
3175  case 30: /* expression: TK_MINUS expression */
3176 #line 1074 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3177  {
3179  }
3180 #line 3181 "cyacc.tab.c"
3181  break;
3182 
3183  case 31: /* expression: TK_STAR expression */
3184 #line 1078 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3185  {
3187  }
3188 #line 3189 "cyacc.tab.c"
3189  break;
3190 
3191  case 32: /* expression: TK_AND expression */
3192 #line 1082 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3193  {
3195  }
3196 #line 3197 "cyacc.tab.c"
3197  break;
3198 
3199  case 33: /* expression: TK_EXCLAM expression */
3200 #line 1086 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3201  {
3203  }
3204 #line 3205 "cyacc.tab.c"
3205  break;
3206 
3207  case 34: /* expression: TK_TILDE expression */
3208 #line 1090 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3209  {
3211  }
3212 #line 3213 "cyacc.tab.c"
3213  break;
3214 
3215  case 35: /* expression: TK_PLUS_PLUS expression */
3216 #line 1094 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3217  {
3219  }
3220 #line 3221 "cyacc.tab.c"
3221  break;
3222 
3223  case 36: /* expression: expression TK_PLUS_PLUS */
3224 #line 1098 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3225  {
3227  }
3228 #line 3229 "cyacc.tab.c"
3229  break;
3230 
3231  case 37: /* expression: TK_MINUS_MINUS expression */
3232 #line 1102 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3233  {
3235  }
3236 #line 3237 "cyacc.tab.c"
3237  break;
3238 
3239  case 38: /* expression: expression TK_MINUS_MINUS */
3240 #line 1106 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3241  {
3243  }
3244 #line 3245 "cyacc.tab.c"
3245  break;
3246 
3247  case 39: /* expression: expression TK_ARROW id_or_typename */
3248 #line 1110 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3249  {
3250  /* Find the struct/union type of the expression
3251  then the struct/union member entity and transform it to expression */
3252  expression exp = MemberIdentifierToExpression((yyvsp[-2].expression),(yyvsp[0].string));
3254  }
3255 #line 3256 "cyacc.tab.c"
3256  break;
3257 
3258  case 40: /* expression: expression TK_DOT id_or_typename */
3259 #line 1117 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3260  {
3261  expression exp = MemberIdentifierToExpression((yyvsp[-2].expression),(yyvsp[0].string));
3263  }
3264 #line 3265 "cyacc.tab.c"
3265  break;
3266 
3267  case 41: /* expression: TK_LPAREN block TK_RPAREN */
3268 #line 1122 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3269  {
3270  CParserError("GNU extension not implemented\n");
3271  }
3272 #line 3273 "cyacc.tab.c"
3273  break;
3274 
3275  case 42: /* expression: paren_comma_expression */
3276 #line 1126 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3277  {
3278  if(false) {
3279  char * ccc = pop_current_C_comment();
3280  if(!empty_comments_p(ccc)) {
3281  bool fullspace=true;
3282  for(const char *iter=ccc;*iter;++iter)
3283  if(!(fullspace=(isspace(*iter)&&*iter!='\n')))
3284  break;
3285  if(fullspace)
3286  free(ccc);
3287  else {
3288  /* paren_comma_expression is a list of
3289  expressions, maybe reduced to one */
3291  expression_comment=ccc;
3292  else {
3293  char *tmp = expression_comment;
3295  free(tmp);
3296  }
3297  }
3298  }
3300  }
3301  (yyval.expression) = MakeCommaExpression((yyvsp[0].liste));
3302  }
3303 #line 3304 "cyacc.tab.c"
3304  break;
3305 
3306  case 43: /* expression: expression TK_LPAREN arguments TK_RPAREN */
3307 #line 1153 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3308  {
3309  (yyval.expression) = MakeFunctionExpression((yyvsp[-3].expression),(yyvsp[-1].liste));
3310  }
3311 #line 3312 "cyacc.tab.c"
3312  break;
3313 
3314  case 44: /* expression: TK_BUILTIN_VA_ARG TK_LPAREN expression TK_COMMA type_name TK_RPAREN */
3315 #line 1157 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3316  {
3317 
3318  expression e = (yyvsp[-3].expression);
3319  type t = (yyvsp[-1].type);
3322  list l = CONS(SIZEOFEXPRESSION, e1,
3323  CONS(SIZEOFEXPRESSION, e2, NIL));
3324  syntax s = make_syntax_va_arg(l);
3326 
3327  (yyval.expression) = r;
3328  //CParserError("BUILTIN_VA_ARG not implemented\n");
3329  }
3330 #line 3331 "cyacc.tab.c"
3331  break;
3332 
3333  case 45: /* expression: expression bracket_comma_expression */
3334 #line 1172 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3335  {
3336  (yyval.expression) = MakeArrayExpression((yyvsp[-1].expression),(yyvsp[0].liste));
3337  }
3338 #line 3339 "cyacc.tab.c"
3339  break;
3340 
3341  case 46: /* expression: expression TK_QUEST opt_expression TK_COLON expression */
3342 #line 1176 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3343  {
3344  (yyval.expression) = MakeTernaryCall(CreateIntrinsic(CONDITIONAL_OPERATOR_NAME), (yyvsp[-4].expression), (yyvsp[-2].expression), (yyvsp[0].expression));
3345  }
3346 #line 3347 "cyacc.tab.c"
3347  break;
3348 
3349  case 47: /* expression: expression TK_PLUS expression */
3350 #line 1180 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3351  {
3353  }
3354 #line 3355 "cyacc.tab.c"
3355  break;
3356 
3357  case 48: /* expression: expression TK_MINUS expression */
3358 #line 1184 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3359  {
3361  }
3362 #line 3363 "cyacc.tab.c"
3363  break;
3364 
3365  case 49: /* expression: expression TK_STAR expression */
3366 #line 1188 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3367  {
3369  }
3370 #line 3371 "cyacc.tab.c"
3371  break;
3372 
3373  case 50: /* expression: expression TK_SLASH expression */
3374 #line 1192 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3375  {
3377  }
3378 #line 3379 "cyacc.tab.c"
3379  break;
3380 
3381  case 51: /* expression: expression TK_PERCENT expression */
3382 #line 1196 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3383  {
3385  }
3386 #line 3387 "cyacc.tab.c"
3387  break;
3388 
3389  case 52: /* expression: expression TK_AND_AND expression */
3390 #line 1200 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3391  {
3393  }
3394 #line 3395 "cyacc.tab.c"
3395  break;
3396 
3397  case 53: /* expression: expression TK_PIPE_PIPE expression */
3398 #line 1204 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3399  {
3401  }
3402 #line 3403 "cyacc.tab.c"
3403  break;
3404 
3405  case 54: /* expression: expression TK_AND expression */
3406 #line 1208 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3407  {
3409  }
3410 #line 3411 "cyacc.tab.c"
3411  break;
3412 
3413  case 55: /* expression: expression TK_PIPE expression */
3414 #line 1212 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3415  {
3417  }
3418 #line 3419 "cyacc.tab.c"
3419  break;
3420 
3421  case 56: /* expression: expression TK_CIRC expression */
3422 #line 1216 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3423  {
3425  }
3426 #line 3427 "cyacc.tab.c"
3427  break;
3428 
3429  case 57: /* expression: expression TK_EQ_EQ expression */
3430 #line 1220 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3431  {
3433  }
3434 #line 3435 "cyacc.tab.c"
3435  break;
3436 
3437  case 58: /* expression: expression TK_EXCLAM_EQ expression */
3438 #line 1224 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3439  {
3441  }
3442 #line 3443 "cyacc.tab.c"
3443  break;
3444 
3445  case 59: /* expression: expression TK_INF expression */
3446 #line 1228 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3447  {
3449  }
3450 #line 3451 "cyacc.tab.c"
3451  break;
3452 
3453  case 60: /* expression: expression TK_SUP expression */
3454 #line 1232 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3455  {
3457  }
3458 #line 3459 "cyacc.tab.c"
3459  break;
3460 
3461  case 61: /* expression: expression TK_INF_EQ expression */
3462 #line 1236 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3463  {
3465  }
3466 #line 3467 "cyacc.tab.c"
3467  break;
3468 
3469  case 62: /* expression: expression TK_SUP_EQ expression */
3470 #line 1240 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3471  {
3473  }
3474 #line 3475 "cyacc.tab.c"
3475  break;
3476 
3477  case 63: /* expression: expression TK_INF_INF expression */
3478 #line 1244 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3479  {
3481  }
3482 #line 3483 "cyacc.tab.c"
3483  break;
3484 
3485  case 64: /* expression: expression TK_SUP_SUP expression */
3486 #line 1248 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3487  {
3489  }
3490 #line 3491 "cyacc.tab.c"
3491  break;
3492 
3493  case 65: /* expression: expression TK_EQ expression */
3494 #line 1252 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3495  {
3496  expression lhs = (yyvsp[-2].expression);
3497  expression rhs = (yyvsp[0].expression);
3498  /* Check the left hand side expression */
3499  if(expression_reference_p(lhs)) {
3501  entity v = reference_variable(r);
3502  type t = ultimate_type(entity_type(v));
3503  if(type_functional_p(t)) {
3504  c_parser_user_warning("Ill. left hand side reference to function \"%s\""
3505  " or variable \"%s\" not declared\n",
3507  CParserError("Ill. left hand side expression");
3508  }
3509  }
3510  (void) simplify_C_expression(rhs);
3511  (yyval.expression) = make_assign_expression(lhs, rhs);
3512  }
3513 #line 3514 "cyacc.tab.c"
3514  break;
3515 
3516  case 66: /* expression: expression TK_PLUS_EQ expression */
3517 #line 1271 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3518  {
3519  (void) simplify_C_expression((yyvsp[0].expression));
3521  }
3522 #line 3523 "cyacc.tab.c"
3523  break;
3524 
3525  case 67: /* expression: expression TK_MINUS_EQ expression */
3526 #line 1276 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3527  {
3528  (void) simplify_C_expression((yyvsp[0].expression));
3530  }
3531 #line 3532 "cyacc.tab.c"
3532  break;
3533 
3534  case 68: /* expression: expression TK_STAR_EQ expression */
3535 #line 1281 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3536  {
3537  (void) simplify_C_expression((yyvsp[0].expression));
3539  }
3540 #line 3541 "cyacc.tab.c"
3541  break;
3542 
3543  case 69: /* expression: expression TK_SLASH_EQ expression */
3544 #line 1286 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3545  {
3546  (void) simplify_C_expression((yyvsp[0].expression));
3548  }
3549 #line 3550 "cyacc.tab.c"
3550  break;
3551 
3552  case 70: /* expression: expression TK_PERCENT_EQ expression */
3553 #line 1291 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3554  {
3555  (void) simplify_C_expression((yyvsp[0].expression));
3557  }
3558 #line 3559 "cyacc.tab.c"
3559  break;
3560 
3561  case 71: /* expression: expression TK_AND_EQ expression */
3562 #line 1296 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3563  {
3564  (void) simplify_C_expression((yyvsp[0].expression));
3566  }
3567 #line 3568 "cyacc.tab.c"
3568  break;
3569 
3570  case 72: /* expression: expression TK_PIPE_EQ expression */
3571 #line 1301 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3572  {
3573  (void) simplify_C_expression((yyvsp[0].expression));
3575  }
3576 #line 3577 "cyacc.tab.c"
3577  break;
3578 
3579  case 73: /* expression: expression TK_CIRC_EQ expression */
3580 #line 1306 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3581  {
3582  (void) simplify_C_expression((yyvsp[0].expression));
3584  }
3585 #line 3586 "cyacc.tab.c"
3586  break;
3587 
3588  case 74: /* expression: expression TK_INF_INF_EQ expression */
3589 #line 1311 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3590  {
3591  (void) simplify_C_expression((yyvsp[0].expression));
3593  }
3594 #line 3595 "cyacc.tab.c"
3595  break;
3596 
3597  case 75: /* expression: expression TK_SUP_SUP_EQ expression */
3598 #line 1316 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3599  {
3600  (void) simplify_C_expression((yyvsp[0].expression));
3602  }
3603 #line 3604 "cyacc.tab.c"
3604  break;
3605 
3606  case 76: /* expression: TK_LPAREN type_name TK_RPAREN expression */
3607 #line 1321 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3608  {
3609  (yyval.expression) = MakeCastExpression((yyvsp[-2].type),(yyvsp[0].expression));
3610  }
3611 #line 3612 "cyacc.tab.c"
3612  break;
3613 
3614  case 77: /* expression: TK_LPAREN type_name TK_RPAREN TK_LBRACE initializer_list_opt TK_RBRACE */
3615 #line 1326 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3616  {
3617  (yyval.expression) = MakeCastExpression((yyvsp[-4].type),MakeBraceExpression((yyvsp[-1].liste)));
3618  }
3619 #line 3620 "cyacc.tab.c"
3620  break;
3621 
3622  case 78: /* expression: TK_AND_AND TK_IDENT */
3623 #line 1331 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3624  {
3625  CParserError("GCC's address of labels not implemented\n");
3626  }
3627 #line 3628 "cyacc.tab.c"
3628  break;
3629 
3630  case 79: /* expression: TK_AT_EXPR TK_LPAREN TK_IDENT TK_RPAREN */
3631 #line 1335 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3632  {
3633  CParserError("GCC's address of labels not implemented\n");
3634  }
3635 #line 3636 "cyacc.tab.c"
3636  break;
3637 
3638  case 80: /* constant: TK_INTCON */
3639 #line 1342 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3640  { // Do we know about the size? 2, 4 or 8 bytes?
3641  (yyval.entity) = make_C_constant_entity((yyvsp[0].string), is_basic_int, 4);
3642  free((yyvsp[0].string));
3643  }
3644 #line 3645 "cyacc.tab.c"
3645  break;
3646 
3647  case 81: /* constant: TK_FLOATCON */
3648 #line 1347 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3649  {
3650  (yyval.entity) = MakeConstant((yyvsp[0].string), is_basic_float);
3651  free((yyvsp[0].string));
3652  }
3653 #line 3654 "cyacc.tab.c"
3654  break;
3655 
3656  case 82: /* constant: TK_COMPLEXCON */
3657 #line 1352 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3658  {
3659  /* some work left to accomodate imaginary
3660  constants */
3661  (yyval.entity) = MakeConstant((yyvsp[0].string), is_basic_float);
3662  free((yyvsp[0].string));
3663  }
3664 #line 3665 "cyacc.tab.c"
3665  break;
3666 
3667  case 83: /* constant: TK_CHARCON */
3668 #line 1359 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3669  {
3670  (yyval.entity) = make_C_constant_entity((yyvsp[0].string), is_basic_int, 1);
3671  free((yyvsp[0].string));
3672  }
3673 #line 3674 "cyacc.tab.c"
3674  break;
3675 
3676  case 84: /* constant: string_constant */
3677 #line 1364 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3678  {
3679  /* The size will be fixed later, hence 0 here. */
3680  (yyval.entity) = make_C_constant_entity((yyvsp[0].string), is_basic_string, 0);
3681  free((yyvsp[0].string));
3682  }
3683 #line 3684 "cyacc.tab.c"
3684  break;
3685 
3686  case 85: /* constant: wstring_list */
3687 #line 1372 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3688  {
3689  (yyval.entity) = MakeConstant(list_to_string((yyvsp[0].liste)),is_basic_string);
3690  free((yyvsp[0].liste));
3691  }
3692 #line 3693 "cyacc.tab.c"
3693  break;
3694 
3695  case 86: /* string_constant: string_list */
3696 #line 1382 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3697  {
3698  /* Hmmm... Looks like a memory leak on all the
3699  strings... */
3700  (yyval.string) = list_to_string(gen_nreverse((yyvsp[0].liste)));
3701  }
3702 #line 3703 "cyacc.tab.c"
3703  break;
3704 
3705  case 87: /* one_string_constant: TK_STRINGCON */
3706 #line 1391 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3707  {}
3708 #line 3709 "cyacc.tab.c"
3709  break;
3710 
3711  case 88: /* string_list: one_string */
3712 #line 1395 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3713  {
3714  (yyval.liste) = CONS(STRING,(yyvsp[0].string),NIL);
3715  }
3716 #line 3717 "cyacc.tab.c"
3717  break;
3718 
3719  case 89: /* string_list: string_list one_string */
3720 #line 1399 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3721  {
3722  (yyval.liste) = CONS(STRING,(yyvsp[0].string),(yyvsp[-1].liste));
3723  }
3724 #line 3725 "cyacc.tab.c"
3725  break;
3726 
3727  case 90: /* wstring_list: TK_WSTRINGCON */
3728 #line 1406 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3729  {
3730  (yyval.liste) = CONS(STRING,(yyvsp[0].string),NIL);
3731  }
3732 #line 3733 "cyacc.tab.c"
3733  break;
3734 
3735  case 91: /* wstring_list: wstring_list one_string */
3736 #line 1410 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3737  {
3738  (yyval.liste) = CONS(STRING,(yyvsp[0].string),(yyvsp[-1].liste));
3739  }
3740 #line 3741 "cyacc.tab.c"
3741  break;
3742 
3743  case 92: /* wstring_list: wstring_list TK_WSTRINGCON */
3744 #line 1414 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3745  {
3746  (yyval.liste) = gen_nconc((yyvsp[-1].liste),CONS(STRING,(yyvsp[0].string),NIL));
3747  }
3748 #line 3749 "cyacc.tab.c"
3749  break;
3750 
3751  case 93: /* one_string: TK_STRINGCON */
3752 #line 1421 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3753  { }
3754 #line 3755 "cyacc.tab.c"
3755  break;
3756 
3757  case 94: /* one_string: TK_FUNCTION__ */
3758 #line 1423 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3759  { CParserError("TK_FUNCTION not implemented\n"); }
3760 #line 3761 "cyacc.tab.c"
3761  break;
3762 
3763  case 95: /* one_string: TK_PRETTY_FUNCTION__ */
3764 #line 1425 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3765  { CParserError("TK_PRETTY_FUNCTION not implemented\n"); }
3766 #line 3767 "cyacc.tab.c"
3767  break;
3768 
3769  case 96: /* init_expression: expression */
3770 #line 1429 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3771  {
3772  expression ie = (yyvsp[0].expression);
3773  /* ifdebug(8) { */
3774  /* fprintf(stderr, "Initialization expression: "); */
3775  /* print_expression(ie); */
3776  /* fprintf(stderr, "\n"); */
3777  /* } */
3778  (yyval.expression) = ie;
3779  }
3780 #line 3781 "cyacc.tab.c"
3781  break;
3782 
3783  case 97: /* init_expression: TK_LBRACE initializer_list_opt TK_RBRACE */
3784 #line 1439 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3785  {
3786  /* Deduce the size of an array by its initialization ?*/
3787  (yyval.expression) = MakeBraceExpression((yyvsp[-1].liste));
3788  }
3789 #line 3790 "cyacc.tab.c"
3790  break;
3791 
3792  case 98: /* initializer_list: initializer */
3793 #line 1446 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3794  {
3795  (yyval.liste) = CONS(EXPRESSION,(yyvsp[0].expression),NIL);
3796  }
3797 #line 3798 "cyacc.tab.c"
3798  break;
3799 
3800  case 99: /* initializer_list: initializer TK_COMMA initializer_list_opt */
3801 #line 1450 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3802  {
3803  (yyval.liste) = CONS(EXPRESSION,(yyvsp[-2].expression),(yyvsp[0].liste));
3804  }
3805 #line 3806 "cyacc.tab.c"
3806  break;
3807 
3808  case 100: /* initializer_list_opt: %empty */
3809 #line 1455 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3810  { (yyval.liste) = NIL; }
3811 #line 3812 "cyacc.tab.c"
3812  break;
3813 
3814  case 101: /* initializer_list_opt: initializer_list */
3815 #line 1456 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3816  { }
3817 #line 3818 "cyacc.tab.c"
3818  break;
3819 
3820  case 102: /* initializer: init_designators eq_opt init_expression */
3821 #line 1460 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3822  {
3823  CParserError("Complicated initialization not implemented\n");
3824  }
3825 #line 3826 "cyacc.tab.c"
3826  break;
3827 
3828  case 103: /* initializer: gcc_init_designators init_expression */
3829 #line 1464 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3830  {
3831  CParserError("gcc init designators not implemented\n");
3832  }
3833 #line 3834 "cyacc.tab.c"
3834  break;
3835 
3836  case 104: /* initializer: init_expression */
3837 #line 1467 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3838  { }
3839 #line 3840 "cyacc.tab.c"
3840  break;
3841 
3842  case 105: /* eq_opt: TK_EQ */
3843 #line 1471 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3844  { }
3845 #line 3846 "cyacc.tab.c"
3846  break;
3847 
3848  case 106: /* eq_opt: %empty */
3849 #line 1474 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3850  {
3851  CParserError("gcc missing = not implemented\n");
3852  }
3853 #line 3854 "cyacc.tab.c"
3854  break;
3855 
3856  case 107: /* init_designators: TK_DOT id_or_typename init_designators_opt */
3857 #line 1480 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3858  { }
3859 #line 3860 "cyacc.tab.c"
3860  break;
3861 
3862  case 108: /* init_designators: TK_LBRACKET expression TK_RBRACKET init_designators_opt */
3863 #line 1482 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3864  { }
3865 #line 3866 "cyacc.tab.c"
3866  break;
3867 
3868  case 109: /* init_designators: TK_LBRACKET expression TK_ELLIPSIS expression TK_RBRACKET */
3869 #line 1484 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3870  { }
3871 #line 3872 "cyacc.tab.c"
3872  break;
3873 
3874  case 110: /* init_designators_opt: %empty */
3875 #line 1487 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3876  { (yyval.liste) = NIL; }
3877 #line 3878 "cyacc.tab.c"
3878  break;
3879 
3880  case 111: /* init_designators_opt: init_designators */
3881 #line 1488 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3882  {}
3883 #line 3884 "cyacc.tab.c"
3884  break;
3885 
3886  case 112: /* gcc_init_designators: id_or_typename TK_COLON */
3887 #line 1493 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3888  {
3889  CParserError("gcc init designators not implemented\n");
3890  }
3891 #line 3892 "cyacc.tab.c"
3892  break;
3893 
3894  case 113: /* arguments: %empty */
3895 #line 1499 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3896  { (yyval.liste) = NIL; }
3897 #line 3898 "cyacc.tab.c"
3898  break;
3899 
3900  case 114: /* arguments: comma_expression */
3901 #line 1500 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3902  { }
3903 #line 3904 "cyacc.tab.c"
3904  break;
3905 
3906  case 115: /* opt_expression: %empty */
3907 #line 1505 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3908  { (yyval.expression) = expression_undefined; }
3909 #line 3910 "cyacc.tab.c"
3910  break;
3911 
3912  case 116: /* opt_expression: comma_expression */
3913 #line 1508 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3914  { (yyval.expression) = MakeCommaExpression((yyvsp[0].liste)); }
3915 #line 3916 "cyacc.tab.c"
3916  break;
3917 
3918  case 117: /* comma_expression: expression */
3919 #line 1513 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3920  {
3921  pips_debug(1, "Reduction %d: expression -> comma_expression\n", __LINE__);
3922  (void) simplify_C_expression((yyvsp[0].expression));
3923  (yyval.liste) = CONS(EXPRESSION,(yyvsp[0].expression),NIL);
3924  }
3925 #line 3926 "cyacc.tab.c"
3926  break;
3927 
3928  case 118: /* comma_expression: expression TK_COMMA comma_expression */
3929 #line 1519 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3930  {
3931  pips_debug(1, "Reduction %d: expression TK_COMMA comma_expression -> comma_expression\n", __LINE__);
3932  (void) simplify_C_expression((yyvsp[-2].expression));
3933  (yyval.liste) = CONS(EXPRESSION,(yyvsp[-2].expression),(yyvsp[0].liste));
3934  }
3935 #line 3936 "cyacc.tab.c"
3936  break;
3937 
3938  case 119: /* comma_expression: error TK_COMMA comma_expression */
3939 #line 1525 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3940  {
3941  CParserError("Parse error: error TK_COMMA comma_expression \n");
3942  }
3943 #line 3944 "cyacc.tab.c"
3944  break;
3945 
3946  case 120: /* comma_expression_opt: %empty */
3947 #line 1531 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3948  { (yyval.liste) = NIL; }
3949 #line 3950 "cyacc.tab.c"
3950  break;
3951 
3952  case 121: /* comma_expression_opt: comma_expression */
3953 #line 1532 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3954  { }
3955 #line 3956 "cyacc.tab.c"
3956  break;
3957 
3958  case 122: /* statement_paren_comma_expression: TK_LPAREN comma_expression TK_RPAREN */
3959 #line 1537 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3960  {
3964  (yyval.liste) = (yyvsp[-1].liste);
3965  }
3966 #line 3967 "cyacc.tab.c"
3967  break;
3968 
3969  case 123: /* statement_paren_comma_expression: TK_LPAREN error TK_RPAREN */
3970 #line 1544 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3971  {
3972  CParserError("Parse error: TK_LPAREN error TK_RPAREN \n");
3973  }
3974 #line 3975 "cyacc.tab.c"
3975  break;
3976 
3977  case 124: /* paren_comma_expression: TK_LPAREN comma_expression TK_RPAREN */
3978 #line 1550 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3979  {
3980  if(false) {
3983  }
3984  (yyval.liste) = (yyvsp[-1].liste);
3985  }
3986 #line 3987 "cyacc.tab.c"
3987  break;
3988 
3989  case 125: /* paren_comma_expression: TK_LPAREN error TK_RPAREN */
3990 #line 1558 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3991  {
3992  CParserError("Parse error: TK_LPAREN error TK_RPAREN \n");
3993  }
3994 #line 3995 "cyacc.tab.c"
3995  break;
3996 
3997  case 126: /* bracket_comma_expression: TK_LBRACKET comma_expression TK_RBRACKET */
3998 #line 1565 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
3999  {
4000  (yyval.liste) = (yyvsp[-1].liste);
4001  }
4002 #line 4003 "cyacc.tab.c"
4003  break;
4004 
4005  case 127: /* bracket_comma_expression: TK_LBRACKET error TK_RBRACKET */
4006 #line 1569 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4007  {
4008  CParserError("Parse error: TK_LBRACKET error TK_RBRACKET\n");
4009  }
4010 #line 4011 "cyacc.tab.c"
4011  break;
4012 
4013  case 128: /* $@3: %empty */
4014 #line 1578 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4015  { EnterScope();
4016  /* To avoid some parasitic line skipping after the
4017  block opening brace. May be it should be
4018  cleaner to keep this eventual line-break as a
4019  comment in the statement, for subtler user
4020  source layout representation? */
4022  }
4023 #line 4024 "cyacc.tab.c"
4024  break;
4025 
4026  case 129: /* statements_inside_block: TK_LBRACE $@3 local_labels block_attrs statement_list */
4027 #line 1587 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4028  {
4029  (yyval.statement) = MakeBlock((yyvsp[0].liste));
4030  ExitScope();
4031  }
4032 #line 4033 "cyacc.tab.c"
4033  break;
4034 
4035  case 130: /* block: statements_inside_block TK_RBRACE */
4036 #line 1594 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4037  {
4038  (yyval.statement) = (yyvsp[-1].statement);
4039  }
4040 #line 4041 "cyacc.tab.c"
4041  break;
4042 
4043  case 131: /* block: error location TK_RBRACE */
4044 #line 1599 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4045 { abort();CParserError("Parse error: error location TK_RBRACE \n"); }
4046 #line 4047 "cyacc.tab.c"
4047  break;
4048 
4049  case 132: /* block_attrs: %empty */
4050 #line 1604 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4051 {}
4052 #line 4053 "cyacc.tab.c"
4053  break;
4054 
4055  case 133: /* statement_list: %empty */
4056 #line 1611 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4057  { (yyval.liste) = NIL; }
4058 #line 4059 "cyacc.tab.c"
4059  break;
4060 
4061  case 134: /* statement_list: pragmas */
4062 #line 1612 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4063  {
4065  add_pragma_strings_to_statement(s, gen_nreverse((yyvsp[0].liste)),false);
4066  gen_free_list((yyvsp[0].liste));
4067  (yyval.liste) = CONS(STATEMENT, s, NIL);
4068  }
4069 #line 4070 "cyacc.tab.c"
4070  break;
4071 
4072  case 135: /* statement_list: statement statement_list */
4073 #line 1619 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4074  {
4075  (yyval.liste) = CONS(STATEMENT,(yyvsp[-1].statement),(yyvsp[0].liste));
4076  }
4077 #line 4078 "cyacc.tab.c"
4078  break;
4079 
4080  case 136: /* statement_list: label */
4081 #line 1623 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4082  { CParserError("gcc not implemented\n"); }
4083 #line 4084 "cyacc.tab.c"
4084  break;
4085 
4086  case 137: /* local_labels: %empty */
4087 #line 1627 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4088  {}
4089 #line 4090 "cyacc.tab.c"
4090  break;
4091 
4092  case 138: /* local_labels: TK_LABEL__ local_label_names TK_SEMICOLON local_labels */
4093 #line 1629 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4094  { CParserError("LABEL__ not implemented\n"); }
4095 #line 4096 "cyacc.tab.c"
4096  break;
4097 
4098  case 139: /* local_label_names: TK_IDENT */
4099 #line 1633 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4100  {free((yyvsp[0].string));}
4101 #line 4102 "cyacc.tab.c"
4102  break;
4103 
4104  case 140: /* local_label_names: TK_IDENT TK_COMMA local_label_names */
4105 #line 1634 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4106  {free((yyvsp[-2].string));}
4107 #line 4108 "cyacc.tab.c"
4108  break;
4109 
4110  case 141: /* label: TK_IDENT TK_COLON */
4111 #line 1639 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4112  {
4113  // Push the comment associated with the label:
4115  (yyval.string) = (yyvsp[-1].string);
4116  }
4117 #line 4118 "cyacc.tab.c"
4118  break;
4119 
4120  case 142: /* pragma: TK__Pragma TK_LPAREN string_constant TK_RPAREN */
4121 #line 1648 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4122  {
4123  /* Well, indeed this has not been tested at the time of writing since
4124  the _Pragma("...") is replaced by a #pragma ... in the C
4125  preprocessor, at least in gcc 4.4. */
4126  /* The pragma string has been strdup()ed in the lexer... */
4127  pips_debug(1, "Found _Pragma(\"%s\")\n", (yyvsp[-1].string));
4128  (yyval.string) = (yyvsp[-1].string);
4129  }
4130 #line 4131 "cyacc.tab.c"
4131  break;
4132 
4133  case 143: /* pragma: TK_PRAGMA */
4134 #line 1656 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4135  {
4136  pips_debug(1, "Found #pragma %s\n", c_lval.string);
4137  (yyval.string) = c_lval.string;
4138  }
4139 #line 4140 "cyacc.tab.c"
4140  break;
4141 
4142  case 144: /* pragmas: pragma */
4143 #line 1664 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4144  { /* Only one pragma... The common case, return it in a list */
4145  pips_debug(1, "No longer pragma\n");
4146  (yyval.liste) = CONS(STRING, (yyvsp[0].string), NIL);
4147  }
4148 #line 4149 "cyacc.tab.c"
4149  break;
4150 
4151  case 145: /* pragmas: pragma pragmas */
4152 #line 1668 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4153  {
4154  /* Concatenate the pragma to the list of pragmas */
4155  (yyval.liste) = CONS(STRING,(yyvsp[-1].string),(yyvsp[0].liste));
4156 }
4157 #line 4158 "cyacc.tab.c"
4158  break;
4159 
4160  case 146: /* statement: pragmas statement_without_pragma */
4161 #line 1677 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4162 {
4163  add_pragma_strings_to_statement((yyvsp[0].statement), gen_nreverse((yyvsp[-1].liste)),
4164  false /* Do not reallocate the strings*/);
4165  /* Reduce the CO2 impact of this code, even there is huge memory leaks
4166  everywhere around in this file: */
4167  gen_free_list((yyvsp[-1].liste));
4168  (yyval.statement) = (yyvsp[0].statement);
4170 }
4171 #line 4172 "cyacc.tab.c"
4172  break;
4173 
4174  case 147: /* statement: statement_without_pragma */
4175 #line 1686 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4176  {
4177  (yyval.statement) = (yyvsp[0].statement);
4179  }
4180 #line 4181 "cyacc.tab.c"
4181  break;
4182 
4183  case 148: /* statement_without_pragma: TK_SEMICOLON */
4184 #line 1695 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4185  {
4186  /* Null statement in C is represented as continue statement in Fortran*/
4187  /* FI: the comments should be handled at
4188  another level, so as not to repeat the
4189  same code over and over again? */
4190  string sc = get_current_C_comment();
4191  int sn = get_current_C_line_number();
4193  statement_comments(s) = sc;
4194  statement_number(s) = sn;
4195  (yyval.statement) = s;
4196  }
4197 #line 4198 "cyacc.tab.c"
4198  break;
4199 
4200  case 149: /* statement_without_pragma: comma_expression TK_SEMICOLON */
4201 #line 1708 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4202  {
4203  pips_debug(1, "Reduction %d: comma_expression TK_SEMICOLON -> statement_without_pragma\n", __LINE__);
4205  if (gen_length((yyvsp[-1].liste))==1) {
4206  /* This uses the current comment and
4207  current line number. */
4208  s = ExpressionToStatement(EXPRESSION(CAR((yyvsp[-1].liste))));
4209  gen_free_list((yyvsp[-1].liste));
4210  }
4211  else {
4212  /* FI: I do not know how
4213  expression_comment is supposed to
4214  work for real comma expressions */
4216  statement_number(s) =
4219  }
4220  (yyval.statement) = flush_expression_comment(s);
4221  }
4222 #line 4223 "cyacc.tab.c"
4223  break;
4224 
4225  case 150: /* statement_without_pragma: block */
4226 #line 1728 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4227  { }
4228 #line 4229 "cyacc.tab.c"
4229  break;
4230 
4231  case 151: /* statement_without_pragma: declaration */
4232 #line 1729 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4233  {
4234  /* In C99 we can have a declaration anywhere!
4235 
4236  Declaration returns a statement list. Maybe
4237  it could be changed to return only a
4238  statement? Well sometimes NIL is returned
4239  here so deeper work is required for
4240  this... */
4241  pips_debug(1, "Reduction %d: declaration -> statement_without_pragma\n", __LINE__);
4242  list sl = (yyvsp[0].liste);
4243  if (gen_length(sl) > 1) {
4244  /* print_statements(sl); */
4245  pips_internal_error("There should be no more than 1 declaration at a time here instead of %zd\n", gen_length(sl));
4246  }
4247  /* Extract the statement from the list and free
4248  the list container: */
4250  // Necessary for comma02.c
4251  // statement_comments(s) = get_current_C_comment();
4252  // statement_number(s) = get_current_C_line_number();
4253  (yyval.statement) = flush_expression_comment(s);
4254 }
4255 #line 4256 "cyacc.tab.c"
4256  break;
4257 
4258  case 152: /* statement_without_pragma: TK_IF statement_paren_comma_expression statement */
4259 #line 1752 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4260  {
4261  (yyval.statement) = test_to_statement(make_test(MakeCommaExpression((yyvsp[-1].liste)), (yyvsp[0].statement),
4263  pips_assert("statement is a test", statement_test_p((yyval.statement)));
4264  string sc = pop_current_C_comment();
4265  int sn = pop_current_C_line_number();
4266  (yyval.statement) = add_comment_and_line_number((yyval.statement), sc, sn);
4267  (yyval.statement) = flush_statement_comment((yyval.statement));
4268  }
4269 #line 4270 "cyacc.tab.c"
4270  break;
4271 
4272  case 153: /* statement_without_pragma: TK_IF statement_paren_comma_expression statement TK_ELSE statement */
4273 #line 1762 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4274  {
4275  (yyval.statement) = test_to_statement(make_test(MakeCommaExpression((yyvsp[-3].liste)),(yyvsp[-2].statement),(yyvsp[0].statement)));
4276  pips_assert("statement is a test", statement_test_p((yyval.statement)));
4277  string sc = pop_current_C_comment();
4278  int sn = pop_current_C_line_number();
4279  (yyval.statement) = add_comment_and_line_number((yyval.statement), sc, sn);
4280  (yyval.statement) = flush_statement_comment((yyval.statement));
4281  }
4282 #line 4283 "cyacc.tab.c"
4283  break;
4284 
4285  case 154: /* $@4: %empty */
4286 #line 1771 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4287  {
4290  /* push_current_C_comment(); */
4291  }
4292 #line 4293 "cyacc.tab.c"
4293  break;
4294 
4295  case 155: /* $@5: %empty */
4296 #line 1777 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4297  {
4298  stack_push((char *)MakeCommaExpression((yyvsp[0].liste)),SwitchControllerStack);
4299  }
4300 #line 4301 "cyacc.tab.c"
4301  break;
4302 
4303  case 156: /* statement_without_pragma: TK_SWITCH $@4 statement_paren_comma_expression $@5 statement */
4304 #line 1781 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4305  {
4306 
4307  (yyval.statement) = MakeSwitchStatement((yyvsp[0].statement));
4308  string sc = pop_current_C_comment();
4309  int sn = pop_current_C_line_number();
4310  (yyval.statement) = add_comment_and_line_number((yyval.statement), sc, sn);
4311  //$$ = flush_statement_comment($$); SG too dangerous, maybe on a block
4315  }
4316 #line 4317 "cyacc.tab.c"
4317  break;
4318 
4319  case 157: /* $@6: %empty */
4320 #line 1793 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4321  {
4323  /* push_current_C_comment(); */
4324  }
4325 #line 4326 "cyacc.tab.c"
4326  break;
4327 
4328  case 158: /* statement_without_pragma: TK_WHILE $@6 statement_paren_comma_expression statement */
4329 #line 1798 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4330  {
4331  string sc = pop_current_C_comment();
4332  int sn = pop_current_C_line_number();
4333  pips_assert("While loop body consistent",statement_consistent_p((yyvsp[0].statement)));
4334  (yyval.statement) = MakeWhileLoop((yyvsp[-1].liste),(yyvsp[0].statement),true);
4335  (yyval.statement) = add_comment_and_line_number((yyval.statement), sc, sn);
4336  (yyval.statement) = flush_statement_comment((yyval.statement));
4338  }
4339 #line 4340 "cyacc.tab.c"
4340  break;
4341 
4342  case 159: /* $@7: %empty */
4343 #line 1808 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4344  {
4346  /* push_current_C_comment(); */
4347  }
4348 #line 4349 "cyacc.tab.c"
4349  break;
4350 
4351  case 160: /* statement_without_pragma: TK_DO $@7 statement TK_WHILE statement_paren_comma_expression TK_SEMICOLON */
4352 #line 1813 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4353  {
4354  (yyval.statement) = MakeWhileLoop((yyvsp[-1].liste),(yyvsp[-3].statement),false);
4355  /* The line number and comment are related to paren_comma_expression and not to TK_DO */
4356  (void) pop_current_C_line_number();
4357  (void) pop_current_C_comment();
4359  }
4360 #line 4361 "cyacc.tab.c"
4361  break;
4362 
4363  case 161: /* $@8: %empty */
4364 #line 1826 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4365  {
4366  /* Save the comments agregated in the for close up to now: */
4368  }
4369 #line 4370 "cyacc.tab.c"
4370  break;
4371 
4372  case 162: /* statement_without_pragma: for_clause opt_expression TK_SEMICOLON opt_expression TK_SEMICOLON opt_expression $@8 TK_RPAREN statement */
4373 #line 1832 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4374  {
4375  (yyval.statement) = MakeForloop((yyvsp[-7].expression), (yyvsp[-5].expression), (yyvsp[-3].expression), (yyvsp[0].statement));
4376  (yyval.statement)=flush_expression_comment((yyval.statement));
4377  }
4378 #line 4379 "cyacc.tab.c"
4379  break;
4380 
4381  case 163: /* $@9: %empty */
4382 #line 1837 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4383  {
4384  /* We need a new variable scope to avoid
4385  conflict names between the loop index and
4386  some previous upper declarations: */
4387  EnterScope();
4388  }
4389 #line 4390 "cyacc.tab.c"
4390  break;
4391 
4392  case 164: /* $@10: %empty */
4393 #line 1848 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4394  {
4395  /* Save the comments agregated in the for close up to now: */
4397  }
4398 #line 4399 "cyacc.tab.c"
4399  break;
4400 
4401  case 165: /* statement_without_pragma: for_clause $@9 declaration opt_expression TK_SEMICOLON opt_expression TK_RPAREN $@10 statement */
4402 #line 1853 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4403  {
4404  (yyval.statement) = MakeForloopWithIndexDeclaration((yyvsp[-6].liste), (yyvsp[-5].expression), (yyvsp[-3].expression), (yyvsp[0].statement));
4405  (yyval.statement)=flush_expression_comment((yyval.statement));
4406  ExitScope();
4407  }
4408 #line 4409 "cyacc.tab.c"
4409  break;
4410 
4411  case 166: /* statement_without_pragma: label statement */
4412 #line 1859 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4413  {
4414  /* Create the statement with label comment in
4415  front of it: */
4416  (yyval.statement) = MakeLabeledStatement((yyvsp[-1].string),(yyvsp[0].statement), pop_current_C_comment());
4417  free((yyvsp[-1].string));
4418  /* ifdebug(8) { */
4419  /* pips_debug(8,"Adding label '%s' to statement:\n", $1); */
4420  /* print_statement($$); */
4421  /* } */
4422  }
4423 #line 4424 "cyacc.tab.c"
4424  break;
4425 
4426  case 167: /* statement_without_pragma: TK_CASE expression TK_COLON */
4427 #line 1870 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4428  {
4429  (yyval.statement) = MakeCaseStatement((yyvsp[-1].expression));
4430  }
4431 #line 4432 "cyacc.tab.c"
4432  break;
4433 
4434  case 168: /* statement_without_pragma: TK_CASE expression TK_ELLIPSIS expression TK_COLON */
4435 #line 1874 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4436  {
4437  CParserError("case e1..e2 : not implemented\n");
4438  }
4439 #line 4440 "cyacc.tab.c"
4440  break;
4441 
4442  case 169: /* statement_without_pragma: TK_DEFAULT TK_COLON */
4443 #line 1878 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4444  {
4445  (yyval.statement) = MakeDefaultStatement();
4446  }
4447 #line 4448 "cyacc.tab.c"
4448  break;
4449 
4450  case 170: /* statement_without_pragma: TK_RETURN TK_SEMICOLON */
4451 #line 1882 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4452  {
4453  /* $$ = call_to_statement(make_call(CreateIntrinsic(C_RETURN_FUNCTION_NAME),NIL)); */
4454  if(!get_bool_property("C_PARSER_RETURN_SUBSTITUTION"))
4462  else
4466  /*
4467  $$ = make_statement(entity_empty_label(),
4468  get_current_C_line_number(),
4469  STATEMENT_ORDERING_UNDEFINED,
4470  get_current_C_comment(),
4471  C_MakeReturn(NIL),
4472  NIL,
4473  string_undefined,
4474  empty_extensions());
4475  */
4476 
4478  }
4479 #line 4480 "cyacc.tab.c"
4480  break;
4481 
4482  case 171: /* statement_without_pragma: TK_RETURN comma_expression TK_SEMICOLON */
4483 #line 1910 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4484  {
4485  /* $$ = call_to_statement(make_call(CreateIntrinsic(C_RETURN_FUNCTION_NAME),$2)); */
4486  list el = (yyvsp[-1].liste);
4488  if(gen_length(el)>1) {
4490  el = CONS(EXPRESSION, res, NIL);
4491  }
4492  else if(gen_length(el)==1)
4493  res = EXPRESSION(CAR((yyvsp[-1].liste)));
4494 
4495  if(expression_reference_p(res)) {
4497  entity v = reference_variable(r);
4498  type t = ultimate_type(entity_type(v));
4499  if(type_functional_p(t)) {
4500  /* pointers to functions, hence
4501  functions can be returned in C */
4502  /* FI: relationship with undeclared? */
4503  /*
4504  c_parser_user_warning("Ill. returned value: reference to function \"%s\""
4505  " or variable \"%s\" not declared\n",
4506  entity_user_name(v), entity_user_name(v));
4507  CParserError("Ill. return expression");
4508  */
4509  }
4510  }
4511  if(!get_bool_property("C_PARSER_RETURN_SUBSTITUTION"))
4519  else
4520  (yyval.statement) = C_MakeReturnStatement(el,
4523  /*
4524  $$ = make_statement(entity_empty_label(),
4525  get_current_C_line_number(),
4526  STATEMENT_ORDERING_UNDEFINED,
4527  get_current_C_comment(),
4528  C_MakeReturn($2),
4529  NIL,
4530  string_undefined,
4531  empty_extensions());
4532  */
4533  (yyval.statement)=flush_expression_comment((yyval.statement));
4535  }
4536 #line 4537 "cyacc.tab.c"
4537  break;
4538 
4539  case 172: /* statement_without_pragma: TK_BREAK TK_SEMICOLON */
4540 #line 1963 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4541  {
4543  }
4544 #line 4545 "cyacc.tab.c"
4545  break;
4546 
4547  case 173: /* statement_without_pragma: TK_CONTINUE TK_SEMICOLON */
4548 #line 1967 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4549  {
4551  }
4552 #line 4553 "cyacc.tab.c"
4553  break;
4554 
4555  case 174: /* statement_without_pragma: TK_GOTO TK_IDENT TK_SEMICOLON */
4556 #line 1971 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4557  {
4558  (yyval.statement) = MakeGotoStatement((yyvsp[-1].string));
4559  free((yyvsp[-1].string));
4560  }
4561 #line 4562 "cyacc.tab.c"
4562  break;
4563 
4564  case 175: /* statement_without_pragma: TK_GOTO TK_STAR comma_expression TK_SEMICOLON */
4565 #line 1976 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4566  {
4567  CParserError("GOTO * exp not implemented\n");
4568  }
4569 #line 4570 "cyacc.tab.c"
4570  break;
4571 
4572  case 176: /* statement_without_pragma: TK_ASM asmattr TK_LPAREN string_constant asmoutputs TK_RPAREN TK_SEMICOLON */
4573 #line 1980 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4574  {
4575  call c = make_call(
4578  make_C_constant_entity((yyvsp[-3].string), is_basic_string, 0)
4579  ),NIL)
4580  );
4581  free((yyvsp[-3].string));
4582  (yyval.statement) = make_statement(
4590  }
4591 #line 4592 "cyacc.tab.c"
4592  break;
4593 
4594  case 177: /* statement_without_pragma: TK_MSASM */
4595 #line 1998 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4596  { CParserError("ASM not implemented\n"); }
4597 #line 4598 "cyacc.tab.c"
4598  break;
4599 
4600  case 178: /* statement_without_pragma: error location TK_SEMICOLON */
4601 #line 2000 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4602  {
4603  CParserError("Parse error: error location TK_SEMICOLON\n");
4604  }
4605 #line 4606 "cyacc.tab.c"
4606  break;
4607 
4608  case 179: /* $@11: %empty */
4609 #line 2008 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4610  {
4611  /* Number the loops in prefix depth-first: */
4613  LoopStack);
4614  /* Record the line number of thw "for" keyword: */
4616  /* Try to save a max of comments. The issue is
4617  that opt_expression's afterwards can reset
4618  the comments if there is a comma_expression
4619  in them. So at least preserve the commemts
4620  before the for.
4621 
4622  Issue trigered by several examples such as
4623  validation/Semantics-New/do01.tpips
4624 
4625  But I think now (RK, 2011/02/05 :-) ) that in
4626  a source-to-source compiler comments should
4627  appear *explicitly* in the parser syntax and
4628  not be dealt by some side effects in the
4629  lexer as now in PIPS with some stacks and so
4630  on.
4631  */
4633  }
4634 #line 4635 "cyacc.tab.c"
4635  break;
4636 
4637  case 181: /* declaration: decl_spec_list init_declarator_list TK_SEMICOLON */
4638 #line 2038 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4639  {
4640  pips_debug(1, "Reduction %d: decl_spec_list init_declarator_list TK_SEMICOLON -> declaration\n", __LINE__);
4641 
4642  list el1 = (yyvsp[-2].liste);
4643  list el2 = (yyvsp[-1].liste);
4644  list el12 = gen_nconc(el1,el2);
4646 
4647  pips_assert("el1 is an entity list", entities_p(el1));
4648  pips_assert("el2 is an entity list", entities_p(el2));
4649  pips_assert("Variable in el1 has not been declared before", !gen_in_list_p(el1, el2));
4650 
4651  if(!ENDP(el12)) {
4653  FOREACH(ENTITY, e, el0) {
4654  if(!gen_in_list_p(e, el12))
4655  el12 = CONS(ENTITY, e, el12);
4656  }
4657  gen_free_list(el0);
4658 
4659  ifdebug(8) {
4660  fprintf(stderr, "At %d, make_declarations_statement for ", __LINE__);
4661  print_entities(el12);
4662  fprintf(stderr, "\n");
4663  }
4664 
4665  int sn = get_current_C_line_number();
4666  string sc = get_current_C_comment();
4667  s = make_declarations_statement(el12, sn, sc);
4669 
4670  ifdebug(1) {
4671  fprintf(stderr, "New declaration statement for entities: ");
4672  print_entities(el12);
4673  fprintf(stderr, "\n");
4674  }
4675  pips_assert("no duplicate declaration",
4676  gen_once_p(el12));
4677  }
4678  else {
4679  pips_internal_error("Unexpected case");
4680  }
4681 
4683  PopContext();
4685  CleanUpEntities(el12);
4686  (yyval.liste) = CONS(STATEMENT,s,NIL);
4688  }
4689 #line 4690 "cyacc.tab.c"
4690  break;
4691 
4692  case 182: /* declaration: decl_spec_list TK_SEMICOLON */
4693 #line 2089 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4694  {
4695  pips_debug(1, "Reduction %d: decl_spec_list TK_SEMICOLON -> declaration\n", __LINE__);
4696  list dl = (yyvsp[-1].liste);
4697  FOREACH(ENTITY, e, dl) {
4698  value v = entity_initial(e);
4699  if(value_undefined_p(v))
4701  }
4702  // FI: we build a declaration statement
4703  // for each field of an enum...
4704  int sn = get_current_C_line_number();
4705  string sc = get_current_C_comment();
4706  pips_debug(8, "New declaration statement at line %d\n", __LINE__);
4707  statement s = make_declarations_statement(dl, sn, sc);
4710  //UpdateEntities(dl,ContextStack,FormalStack,FunctionStack,OffsetStack,is_external,true);
4711  PopContext();
4713  (yyval.liste) = CONS(STATEMENT,s, NIL);
4714  BREAKPOINT;
4715  }
4716 #line 4717 "cyacc.tab.c"
4717  break;
4718 
4719  case 183: /* init_declarator_list: init_declarator */
4720 #line 2115 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4721  {
4722 
4723  (yyval.liste) = CONS(ENTITY,(yyvsp[0].entity),NIL);
4724  }
4725 #line 4726 "cyacc.tab.c"
4726  break;
4727 
4728  case 184: /* init_declarator_list: init_declarator TK_COMMA init_declarator_list */
4729 #line 2120 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4730  {
4731  (yyval.liste) = CONS(ENTITY,(yyvsp[-2].entity),(yyvsp[0].liste));
4732  }
4733 #line 4734 "cyacc.tab.c"
4734  break;
4735 
4736  case 185: /* init_declarator: declarator */
4737 #line 2126 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4738  {
4739  /* The default initial value is often zero,
4740  but not so for formal parameters or
4741  functions */
4742  if(value_undefined_p(entity_initial((yyvsp[0].entity))))
4743  entity_initial((yyvsp[0].entity)) = make_value_unknown();
4745  pips_debug(1, "declarator to init_declarator for entity %s\n", entity_name((yyvsp[0].entity)));
4746  }
4747 #line 4748 "cyacc.tab.c"
4748  break;
4749 
4750  case 186: /* init_declarator: declarator TK_EQ init_expression */
4751 #line 2136 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4752  {
4753  entity v = (yyvsp[-2].entity);
4754  expression nie = (yyvsp[0].expression);
4755 
4756  if(expression_undefined_p(nie)) {
4757  /* Do nothing, leave the initial field of entity as it is. */
4758  c_parser_user_warning("Undefined init_expression, why not use value_unknown?\n");
4760  pips_debug(1, "declarator TK_EQ init_expression to init_declarator, with expression undefined\n");
4761  }
4762  else {
4763  (void) simplify_C_expression(nie);
4764  /* Put init_expression in the initial value of entity declarator*/
4765  set_entity_initial(v, nie);
4767  pips_debug(1, "declarator TK_EQ init_expression to init_declarator\n");
4768  }
4769  }
4770 #line 4771 "cyacc.tab.c"
4771  break;
4772 
4773  case 187: /* $@12: %empty */
4774 #line 2157 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4775  {
4778  pips_debug(8, "new default context %p with scope \"%s\"\n", ycontext,
4780  }
4781  else {
4782  /* Copy may be excessive as only the scope needs to be preserved...*/
4783  //ycontext = copy_c_parser_context((c_parser_context)stack_head(ContextStack));
4785  /* FI: You do not want to propagate
4786  qualifiers */
4789  /* How can these two problems occur since
4790  ycontext is only a copy of the
4791  ContextStack's head? Are we in the
4792  middle of a stack_push() /stack_pop()?
4793  The previous policy was to always
4794  allocate a new ycontext, regardless of
4795  the stack state */
4796  /* FI: a bit afraid of freeing the past type if any */
4798  /* A new context is entered: no longer typedef as in
4799  "typedef int f(int a)" when we hit "int a"*/
4801  /* FI: sometimes, the scope is erased and lost */
4802  //if(strcmp(c_parser_context_scope(ycontext), "TOP-LEVEL:")==0)
4803  // c_parser_context_scope(ycontext) = empty_scope();
4804  /* Finally, to avoid problems!*/
4805  //c_parse
4806  //r_context_scope(ycontext) = empty_scope();
4807 
4808  /* Only block scope information is inherited */
4811  /* FI: too primitive; we need to push
4812  and pop contexts more than to update
4813  them.
4814 
4815  Problem with "extern f(x), g(y);". f
4816  anf g are definitvely top-level, but x
4817  and y must be searched in the current
4818  scope first.
4819  */
4820  pips_debug(8, "Reset modified scope \"%s\"\n",
4824  }
4825  pips_debug(8, "new context %p with scope \"%s\" copied from context %p (stack size=%d)\n",
4826  ycontext,
4830  }
4831  }
4832 #line 4833 "cyacc.tab.c"
4833  break;
4834 
4835  case 188: /* decl_spec_list: $@12 my_decl_spec_list */
4836 #line 2214 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4837  {pips_debug(1, "Reduction %d: my_decl_spec_list -> decl_spec_list\n", __LINE__); (yyval.liste) = (yyvsp[0].liste);}
4838 #line 4839 "cyacc.tab.c"
4839  break;
4840 
4841  case 189: /* my_decl_spec_list: TK_TYPEDEF decl_spec_list_opt */
4842 #line 2220 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4843  {
4844  /* Add TYPEDEF_PREFIX to entity name prefix and make it a rom storage */
4847  //pips_assert("CONTINUE for declarations", continue_statements_p($2));
4848  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4849  (yyval.liste) = (yyvsp[0].liste);
4850  }
4851 #line 4852 "cyacc.tab.c"
4852  break;
4853 
4854  case 190: /* my_decl_spec_list: TK_EXTERN decl_spec_list_opt */
4855 #line 2229 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4856  {
4857  /* This can be a variable or a function, whose storage is ram or return */
4858  /* What is the scope in cyacc.y of this
4859  scope modification? Too much because the
4860  TOP_LEVEL scope is going to be used for
4861  argument types as well... */
4862  pips_debug(8, "Scope of context %p forced to TOP_LEVEL_MODULE_NAME\n", ycontext);
4865  MODULE_SEP_STRING,NULL));
4866  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4867  /* FI: because of C laxity about
4868  redeclarations in compilation unit, the
4869  EXTERN information should be carried by
4870  the declaration statement to be able to
4871  regenerate precise source-to-source. */
4872  // fprintf(stderr, "Force extern declaration.\n");
4873  // statement dls = STATEMENT(CAR($2));
4875  (yyval.liste) = (yyvsp[0].liste);
4876  }
4877 #line 4878 "cyacc.tab.c"
4878  break;
4879 
4880  case 191: /* my_decl_spec_list: TK_STATIC decl_spec_list_opt */
4881 #line 2251 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4882  {
4883  pips_debug(1, "Reduction %d: TK_STATIC decl_spec_list_opt -> my_decl_spec_list\n", __LINE__);
4885  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4886  (yyval.liste) = (yyvsp[0].liste);
4887  }
4888 #line 4889 "cyacc.tab.c"
4889  break;
4890 
4891  case 192: /* my_decl_spec_list: TK_THREAD decl_spec_list_opt */
4892 #line 2258 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4893  {
4894  /* Add to type variable qualifiers */
4897  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4898  (yyval.liste) = (yyvsp[0].liste);
4899  }
4900 #line 4901 "cyacc.tab.c"
4901  break;
4902 
4903  case 193: /* my_decl_spec_list: TK_AUTO decl_spec_list_opt */
4904 #line 2266 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4905  {
4906  /* Make dynamic storage for current entity */
4909  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4910  (yyval.liste) = (yyvsp[0].liste);
4911  }
4912 #line 4913 "cyacc.tab.c"
4913  break;
4914 
4915  case 194: /* my_decl_spec_list: TK_REGISTER decl_spec_list_opt */
4916 #line 2274 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4917  {
4918  /* Add to type variable qualifiers */
4921  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4922  (yyval.liste) = (yyvsp[0].liste);
4923  }
4924 #line 4925 "cyacc.tab.c"
4925  break;
4926 
4927  case 195: /* my_decl_spec_list: type_spec decl_spec_list_opt_no_named */
4928 #line 2283 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4929  {
4930  pips_debug(1, "Reduction %d: type_spec decl_spec_list_opt_no_named -> my_decl_spec_list\n", __LINE__);
4931  BREAKPOINT;
4932  // el contains only hidden internal PIPS
4933  // entities, but some of them at least must
4934  // be seen by the prettyprinter
4935  list el = (yyvsp[-1].liste); // entity list
4936  list sl = (yyvsp[0].liste); // entity list
4937  list rl = list_undefined;
4938  pips_assert("el contains an entity list", entities_p(el));
4939  pips_assert("sl contains an entity list", entities_p(sl));
4940  if(ENDP(el)) {
4941  rl = sl;
4942  }
4943  else if(ENDP(sl)) {
4944  //BREAKPOINT;
4945  rl = el;
4946  ifdebug(8) {
4947  //pips_debug(8, "New declaration statement for entities:\n");
4948  print_entities(el);
4949  fprintf(stderr, "\n");
4950  }
4951  }
4952  else if(gen_length(sl)==1) {
4953  // FI: I'm not sure it ever happens
4954  // statement s = STATEMENT(CAR(sl));
4955  ifdebug(8) {
4956  //pips_debug(8, "Previous (unexpected) continue statement for entities: ");
4957  //print_entities(statement_declarations(s));
4958  print_entities(el);
4959  fprintf(stderr, "\n");
4960  pips_debug(8, "New entities added: ");
4961  print_entities(el);
4962  fprintf(stderr, "\n");
4963  // rl = sl;
4964  }
4965  //statement_declarations(s) =
4966  //gen_nconc(el, statement_declarations(s));
4967  rl = gen_nconc(el, sl);
4968  }
4969  else {
4970  pips_internal_error("Multiple statements not expected\n");
4971  /* statement s = */
4972  /* make_continue_statement(entity_empty_label()); */
4973  /* statement_declarations(s) = el; */
4974  // $$ = gen_nconc($1,$2);
4975  //$$ = $2;
4976  //rl = gen_nconc(CONS(STATEMENT, s, NIL),sl);
4977  }
4978  (yyval.liste) = rl;
4979  }
4980 #line 4981 "cyacc.tab.c"
4981  break;
4982 
4983  case 196: /* my_decl_spec_list: TK_INLINE decl_spec_list_opt */
4984 #line 2336 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4985  {
4986  c_parser_user_warning("Keyword \"inline\" ignored\n");
4987  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
4988  (yyval.liste) = (yyvsp[0].liste);
4989  }
4990 #line 4991 "cyacc.tab.c"
4991  break;
4992 
4993  case 197: /* my_decl_spec_list: attribute decl_spec_list_opt */
4994 #line 2342 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
4995  {
4997  qualifier nq = (yyvsp[-1].qualifier);
4998 
5000  = insert_qualifier(ql, nq);
5001 
5002  pips_assert("Entity list for declarations", entities_p((yyvsp[0].liste)));
5003  (yyval.liste) = (yyvsp[0].liste);
5004  }
5005 #line 5006 "cyacc.tab.c"
5006  break;
5007 
5008  case 198: /* my_decl_spec_list: TK_AT_SPECIFIER TK_LPAREN TK_IDENT TK_RPAREN */
5009 #line 2354 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5010  {
5011  CParserError("CIL AT not implemented\n");
5012  }
5013 #line 5014 "cyacc.tab.c"
5014  break;
5015 
5016  case 199: /* decl_spec_list_opt: %empty */
5017 #line 2363 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5018  {
5019  //stack_push((char *) ycontext, ContextStack);
5021  (yyval.liste) = NIL;
5022  }
5023 #line 5024 "cyacc.tab.c"
5024  break;
5025 
5026  case 200: /* decl_spec_list_opt: my_decl_spec_list */
5027 #line 2368 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5028  { }
5029 #line 5030 "cyacc.tab.c"
5030  break;
5031 
5032  case 201: /* decl_spec_list_opt_no_named: %empty */
5033 #line 2377 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5034  {
5035  pips_debug(1, "Reduction %d: empty -> decl_spec_list_opt_no_named\n", __LINE__);
5036  // decl48.c: ycontext is not good because
5037  // the current scope information is lost.
5038  // I do not want to remove the Push to keep
5039  // the Push/Pop balance ok
5040  //PushContext(ycontext);
5043  else {
5045  string stf = (c_parser_context_scope(ycontext));
5048  free(stf);
5050  }
5051  (yyval.liste) = NIL;
5052  }
5053 #line 5054 "cyacc.tab.c"
5054  break;
5055 
5056  case 202: /* decl_spec_list_opt_no_named: my_decl_spec_list */
5057 #line 2396 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5058  {pips_debug(1, "Reduction %d: my_decl_spec_list -> decl_spec_list_opt_no_named\n", __LINE__);
5059  }
5060 #line 5061 "cyacc.tab.c"
5061  break;
5062 
5063  case 203: /* type_spec: TK_VOID */
5064 #line 2403 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5065  {
5067  (yyval.liste) = NIL;
5068  }
5069 #line 5070 "cyacc.tab.c"
5070  break;
5071 
5072  case 204: /* type_spec: TK_CHAR */
5073 #line 2408 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5074  {
5077  (yyval.liste) = NIL;
5078  }
5079 #line 5080 "cyacc.tab.c"
5080  break;
5081 
5082  case 205: /* type_spec: TK_SHORT */
5083 #line 2414 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5084  {
5087  (yyval.liste) = NIL;
5088  }
5089 #line 5090 "cyacc.tab.c"
5090  break;
5091 
5092  case 206: /* type_spec: TK_INT */
5093 #line 2420 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5094  {
5095  pips_debug(1, "Reduction %d: TK_INT -> type_spec\n", __LINE__);
5097  {
5100  }
5101  (yyval.liste) = NIL;
5102  }
5103 #line 5104 "cyacc.tab.c"
5104  break;
5105 
5106  case 207: /* type_spec: TK_INT128 */
5107 #line 2430 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5108  {
5109  pips_debug(1, "Reduction %d: TK_INT128 -> type_spec\n", __LINE__);
5111  {
5114  }
5115  (yyval.liste) = NIL;
5116  }
5117 #line 5118 "cyacc.tab.c"
5118  break;
5119 
5120  case 208: /* type_spec: TK_UINT128 */
5121 #line 2440 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5122  {
5123  pips_debug(1, "Reduction %d: TK_UINT128 -> type_spec\n", __LINE__);
5125  {
5128  }
5129  (yyval.liste) = NIL;
5130  }
5131 #line 5132 "cyacc.tab.c"
5132  break;
5133 
5134  case 209: /* type_spec: TK_COMPLEX */
5135 #line 2450 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5136  {
5138  {
5141  }
5142  else {
5143  /* Can be qualified by float, double and long double */
5145  variable v = type_variable(t);
5146  basic b = variable_basic(v);
5147 
5148  pips_assert("prefix is for type variable",type_variable_p(t));
5149  if(basic_float_p(b)) {
5151  basic_complex(b) = 2*basic_complex(b);
5153  basic_complex(b) += 1;
5154  }
5155  }
5156  (yyval.liste) = NIL;
5157  }
5158 #line 5159 "cyacc.tab.c"
5159  break;
5160 
5161  case 210: /* type_spec: TK_LONG */
5162 #line 2473 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5163  {
5165  (yyval.liste) = NIL;
5166  }
5167 #line 5168 "cyacc.tab.c"
5168  break;
5169 
5170  case 211: /* type_spec: TK_FLOAT */
5171 #line 2478 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5172  {
5175  (yyval.liste) = NIL;
5176  }
5177 #line 5178 "cyacc.tab.c"
5178  break;
5179 
5180  case 212: /* type_spec: TK_DOUBLE */
5181 #line 2484 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5182  {
5185 
5186  if(type_undefined_p(t))
5188  else {
5189  if(default_complex_type_p(t)) {
5190  c_parser_user_warning("'complex double' declaration is not in the C99 standard but we accept it. You should use 'double complex' instead.\n"
5191 );
5193  }
5194  /* This secondary test is probably
5195  useless. See the case of TK_COMPLEX. */
5196  else if(standard_long_integer_type_p(t))
5198  else
5199  /* FI: we should probably have a user
5200  or internal error here since we
5201  ignore the beginning of the type declaration*/
5203  free_type(t);
5204  }
5206  (yyval.liste) = NIL;
5207  }
5208 #line 5209 "cyacc.tab.c"
5209  break;
5210 
5211  case 213: /* type_spec: TK_SIGNED */
5212 #line 2511 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5213  {
5214  /* see the IR document or ri-util.h for explanation */
5215  int size = DEFAULT_INTEGER_TYPE_SIZE;
5217  if(!type_undefined_p(t_old)) {
5218  // FI: memory leak for t_old
5219  variable v_old = type_variable(t_old);
5220  basic b_old = variable_basic(v_old);
5221  if(basic_int_p(b_old))
5222  size = basic_int(b_old);
5223  else
5224  pips_internal_error("???");
5225  }
5227  size),NIL,NIL);
5229  (yyval.liste) = NIL;
5230  }
5231 #line 5232 "cyacc.tab.c"
5232  break;
5233 
5234  case 214: /* type_spec: TK_UNSIGNED */
5235 #line 2530 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5236  {
5237  int size = DEFAULT_INTEGER_TYPE_SIZE;
5239  if(!type_undefined_p(t_old)) {
5240  // FI: memory leak for t_old
5241  variable v_old = type_variable(t_old);
5242  basic b_old = variable_basic(v_old);
5243  if(basic_int_p(b_old))
5244  size = basic_int(b_old);
5245  else
5246  pips_internal_error("???");
5247  }
5249  size),NIL,NIL);
5251  (yyval.liste) = NIL;
5252  }
5253 #line 5254 "cyacc.tab.c"
5254  break;
5255 
5256  case 215: /* type_spec: TK_STRUCT id_or_typename */
5257 #line 2548 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5258  {
5259  pips_debug(1, "Reduction %d: TK_STRUCT id_or_typename -> type_spec\n", __LINE__);
5260  // FI: this next call is now useless
5262  /* Find the entity associated to the struct, current scope can be [file%][module:][block]*/
5264  /* Specify the type of the variable that follows this declaration specifier */
5266  /* To handle mesa.c (SPEC 2000 benchmark)
5267  We have struct HashTable in a file, but do not know its structure and scope,
5268  because it is declared in other file */
5269  if (type_undefined_p(entity_type(ent)))
5274  /* Declaration statement "struct s;"
5275  disappears with $$ = NIL... See for
5276  instance decl68.c. A place holder
5277  variable is added, just in case. */
5278  /* This may be useless, but will be fixed by
5279  make_declarations_statement() */
5281  list dl = list_undefined;
5282  if(entity_undefined_p(phv)) {
5283  dl = CONS(ENTITY,ent,NIL);
5284  }
5285  else {
5287  dl = CONS(ENTITY,ent,CONS(ENTITY, phv, NIL));
5288  }
5289  (yyval.liste) = dl;
5290  }
5291 #line 5292 "cyacc.tab.c"
5292  break;
5293 
5294  case 216: /* $@13: %empty */
5295 #line 2582 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5296  {
5297  code c = make_code(NIL,(yyvsp[-1].string),sequence_undefined,NIL, make_language_c());
5298  stack_push((char *) c, StructNameStack);
5299  }
5300 #line 5301 "cyacc.tab.c"
5301  break;
5302 
5303  case 217: /* type_spec: TK_STRUCT id_or_typename TK_LBRACE $@13 struct_decl_list TK_RBRACE */
5304 #line 2587 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5305  {
5306  pips_debug(1, "Reduction %d: TK_STRUCT id_or_typename TK_LBRACE struct_decl_list TK_RBRACE -> type_spec\n", __LINE__);
5307  /* field list, which may also contain nested
5308  derived entities */
5309  list fl = (yyvsp[-1].liste);
5310  /* Create the struct entity */
5311  entity ent = MakeDerivedEntity((yyvsp[-4].string),fl,is_external,is_type_struct);
5312  /* Record the declaration of the struct
5313  entity */
5315  /* Specify the type of the variable that follows this declaration specifier*/
5317  /* Take from $5 the struct/union entities */
5318  list le = TakeDerivedEntities(fl);
5319  list rl = gen_in_list_p(ent, le)?
5320  le : gen_nconc(le,CONS(ENTITY,ent,NIL));
5321  /* Fields do not need to appear in the
5322  declaration list, but they are used later
5323  to decide which derived entities are
5324  defined and which ones are used. */
5325  FOREACH(ENTITY, f, fl) {
5326  if(entity_field_p(f) && !gen_in_list_p(f,rl))
5327  rl = gen_nconc(rl, CONS(ENTITY, f, NIL));
5328  }
5331  BREAKPOINT;
5332  //add_initialization_expression(1);
5333  (yyval.liste) = rl;
5334  }
5335 #line 5336 "cyacc.tab.c"
5336  break;
5337 
5338  case 218: /* $@14: %empty */
5339 #line 2618 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5340  {
5341  string istr = int2a(derived_counter++);
5343  istr,NULL)),sequence_undefined, NIL, make_language_c());
5344  free(istr);
5345  stack_push((char *) c, StructNameStack);
5346  }
5347 #line 5348 "cyacc.tab.c"
5348  break;
5349 
5350  case 219: /* type_spec: TK_STRUCT TK_LBRACE $@14 struct_decl_list TK_RBRACE */
5351 #line 2626 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5352  {
5353  pips_debug(1, "Reduction %d: TK_STRUCT TK_LBRACE struct_decl_list TK_RBRACE -> type_spec\n", __LINE__);
5354  /* Create the struct entity with unique name s */
5356  list el = (yyvsp[-1].liste);
5357  pips_assert("el is an entity list", entities_p(el));
5360  pips_assert("el is an entity list", entities_p(el));
5361  /* Take from el the struct/union entities */
5362  list le = TakeDerivedEntities(el);
5363  list rl = gen_nconc(le,CONS(ENTITY,ent,NIL));
5366  BREAKPOINT;
5367  //add_initialization_expression(1);
5368  (yyval.liste) = rl;
5369  }
5370 #line 5371 "cyacc.tab.c"
5371  break;
5372 
5373  case 220: /* type_spec: TK_UNION id_or_typename */
5374 #line 2645 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5375  {
5377  /* Find the entity associated to the union, current scope can be [file%][module:][block]*/
5379  /* Specify the type of the variable that follows this declaration specifier */
5381  if (type_undefined_p(entity_type(ent)))
5386  /* This may be useless, but will be fixed by
5387  make_declarations_statement() */
5389  list dl = list_undefined;
5390  if(entity_undefined_p(phv)) {
5391  dl = CONS(ENTITY,ent,NIL);
5392  }
5393  else {
5395  dl = CONS(ENTITY,ent,CONS(ENTITY, phv, NIL));
5396  }
5397  //list dl = CONS(ENTITY, ent, NIL);
5398  (yyval.liste) = dl;
5399  }
5400 #line 5401 "cyacc.tab.c"
5401  break;
5402 
5403  case 221: /* $@15: %empty */
5404 #line 2671 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5405  {
5406  code c = make_code(NIL,(yyvsp[-1].string),sequence_undefined, NIL, make_language_c());
5407  stack_push((char *) c, StructNameStack);
5408  }
5409 #line 5410 "cyacc.tab.c"
5410  break;
5411 
5412  case 222: /* type_spec: TK_UNION id_or_typename TK_LBRACE $@15 struct_decl_list TK_RBRACE */
5413 #line 2676 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5414  {
5415  list fl = (yyvsp[-1].liste);
5416  entity ent = MakeDerivedEntity((yyvsp[-4].string),fl,is_external,is_type_union);
5418  /* Take from $5 the indirectly declared
5419  struct/union entities as in "struct {struct ... ". */
5420  // FI: struct are treated much more carefully to avoid
5421  // multiple occurences of one entity
5422  list le = TakeDerivedEntities((yyvsp[-1].liste));
5423  list rl = gen_nconc(le,CONS(ENTITY,ent,NIL));
5424  //rl = gen_nconc(rl, fl);
5425  //rl = gen_nconc(rl, le);
5428  (yyval.liste) = rl;
5429  }
5430 #line 5431 "cyacc.tab.c"
5431  break;
5432 
5433  case 223: /* $@16: %empty */
5434 #line 2693 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5435  {
5436  string n = int2a(derived_counter++);
5437  code c = make_code(NIL,
5440  NIL,
5441  make_language_c());
5442  free(n);
5443  stack_push((char *) c, StructNameStack);
5444  }
5445 #line 5446 "cyacc.tab.c"
5446  break;
5447 
5448  case 224: /* type_spec: TK_UNION TK_LBRACE $@16 struct_decl_list TK_RBRACE */
5449 #line 2704 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5450  {
5451  /* Create the union entity with unique name */
5453  entity ent = MakeDerivedEntity(s,(yyvsp[-1].liste),is_external,is_type_union);
5456  /* Take from $4 the struct/union entities */
5457  (void)TakeDerivedEntities((yyvsp[-1].liste));
5458  //$$ = gen_nconc(le,CONS(ENTITY,ent,NIL));
5459  //$$ = CONS(ENTITY,ent,le);
5460  // entity phv = make_place_holder_variable(ent));
5461  // list rl = CONS(ENTITY,ent,CONS(ENTITY, phv, NIL));
5462  list rl = CONS(ENTITY,ent,NIL);
5465  (yyval.liste) = rl;
5466  }
5467 #line 5468 "cyacc.tab.c"
5468  break;
5469 
5470  case 225: /* type_spec: TK_ENUM id_or_typename */
5471 #line 2722 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5472  {
5473  pips_debug(1, "Reduction %d: TK_ENUM id_or_typename -> type_spec\n", __LINE__);
5475  /* Find the entity associated to the enum */
5477  /* Specify the type of the variable that follows this declaration specifier */
5479  if (type_undefined_p(entity_type(ent)))
5480  entity_type(ent) = make_type_enum(NIL);
5481  /* FI: What should the initial value be? */
5488  else {
5489  /* This happens with the old style
5490  function declaration at least */
5491  /* Oops, we have to assume that the enum
5492  is also defined in the compilation
5493  unit... else it would be useless. */
5494  ;
5495  }
5497  /* This may be useless, but will be fixed by
5498  make_declarations_statement() */
5500  list dl = list_undefined;
5501  if(entity_undefined_p(phv)) {
5502  dl = CONS(ENTITY,ent,NIL);
5503  }
5504  else {
5506  dl = CONS(ENTITY,ent,CONS(ENTITY, phv, NIL));
5507  }
5508  //list dl = CONS(ENTITY, ent, NIL);
5509  (yyval.liste) = dl;
5510  }
5511 #line 5512 "cyacc.tab.c"
5512  break;
5513 
5514  case 226: /* type_spec: TK_ENUM id_or_typename TK_LBRACE enum_list maybecomma TK_RBRACE */
5515 #line 2762 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5516  {
5517  pips_debug(1, "Reduction %d: TK_ENUM id_or_typename TK_LBRACE enum_list maybecomma TK_RBRACE -> type_spec\n", __LINE__);
5518  string en = (yyvsp[-4].string);
5519  list ml = (yyvsp[-2].liste);
5520  /* Create the enum entity */
5524 
5527  list rl = CONS(ENTITY, ent, NIL);
5528  (yyval.liste) = rl;
5529  }
5530 #line 5531 "cyacc.tab.c"
5531  break;
5532 
5533  case 227: /* type_spec: TK_ENUM TK_LBRACE enum_list maybecomma TK_RBRACE */
5534 #line 2777 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5535  {
5536  /* Create the enum entity with unique name */
5537  string n = int2a(derived_counter++);
5538  string s = strdup(concatenate(DUMMY_ENUM_PREFIX,n,NULL));
5539  free(n);
5540  entity ent = MakeDerivedEntity(s,(yyvsp[-2].liste),is_external,is_type_enum);
5542 
5543  InitializeEnumMemberValues((yyvsp[-2].liste));
5545  (yyval.liste) = CONS(ENTITY,ent,NIL);
5546  }
5547 #line 5548 "cyacc.tab.c"
5548  break;
5549 
5550  case 228: /* type_spec: TK_NAMED_TYPE */
5551 #line 2790 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5552  {
5553  entity ent;
5555 
5556  /* Specify the type of the variable that follows this declaration specifier */
5558  {
5559  /* typedef T1 T2 => the type of T2 will be that of T1*/
5560  pips_debug(8,"typedef T1 T2 where T1 = %s\n",entity_name(ent));
5562  (yyval.liste) = CONS(ENTITY,ent,NIL);
5563  }
5564  else
5565  {
5566  /* T1 var => the type of var is basic typedef */
5568  pips_debug(8,"T1 var where T1 = %s\n",entity_name(ent));
5570  (yyval.liste) = NIL;
5571  }
5572 
5573  }
5574 #line 5575 "cyacc.tab.c"
5575  break;
5576 
5577  case 229: /* type_spec: TK_TYPEOF TK_LPAREN expression TK_RPAREN */
5578 #line 2813 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5579  {
5580  CParserError("TYPEOF not implemented\n");
5581  }
5582 #line 5583 "cyacc.tab.c"
5583  break;
5584 
5585  case 230: /* type_spec: TK_TYPEOF TK_LPAREN type_name TK_RPAREN */
5586 #line 2817 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5587  {
5588  CParserError("TYPEOF not implemented\n");
5589  }
5590 #line 5591 "cyacc.tab.c"
5591  break;
5592 
5593  case 231: /* struct_decl_list: %empty */
5594 #line 2825 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5595  { pips_debug(1, "Reduction %d: empty -> struct_decl_list\n", __LINE__); (yyval.liste) = NIL; }
5596 #line 5597 "cyacc.tab.c"
5597  break;
5598 
5599  case 232: /* struct_decl_list: decl_spec_list TK_SEMICOLON struct_decl_list */
5600 #line 2827 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5601  {
5602  pips_debug(1, "Reduction %d:decl_spec_list TK_SEMICOLON struct_decl_list -> struct_decl_list\n", __LINE__);
5603  //c_parser_context ycontext = stack_head(ContextStack);
5605  /* Create the struct member entity with unique name, the name of the
5606  struct/union is added to the member name prefix */
5607  string istr = int2a(derived_counter++);
5608  string s = strdup(concatenate("PIPS_MEMBER_",istr,NULL));
5609  string derived = code_decls_text((code) stack_head(StructNameStack));
5611  MEMBER_SEP_STRING,NULL)),
5612  is_external);
5613  pips_debug(5,"Current derived name: %s\n",derived);
5614  pips_debug(5,"Member name: %s\n",entity_name(ent));
5617  free(s);
5618 
5619  /* Temporally put the list of struct/union
5620  entities defined in $1 to initial value
5621  of ent. FI: where is it retrieved? in
5622  TakeDerivedEntities()? */
5623  entity_initial(ent) = (value) (yyvsp[-2].liste);
5624 
5625  (yyval.liste) = CONS(ENTITY,ent,(yyvsp[0].liste));
5626 
5627  //stack_pop(ContextStack);
5628  PopContext();
5629  }
5630 #line 5631 "cyacc.tab.c"
5631  break;
5632 
5633  case 233: /* $@17: %empty */
5634 #line 2857 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5635  {
5636  //c_parser_context ycontext = stack_head(ContextStack);
5638  /* Add struct/union name and MEMBER_SEP_STRING to entity name */
5639  string derived = code_decls_text((code) stack_head(StructNameStack));
5640  string stf = (c_parser_context_scope(ycontext));
5642  free(stf);
5644  }
5645 #line 5646 "cyacc.tab.c"
5646  break;
5647 
5648  case 234: /* struct_decl_list: decl_spec_list $@17 field_decl_list TK_SEMICOLON struct_decl_list */
5649 #line 2868 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5650  {
5651  pips_debug(1, "Reduction %d: decl_spec_list field_decl_list TK_SEMICOLON struct_decl_list -> struct_decl_list\n", __LINE__);
5652  /* Update the entity in field_decl_list with final type, storage, initial value*/
5653 
5654  UpdateDerivedEntities((yyvsp[-4].liste),(yyvsp[-2].liste),ContextStack);
5655 
5656  /* Create the list of member entities */
5657  list l1 = (yyvsp[-2].liste);
5658  list l2 = (yyvsp[0].liste);
5659  list nl2 = NIL;
5660  FOREACH(ENTITY, e, l2) {
5661  if(!gen_in_list_p(e, l1))
5662  nl2 = CONS(ENTITY, e, nl2);
5663  }
5664  nl2 = gen_nreverse(nl2);
5665  list rl = gen_nconc(l1, nl2);
5666  gen_free_list(l2);
5667  (yyval.liste) = rl;
5668  PopContext();
5669 
5670  /* This code is not good ...
5671  I have problem with the global variable ycontext and recursion: ycontext is crushed
5672  when this decl_spec_list in struct_decl_list is entered, so the scope and storage
5673  of the new context are given to the old context, before it is pushed in the stack.
5674 
5675  For the moment, I reset the changed values of the context, by hoping that in C,
5676  before a STRUCT/UNION declaration, there is no extern, ... */
5680  }
5681 #line 5682 "cyacc.tab.c"
5682  break;
5683 
5684  case 235: /* struct_decl_list: error TK_SEMICOLON struct_decl_list */
5685 #line 2900 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5686  {
5687  CParserError("Parse error: error TK_SEMICOLON struct_decl_list\n");
5688  }
5689 #line 5690 "cyacc.tab.c"
5690  break;
5691 
5692  case 236: /* field_decl_list: field_decl */
5693 #line 2907 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5694  {
5695  entity f = (yyvsp[0].entity);
5696  (yyval.liste) = CONS(ENTITY, f,NIL);
5697  }
5698 #line 5699 "cyacc.tab.c"
5699  break;
5700 
5701  case 237: /* field_decl_list: field_decl TK_COMMA field_decl_list */
5702 #line 2912 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5703  {
5704  entity f = (yyvsp[-2].entity);
5705  (yyval.liste) = CONS(ENTITY,f,(yyvsp[0].liste));
5706  }
5707 #line 5708 "cyacc.tab.c"
5708  break;
5709 
5710  case 238: /* field_decl: declarator */
5711 #line 2920 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5712  {
5713  /* For debugging... */
5714  /* It's probably the last place where you
5715  can use the qualifier from the context to
5716  update the type of e when e is a pointer. */
5717  entity e = (yyvsp[0].entity);
5718  type t = entity_type(e);
5719 
5720  /* FI: Well, this piece of code may be fully
5721  useless because t or pt is always undefined. */
5722  if(false && !type_undefined_p(t)) {
5723  type ut = ultimate_type(t);
5724 
5725  if(pointer_type_p(ut)) {
5727  if(!type_undefined_p(pt) && type_variable_p(pt)) {
5728  variable v = type_variable(pt);
5730  pips_assert("the current qualifier list is empty",
5732  /* FI: because of the above assert, the
5733  next statement could be simplified */
5734  variable_qualifiers(v) =
5737  }
5738  }
5739  }
5740 
5741  (yyval.entity) = e;
5742  }
5743 #line 5744 "cyacc.tab.c"
5744  break;
5745 
5746  case 239: /* field_decl: declarator TK_COLON expression */
5747 #line 2952 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5748  {
5749  value nv = EvalExpression((yyvsp[0].expression));
5750  constant c = value_constant_p(nv)?
5752  symbolic s = make_symbolic((yyvsp[0].expression), c);
5754 
5755  /*pips_assert("Width of bit-field must be a positive constant integer",
5756  integer_constant_expression_p($3)); */
5757  /* Ignore for this moment if the bit is signed or unsigned */
5758  entity_type((yyvsp[-2].entity)) = make_type_variable(v);
5759  (yyval.entity) = (yyvsp[-2].entity);
5760  }
5761 #line 5762 "cyacc.tab.c"
5762  break;
5763 
5764  case 240: /* field_decl: TK_COLON expression */
5765 #line 2966 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5766  {
5767  //c_parser_context ycontext = stack_head(ContextStack);
5769  /* Unnamed bit-field : special and unique name */
5770  string n = int2a(derived_counter++);
5771  string s = strdup(concatenate(DUMMY_MEMBER_PREFIX,n,NULL));
5773  value nv = EvalExpression((yyvsp[0].expression));
5774  constant c = value_constant_p(nv)?
5776  symbolic se = make_symbolic((yyvsp[0].expression), c);
5778  /* pips_assert("Width of bit-field must be a positive constant integer",
5779  integer_constant_expression_p($2)); */
5780  entity_type(ent) = make_type_variable(v);
5781  free(n);
5782  (yyval.entity) = ent;
5783  }
5784 #line 5785 "cyacc.tab.c"
5785  break;
5786 
5787  case 241: /* enum_list: enumerator */
5788 #line 2988 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5789  {
5790  /* initial_value = 0 or $3*/
5791  (yyval.liste) = CONS(ENTITY,(yyvsp[0].entity),NIL);
5792  enum_counter = 1;
5793  }
5794 #line 5795 "cyacc.tab.c"
5795  break;
5796 
5797  case 242: /* enum_list: enum_list TK_COMMA enumerator */
5798 #line 2994 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5799  {
5800  /* Attention to the reverse recursive definition*/
5801  (yyval.liste) = gen_nconc((yyvsp[-2].liste),CONS(ENTITY,(yyvsp[0].entity),NIL));
5802  enum_counter ++;
5803  }
5804 #line 5805 "cyacc.tab.c"
5805  break;
5806 
5807  case 243: /* enum_list: enum_list TK_COMMA error */
5808 #line 3000 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5809  {
5810  CParserError("Parse error: enum_list TK_COMMA error\n");
5811  }
5812 #line 5813 "cyacc.tab.c"
5813  break;
5814 
5815  case 244: /* enumerator: TK_IDENT */
5816 #line 3007 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5817  {
5818  /* Create an entity of is_basic_int, storage rom
5819  initial_value = 0 if it is the first member
5820  initial_value = intial_value(precedessor) + 1
5821 
5822  No need to add current struct/union/enum name to the name's scope of the member entity
5823  for ENUM, as in the case of STRUCT and UNION */
5824 
5825  entity ent = CreateEntityFromLocalNameAndPrefix((yyvsp[0].string),"",is_external);
5826  free((yyvsp[0].string));
5828  type rt = make_type(is_type_variable, v);
5830 
5833  /* The information is not yet available, but
5834  I need to recognize this entity as
5835  symbolic for next rule */
5837  // enum_list is not available yet. Values should be fixed later.
5838  /* entity_initial(ent) = MakeEnumeratorInitialValue(enum_list,enum_counter);*/
5839  (yyval.entity) = ent;
5840  }
5841 #line 5842 "cyacc.tab.c"
5842  break;
5843 
5844  case 245: /* enumerator: TK_IDENT TK_EQ expression */
5845 #line 3032 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5846  {
5847  /* Create an entity of is_basic_int, storage rom, initial_value = $3 */
5848  /* No, enum member must be functional
5849  entity, just like Fortran's parameters */
5850  //int i;
5851  value vinit = value_undefined;
5852  entity ent = CreateEntityFromLocalNameAndPrefix((yyvsp[-2].string),"",is_external);
5853  free((yyvsp[-2].string));
5854  variable v =
5856  type rt = make_type(is_type_variable, v);
5858 
5859  //pips_assert("Enumerated value must be a constant integer",
5860  // signed_integer_constant_expression_p($3));
5861  //i = signed_integer_constant_expression_value($3);
5862  vinit = EvalExpression((yyvsp[0].expression));
5865 
5866  if(value_constant_p(vinit) && constant_int_p(value_constant(vinit))) {
5867  entity_initial(ent) =
5869  }
5870  else {
5871  /* Error or reference to a previous member of the same enum (enum04.c) */
5872  /* FI: it might be easier to delay systematically the evaluation */
5873  bool is_ok = false;
5874  if(expression_call_p((yyvsp[0].expression))) {
5875  call c = syntax_call(expression_syntax((yyvsp[0].expression)));
5876  entity m = call_function(c);
5877 
5878  if(entity_symbolic_p(m)) {
5879  is_ok = true;
5880  }
5881  }
5882  if(is_ok)
5883  entity_initial(ent) =
5885  else {
5886  /* Let's try to delay evaluation anyway (enum05.c) */
5887  entity_initial(ent) =
5889  //pips_internal_error("Constant integer expression not evaluated\n");
5890  }
5891  }
5892 
5893  (yyval.entity) = ent;
5894  }
5895 #line 5896 "cyacc.tab.c"
5896  break;
5897 
5898  case 246: /* declarator: pointer_opt direct_decl attributes_with_asm */
5899 #line 3085 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5900  {
5901  /* Update the type of the direct_decl entity with pointer_opt and attributes*/
5902  if (!type_undefined_p((yyvsp[-2].type)))
5903  UpdatePointerEntity((yyvsp[-1].entity),(yyvsp[-2].type),(yyvsp[0].liste));
5904  else if(!entity_undefined_p((yyvsp[-1].entity)) &&!ENDP((yyvsp[0].liste)) ) {
5905  if(type_undefined_p(entity_type((yyvsp[-1].entity)))) {
5906  entity_type((yyvsp[-1].entity)) = make_type_variable(
5907  make_variable(
5909  NIL,
5910  (yyvsp[0].liste)
5911  )
5912  );
5913  }
5914  else if( type_variable_p(entity_type((yyvsp[-1].entity)) ) ){
5915  variable v = type_variable(entity_type((yyvsp[-1].entity)));
5916  variable_qualifiers(v)=gen_nconc(variable_qualifiers(v),(yyvsp[0].liste));
5917  }
5918  else {
5919  c_parser_user_warning("some _asm(..) attributes are going to be lost for entity `%s'\n",entity_name((yyvsp[-1].entity)));
5920  }
5921  }
5922  (yyval.entity) = (yyvsp[-1].entity);
5923  }
5924 #line 5925 "cyacc.tab.c"
5925  break;
5926 
5927  case 247: /* direct_decl: id_or_typename */
5928 #line 3115 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
5929  {
5930  /* FI: A variable cannot be redeclared
5931  within the same scope, but this is not
5932  checked yet. */
5934  /* Initialize the type stack and push the
5935  type of found/created entity to the
5936  stack. It can be undefined if the entity
5937  has not been parsed, or a given type
5938  which is used later to check if the
5939  declarations are the same for one entity.
5940  This stack is put temporarily in the
5941  storage of the entity, not a global
5942  variable for each declarator to avoid
5943  being erased by recursion (FI: this last
5944  sentence seems to be wrong) */
5946  if(stack_undefined_p(s)) {
5947  s = stack_make(type_domain,0,0);
5948  stack_push((char *) entity_type(e),s);
5950  }
5951  else {
5952  /* e has already been defined since a type
5953  stack is associated to it. At least, if
5954  the mapping from entity to type stack
5955  is well managed. Since entities are
5956  sometimes destroyed, a new entity might
5957  end up with the same memory address and
5958  hence the same type stack. */
5960  /* A function can be redeclared inside itself. see C_syntax/extern.c */
5961  if(cm!=e) {
5962  /* Dummy parameters can also be redeclared
5963  as long as their types are equal */
5964  if(dummy_parameter_entity_p(e)) {
5965  c_parser_user_warning("Dummy parameter \"%s\" is redefined.\n",
5966  entity_user_name(e));
5967  CParserError("Dummy redefinition accepted by gcc but not compatible with ISO standard."
5968  " Try to compile with \"gcc -ansi -c\"\n");
5969  }
5970  else {
5971  type t = (type) stack_head(s);
5972  if(type_undefined_p(t)) {
5973  c_parser_user_warning("Symbol \"%s\" is redefined.\n",
5974  entity_user_name(e) /* entity_name(e)*/);
5975  }
5976  else if(type_functional_p(t)) {
5977  c_parser_user_warning("Function \"%s\" is redefined.\n",
5978  entity_user_name(e) /* entity_name(e)*/);
5979  }
5980  else {
5981  c_parser_user_warning("Variable \"%s\" is redefined.\n",
5982  entity_user_name(e) /* entity_name(e)*/);
5983  CParserError("Variable redefinitions are not compatible with ISO standard."
5984  " Try to compile with \"gcc -ansi -c\"\n");
5985  }
5986  }
5987  }
5988  }
5989 
5991  //discard_C_comment();
5992  //push_current_C_comment();
5993  (yyval.entity) = e;
5994  }
5995 #line 5996 "cyacc.tab.c"
5996  break;
5997 
5998  case 248: /* direct_decl: TK_LPAREN attributes declarator TK_RPAREN */
5999 #line 3182 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6000  {
6001  /* Add attributes such as const, restrict, ... to variable's qualifiers */
6002  UpdateParenEntity((yyvsp[-1].entity), (yyvsp[-2].liste));
6003  (yyval.entity) = (yyvsp[-1].entity);
6004  stack_push((char *) entity_type((yyval.entity)),
6006  // FI: if I rely on the stack, I won't know for a while what
6007  // this entity is. And I'd like to make a difference between
6008  // a function and a pointer to a function before I declare
6009  // dummy arguments. But Nga's design has to be redone:-(.
6010  entity_type((yyval.entity)) = type_undefined;
6011  }
6012 #line 6013 "cyacc.tab.c"
6013  break;
6014 
6015  case 249: /* direct_decl: direct_decl TK_LBRACKET attributes comma_expression_opt TK_RBRACKET */
6016 #line 3195 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6017  {
6018  /* This is the last dimension of an array (i.e a[1][2][3] => [3]).
6019  Questions:
6020  - What can be attributes ?
6021  - Why comma_expression, it can be a list of expressions ?
6022  - When the comma_expression is empty (corresponding to the first dimension),
6023  the array is of unknown size => can be determined by the intialization ? TO BE DONE*/
6024  list el = (yyvsp[-1].liste);
6025  if(gen_length(el)<=1)
6026  UpdateArrayEntity((yyvsp[-4].entity),(yyvsp[-2].liste),el);
6027  else {
6029  UpdateArrayEntity((yyvsp[-4].entity),(yyvsp[-2].liste),CONS(EXPRESSION, d, NIL));
6030  }
6031  }
6032 #line 6033 "cyacc.tab.c"
6033  break;
6034 
6035  case 250: /* direct_decl: direct_decl TK_LBRACKET attributes error TK_RBRACKET */
6036 #line 3211 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6037  {
6038  CParserError("Parse error: direct_decl TK_LBRACKET attributes error TK_RBRACKET\n");
6039  }
6040 #line 6041 "cyacc.tab.c"
6041  break;
6042 
6043  case 251: /* $@18: %empty */
6044 #line 3215 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6045  {
6046  /* Well, here it can be a function or a pointer to a function */
6047  entity e = (yyvsp[-1].entity); //RenameFunctionEntity($1);
6050  /* If it is a pointer, its value is going
6051  to be "unknown" or "expression"; if it is
6052  a function, its value is going to be
6053  "code". If the value cannot stay
6054  undefined, it should be made
6055  unknown... */
6057  //entity_initial(e) = make_value_unknown();
6058  }
6059  //pips_assert("e is a module", module_name_p(entity_module_name(e)));
6060  PushFunction(e);
6061  }
6062 #line 6063 "cyacc.tab.c"
6063  break;
6064 
6065  case 252: /* direct_decl: direct_decl parameter_list_startscope $@18 rest_par_list TK_RPAREN */
6066 #line 3233 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6067  {
6069  entity e = GetFunction();
6070  entity ne = e;
6071  pips_assert("ne is an entity",
6073  PopFunction();
6076  /* Intrinsic functions in C such as printf, fprintf, ... are considered
6077  as entities with functional type ???
6078  if (!intrinsic_entity_p(e))*/
6079  /* e can be a function or a pointer to a
6080  function. The information is available
6081  somewhere in the stacks... */
6083  if(!stack_undefined_p(ts)) {
6084  type et = (type) stack_head(ts);
6085  if(type_undefined_p(et))
6086  ne = RenameFunctionEntity(e);
6087  else if(!type_variable_p(et))
6088  ne = RenameFunctionEntity(e);
6089  }
6090  pips_assert("ne is an entity",
6092  UpdateFunctionEntity(ne,(yyvsp[-1].liste));
6093  pips_assert("ne is an entity",
6095  /* No need to declare C user functions
6096  extern in a compilation unit; they are
6097  global or local. */
6098  if(!entity_undefined_p(m)
6100  && !intrinsic_entity_p(ne)) {
6101  /* Too early: pointers to functions are still
6102  * seen as functions here. Let's delay
6103  */
6104  // RemoveFromExterns(ne);
6105  pips_assert("ne is an entity",
6109  }
6110  (yyval.entity) = ne;
6111  }
6112 #line 6113 "cyacc.tab.c"
6113  break;
6114 
6115  case 253: /* parameter_list_startscope: TK_LPAREN */
6116 #line 3281 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6117  {
6118  stack_push((char *) make_basic_logical(true), FormalStack);
6119  stack_push((char *) make_basic_int(1),OffsetStack);
6120  }
6121 #line 6122 "cyacc.tab.c"
6122  break;
6123 
6124  case 254: /* rest_par_list: %empty */
6125 #line 3288 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6126  { (yyval.liste) = NIL; }
6127 #line 6128 "cyacc.tab.c"
6128  break;
6129 
6130  case 255: /* rest_par_list: parameter_decl rest_par_list1 */
6131 #line 3290 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6132  {
6133  (yyval.liste) = CONS(PARAMETER,(yyvsp[-1].parameter),(yyvsp[0].liste));
6134  }
6135 #line 6136 "cyacc.tab.c"
6136  break;
6137 
6138  case 256: /* rest_par_list1: %empty */
6139 #line 3295 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6140  { (yyval.liste) = NIL; }
6141 #line 6142 "cyacc.tab.c"
6142  break;
6143 
6144  case 257: /* $@19: %empty */
6145 #line 3297 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6146  {
6148  }
6149 #line 6150 "cyacc.tab.c"
6150  break;
6151 
6152  case 258: /* rest_par_list1: TK_COMMA $@19 TK_ELLIPSIS */
6153 #line 3301 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6154  {
6155  /*$$ = CONS(PARAMETER,make_parameter(make_type_varargs(type_undefined),
6156  make_mode(CurrentMode,UU), make_dummy_unknown()),NIL); */
6159  NIL, NIL));
6160  (yyval.liste) = CONS(PARAMETER,
6163  make_dummy_unknown()),
6164  NIL);
6165  }
6166 #line 6167 "cyacc.tab.c"
6167  break;
6168 
6169  case 259: /* $@20: %empty */
6170 #line 3314 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6171  {
6173  }
6174 #line 6175 "cyacc.tab.c"
6175  break;
6176 
6177  case 260: /* rest_par_list1: TK_COMMA $@20 parameter_decl rest_par_list1 */
6178 #line 3318 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6179  {
6180  (yyval.liste) = CONS(PARAMETER,(yyvsp[-1].parameter),(yyvsp[0].liste));
6181  }
6182 #line 6183 "cyacc.tab.c"
6183  break;
6184 
6185  case 261: /* parameter_decl: decl_spec_list declarator */
6186 #line 3325 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6187  {
6189  (yyval.parameter) = make_parameter(copy_type(entity_type((yyvsp[0].entity))),
6191  make_dummy_identifier((yyvsp[0].entity))); //FI: or should it
6192  // be entity_undefined? Are we parsing a compilation unit or a function?
6193  /* Set CurentMode where ???? */
6194  //stack_pop(ContextStack);
6195  PopContext();
6196  }
6197 #line 6198 "cyacc.tab.c"
6198  break;
6199 
6200  case 262: /* parameter_decl: decl_spec_list abstract_decl */
6201 #line 3336 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6202  {
6204  (yyval.parameter) = make_parameter(copy_type(entity_type((yyvsp[0].entity))),
6206  make_dummy_unknown()); //FI: to be checked
6207  RemoveFromExterns((yyvsp[0].entity));
6208  gen_remove(&removable_extern_entities, (void *) (yyvsp[0].entity));
6209  free_entity((yyvsp[0].entity));
6210  //stack_pop(ContextStack);
6211  PopContext();
6212  }
6213 #line 6214 "cyacc.tab.c"
6214  break;
6215 
6216  case 263: /* parameter_decl: decl_spec_list */
6217 #line 3348 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6218  {
6222  make_dummy_unknown());
6223  /* function prototype*/
6224  //stack_pop(ContextStack);
6225  PopContext();
6226  }
6227 #line 6228 "cyacc.tab.c"
6228  break;
6229 
6230  case 264: /* parameter_decl: TK_LPAREN parameter_decl TK_RPAREN */
6231 #line 3358 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6232  { (yyval.parameter) = (yyvsp[-1].parameter); }
6233 #line 6234 "cyacc.tab.c"
6234  break;
6235 
6236  case 265: /* old_proto_decl: pointer_opt direct_old_proto_decl */
6237 #line 3364 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6238  {
6239  if (!type_undefined_p((yyvsp[-1].type)))
6240  UpdatePointerEntity((yyvsp[0].entity),(yyvsp[-1].type),NIL);
6241  (yyval.entity) = (yyvsp[0].entity);
6242  }
6243 #line 6244 "cyacc.tab.c"
6244  break;
6245 
6246  case 266: /* $@21: %empty */
6247 #line 3373 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6248  {
6249  entity e = (yyvsp[-1].entity); //RenameFunctionEntity($1);
6252  //pips_assert("e is a module", module_name_p(entity_module_name(e)));
6253  PushFunction(e);
6254  stack_push((char *) make_basic_logical(true),FormalStack);
6255  stack_push((char *) make_basic_int(1),OffsetStack);
6256  }
6257 #line 6258 "cyacc.tab.c"
6258  break;
6259 
6260  case 267: /* direct_old_proto_decl: direct_decl TK_LPAREN $@21 old_parameter_list_ne TK_RPAREN old_pardef_list */
6261 #line 3383 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6262  {
6263  entity e = GetFunction();
6264  list paras = MakeParameterList((yyvsp[-2].liste),(yyvsp[0].liste),FunctionStack);
6265  PopFunction();
6268  (void) UpdateFunctionEntity(e, paras);
6269  //CreateReturnEntity(e);
6270  gen_free_list((yyvsp[-2].liste));
6271  (yyval.entity) = e;
6272  }
6273 #line 6274 "cyacc.tab.c"
6274  break;
6275 
6276  case 268: /* old_parameter_list_ne: TK_IDENT */
6277 #line 3404 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6278  {
6279  (yyval.liste) = CONS(STRING,(yyvsp[0].string),NIL);
6280  }
6281 #line 6282 "cyacc.tab.c"
6282  break;
6283 
6284  case 269: /* old_parameter_list_ne: TK_IDENT TK_COMMA old_parameter_list_ne */
6285 #line 3408 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6286  {
6287  (yyval.liste) = CONS(STRING,(yyvsp[-2].string),(yyvsp[0].liste));
6288  }
6289 #line 6290 "cyacc.tab.c"
6290  break;
6291 
6292  case 270: /* old_pardef_list: %empty */
6293 #line 3414 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6294  { (yyval.liste) = NIL; }
6295 #line 6296 "cyacc.tab.c"
6296  break;
6297 
6298  case 271: /* old_pardef_list: decl_spec_list old_pardef TK_SEMICOLON TK_ELLIPSIS */
6299 #line 3416 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6300  {
6302  //stack_pop(ContextStack);
6303  PopContext();
6304  /* Can we have struct/union definition in $1 ?*/
6305  /*$$ = gen_nconc($1,$2);*/
6306  (yyval.liste) = (yyvsp[-2].liste);
6307  }
6308 #line 6309 "cyacc.tab.c"
6309  break;
6310 
6311  case 272: /* old_pardef_list: decl_spec_list old_pardef TK_SEMICOLON old_pardef_list */
6312 #line 3425 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6313  {
6314  /* Rule used for C_syntax/activate.c,
6315  decl33.c and adi.c. CreateReturnEntity()
6316  only useful for activate.c */
6317  list el = (yyvsp[-2].liste);
6321  // The functional type of f could be
6322  // completed with the parameter types...
6324  //stack_pop(ContextStack);
6325  PopContext();
6326  /* Can we have struct/union definition in $1 ?*/
6327  /*$$ = gen_nconc($1,gen_nconc(el,$4));*/
6328  (yyval.liste) = gen_nconc(el,(yyvsp[0].liste));
6329  }
6330 #line 6331 "cyacc.tab.c"
6331  break;
6332 
6333  case 273: /* old_pardef: declarator */
6334 #line 3446 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6335  {
6336  (yyval.liste) = CONS(ENTITY,(yyvsp[0].entity),NIL);
6337  }
6338 #line 6339 "cyacc.tab.c"
6339  break;
6340 
6341  case 274: /* old_pardef: declarator TK_COMMA old_pardef */
6342 #line 3450 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6343  {
6344  (yyval.liste) = CONS(ENTITY,(yyvsp[-2].entity),(yyvsp[0].liste));
6345  }
6346 #line 6347 "cyacc.tab.c"
6347  break;
6348 
6349  case 275: /* old_pardef: error */
6350 #line 3454 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6351  {
6352  CParserError("Parse error: error \n");
6353  }
6354 #line 6355 "cyacc.tab.c"
6355  break;
6356 
6357  case 276: /* pointer: TK_STAR attributes pointer_opt */
6358 #line 3461 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6359  { /* decl24.c, decl50.c, decl51.c, decl52.c,
6360  decl53.c :
6361  const attribute lost or misplaced for pointers */
6362  list al = (yyvsp[-1].liste);
6363  type t = (yyvsp[0].type);
6364  //c_parser_context_qualifiers(ycontext) =
6365  // gen_nconc(c_parser_context_qualifiers(ycontext), al);
6367  //c_parser_context_qualifiers(ycontext) = NIL;
6368  }
6369 #line 6370 "cyacc.tab.c"
6370  break;
6371 
6372  case 277: /* pointer_opt: %empty */
6373 #line 3474 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6374  { (yyval.type) = type_undefined;}
6375 #line 6376 "cyacc.tab.c"
6376  break;
6377 
6378  case 278: /* pointer_opt: pointer */
6379 #line 3475 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6380  { }
6381 #line 6382 "cyacc.tab.c"
6382  break;
6383 
6384  case 279: /* type_name: decl_spec_list abstract_decl */
6385 #line 3480 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6386  {
6387  entity e = (yyvsp[0].entity);
6388  list el = CONS(ENTITY, e, NIL);
6390  (yyval.type) = copy_type(entity_type(e));
6391  RemoveFromExterns(e); // should be useless
6392  gen_remove(&removable_extern_entities, (void *) e);
6394  gen_free_list(el);
6395  free_entity(e);
6396  //stack_pop(ContextStack);
6397  PopContext();
6398  }
6399 #line 6400 "cyacc.tab.c"
6400  break;
6401 
6402  case 280: /* type_name: decl_spec_list */
6403 #line 3494 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6404  {
6406  (yyval.type) = c_parser_context_type(ycontext);
6407  //stack_pop(ContextStack);
6408  PopContext();
6409  }
6410 #line 6411 "cyacc.tab.c"
6411  break;
6412 
6413  case 281: /* abstract_decl: pointer_opt abs_direct_decl attributes */
6414 #line 3504 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6415  {
6416  /* Update the type of the direct_decl entity with pointer_opt and attributes*/
6417  if (!type_undefined_p((yyvsp[-2].type)))
6418  UpdatePointerEntity((yyvsp[-1].entity),(yyvsp[-2].type),(yyvsp[0].liste));
6419  (yyval.entity) = (yyvsp[-1].entity);
6420  }
6421 #line 6422 "cyacc.tab.c"
6422  break;
6423 
6424  case 282: /* abstract_decl: pointer */
6425 #line 3511 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6426  {
6427  string n = int2a(abstract_counter++);
6429  n,NULL)),
6430  ContextStack,
6431  FormalStack,
6432  FunctionStack,
6433  is_external);
6434  free(n);
6435  UpdatePointerEntity(e,(yyvsp[0].type),NIL);
6436  /* Initialize the type stack and push the type of found/created entity to the stack.
6437  It can be undefined if the entity has not been parsed, or a given type which is
6438  used later to check if the declarations are the same for one entity.
6439  This stack is put temporarily in the storage of the entity, not a global variable
6440  for each declarator to avoid being erased by recursion */
6441  stack s = stack_make(type_domain, 0, 0);
6442  //entity_storage($$) = (storage) s;
6443  stack_push((char *) entity_type(e),s);
6445  /*entity_type($$) = type_undefined;*/
6446  (yyval.entity) = e;
6447  }
6448 #line 6449 "cyacc.tab.c"
6449  break;
6450 
6451  case 283: /* abs_direct_decl: TK_LPAREN attributes abstract_decl TK_RPAREN */
6452 #line 3539 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6453  {
6454  UpdateParenEntity((yyvsp[-1].entity),(yyvsp[-2].liste));
6455  (yyval.entity) = (yyvsp[-1].entity);
6456  stack_push((char *) entity_type((yyval.entity)),
6458  entity_type((yyval.entity)) = type_undefined;
6459  }
6460 #line 6461 "cyacc.tab.c"
6461  break;
6462 
6463  case 284: /* abs_direct_decl: TK_LPAREN error TK_RPAREN */
6464 #line 3547 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6465  {
6466  CParserError("Parse error: TK_LPAREN error TK_RPAREN\n");
6467  }
6468 #line 6469 "cyacc.tab.c"
6469  break;
6470 
6471  case 285: /* abs_direct_decl: abs_direct_decl_opt TK_LBRACKET comma_expression_opt TK_RBRACKET */
6472 #line 3552 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6473  {
6474  UpdateArrayEntity((yyvsp[-3].entity),NIL,(yyvsp[-1].liste));
6475  }
6476 #line 6477 "cyacc.tab.c"
6477  break;
6478 
6479  case 286: /* $@22: %empty */
6480 #line 3557 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6481  {
6482  entity e = (yyvsp[-1].entity); //RenameFunctionEntity($1);
6485  //pips_assert("e is a module", module_name_p(entity_module_name($1)));
6486  PushFunction(e);
6487  }
6488 #line 6489 "cyacc.tab.c"
6489  break;
6490 
6491  case 287: /* abs_direct_decl: abs_direct_decl_opt parameter_list_startscope $@22 rest_par_list TK_RPAREN */
6492 #line 3565 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6493  {
6494  entity e = GetFunction();
6495  PopFunction();
6498  (void) UpdateFunctionEntity(e,(yyvsp[-1].liste));
6499  (yyval.entity) = e;
6500  }
6501 #line 6502 "cyacc.tab.c"
6502  break;
6503 
6504  case 288: /* abs_direct_decl_opt: abs_direct_decl */
6505 #line 3577 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6506  { }
6507 #line 6508 "cyacc.tab.c"
6508  break;
6509 
6510  case 289: /* abs_direct_decl_opt: %empty */
6511 #line 3578 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6512  {
6513  string n = int2a(abstract_counter++);
6515  n,NULL)),
6517  FunctionStack,
6518  is_external);
6519  free(n);
6520  stack s = stack_make(type_domain,0,0);
6521  //entity_storage($$) = (storage) s;
6522  stack_push((char *) entity_type(e),s);
6525  (yyval.entity) = e;
6526  }
6527 #line 6528 "cyacc.tab.c"
6528  break;
6529 
6530  case 290: /* $@23: %empty */
6531 #line 3597 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6532  {
6533  InitializeBlock();
6534  is_external = false;
6535  }
6536 #line 6537 "cyacc.tab.c"
6537  break;
6538 
6539  case 291: /* function_def: function_def_start $@23 block */
6540 #line 3602 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6541  {
6542  /* Make value_code for current module here */
6543  //list dl = statement_declarations($3);
6544  ModuleStatement = (yyvsp[0].statement);
6545  pips_assert("Module statement is consistent",
6547  pips_assert("No illegal redundant declarations",
6549  /* Let's delay this? ResetCurrentModule(); */
6550  is_external = true;
6551  }
6552 #line 6553 "cyacc.tab.c"
6553  break;
6554 
6555  case 292: /* function_def_start: decl_spec_list declarator */
6556 #line 3616 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6557  {
6559  //stack_pop(ContextStack);
6560  PopContext();
6561  pips_debug(2,"Create current module %s\n",entity_user_name((yyvsp[0].entity)));
6562  MakeCurrentModule((yyvsp[0].entity));
6564  clear_C_comment();
6565  pips_assert("Module is consistent\n",entity_consistent_p((yyvsp[0].entity)));
6566  }
6567 #line 6568 "cyacc.tab.c"
6568  break;
6569 
6570  case 293: /* function_def_start: decl_spec_list old_proto_decl */
6571 #line 3628 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6572  {
6574  //stack_pop(ContextStack);
6575  PopContext();
6576  pips_debug(2,"Create current module %s with old-style prototype\n",entity_user_name((yyvsp[0].entity)));
6577  MakeCurrentModule((yyvsp[0].entity));
6579  clear_C_comment();
6580  pips_assert("Module is consistent\n",entity_consistent_p((yyvsp[0].entity)));
6581  }
6582 #line 6583 "cyacc.tab.c"
6583  break;
6584 
6585  case 294: /* $@24: %empty */
6586 #line 3640 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6587  {
6588  entity oe = FindOrCreateEntity(TOP_LEVEL_MODULE_NAME,(yyvsp[-1].string));
6589  free((yyvsp[-1].string));
6590  entity e = oe; //RenameFunctionEntity(oe);
6591  pips_debug(2,"Create current module \"%s\" with no return type\n",
6592  entity_name(e));
6593  MakeCurrentModule(e);
6595  clear_C_comment();
6596  //pips_assert("e is a module", module_name_p(entity_module_name(e)));
6597  PushFunction(e);
6598  }
6599 #line 6600 "cyacc.tab.c"
6600  break;
6601 
6602  case 295: /* function_def_start: TK_IDENT parameter_list_startscope $@24 rest_par_list TK_RPAREN */
6603 #line 3653 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6604  {
6605  /* Functional type is unknown or int (by default) or void ?*/
6606  //functional f = make_functional($4,make_type_unknown());
6607  functional f = make_functional((yyvsp[-1].liste),MakeIntegerResult());
6608  entity e = GetFunction();
6610  pips_assert("Current module entity is consistent\n",entity_consistent_p(e));
6611  // Too late for full UpdateEntity() but at
6612  //least the return value and the formal
6613  //parameters should be properly defined
6614  //UpdateEntity(e,ContextStack,FormalStack,FunctionStack,OffsetStack,is_external,
6615  //false);
6617  PopFunction();
6620  }
6621 #line 6622 "cyacc.tab.c"
6622  break;
6623 
6624  case 296: /* $@25: %empty */
6625 #line 3672 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6626  {
6627  entity oe = FindOrCreateEntity(TOP_LEVEL_MODULE_NAME,(yyvsp[-2].string));
6628  entity e= oe; //RenameFunctionEntity(oe);
6629  pips_debug(2,"Create current module %s with no return type + old-style parameter list\n",(yyvsp[-2].string));
6630  free((yyvsp[-2].string));
6631  MakeCurrentModule(e);
6632  clear_C_comment();
6633  //pips_assert("e is a module", module_name_p(entity_module_name(e)));
6634  PushFunction(e);
6635  stack_push((char *) make_basic_logical(true),FormalStack);
6636  stack_push((char *) make_basic_int(1),OffsetStack);
6637  }
6638 #line 6639 "cyacc.tab.c"
6639  break;
6640 
6641  case 297: /* function_def_start: TK_IDENT TK_LPAREN old_parameter_list_ne $@25 TK_RPAREN old_pardef_list */
6642 #line 3685 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6643  {
6644  list paras = MakeParameterList((yyvsp[-3].liste),(yyvsp[0].liste),FunctionStack);
6645  gen_free_list((yyvsp[-3].liste));
6647  entity e = GetFunction();
6649  pips_assert("Current module entity is consistent\n",entity_consistent_p(e));
6650  PopFunction();
6653  }
6654 #line 6655 "cyacc.tab.c"
6655  break;
6656 
6657  case 298: /* attributes: %empty */
6658 #line 3715 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6659  { (yyval.liste) = NIL; }
6660 #line 6661 "cyacc.tab.c"
6661  break;
6662 
6663  case 299: /* attributes: attribute attributes */
6664 #line 3718 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6665  { (yyval.liste) = insert_qualifier((yyvsp[0].liste), (yyvsp[-1].qualifier));}
6666 #line 6667 "cyacc.tab.c"
6667  break;
6668 
6669  case 300: /* attributes_with_asm: %empty */
6670 #line 3725 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6671  { (yyval.liste) = NIL; }
6672 #line 6673 "cyacc.tab.c"
6673  break;
6674 
6675  case 301: /* attributes_with_asm: attribute attributes_with_asm */
6676 #line 3727 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6677  { (yyval.liste) = CONS(QUALIFIER,(yyvsp[-1].qualifier),(yyvsp[0].liste)); }
6678 #line 6679 "cyacc.tab.c"
6679  break;
6680 
6681  case 302: /* attributes_with_asm: TK_ASM TK_LPAREN string_constant TK_RPAREN attributes */
6682 #line 3729 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6683  { (yyval.liste) = CONS(QUALIFIER,make_qualifier_asm((yyvsp[-2].string)), (yyvsp[0].liste));}
6684 #line 6685 "cyacc.tab.c"
6685  break;
6686 
6687  case 303: /* attribute: TK_MSATTR */
6688 #line 3741 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6689  { CParserError("ATTRIBUTE not implemented\n"); }
6690 #line 6691 "cyacc.tab.c"
6691  break;
6692 
6693  case 304: /* attribute: TK_CONST */
6694 #line 3744 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6695  {
6696  (yyval.qualifier) = make_qualifier_const();
6697  }
6698 #line 6699 "cyacc.tab.c"
6699  break;
6700 
6701  case 305: /* attribute: TK_RESTRICT */
6702 #line 3748 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6703  {
6704  (yyval.qualifier) = make_qualifier_restrict();
6705  }
6706 #line 6707 "cyacc.tab.c"
6707  break;
6708 
6709  case 306: /* attribute: TK_VOLATILE */
6710 #line 3752 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6711  {
6712  (yyval.qualifier) = make_qualifier_volatile();
6713  }
6714 #line 6715 "cyacc.tab.c"
6715  break;
6716 
6717  case 307: /* attribute: TK_STATIC_DIMENSION */
6718 #line 3756 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6719  {
6721  }
6722 #line 6723 "cyacc.tab.c"
6723  break;
6724 
6725  case 308: /* asmattr: %empty */
6726 #line 3871 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6727  { }
6728 #line 6729 "cyacc.tab.c"
6729  break;
6730 
6731  case 309: /* asmattr: TK_VOLATILE asmattr */
6732 #line 3873 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6733  { CParserError("ASM not implemented\n"); }
6734 #line 6735 "cyacc.tab.c"
6735  break;
6736 
6737  case 310: /* asmattr: TK_CONST asmattr */
6738 #line 3875 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6739  { CParserError("ASM not implemented\n"); }
6740 #line 6741 "cyacc.tab.c"
6741  break;
6742 
6743  case 311: /* asmoutputs: %empty */
6744 #line 3880 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6745  { }
6746 #line 6747 "cyacc.tab.c"
6747  break;
6748 
6749  case 312: /* asmoutputs: TK_COLON asmoperands asminputs */
6750 #line 3882 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6751  { CParserError("ASM not implemented\n"); }
6752 #line 6753 "cyacc.tab.c"
6753  break;
6754 
6755  case 313: /* asmoperands: %empty */
6756 #line 3886 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6757  { }
6758 #line 6759 "cyacc.tab.c"
6759  break;
6760 
6761  case 314: /* asmoperands: asmoperandsne */
6762 #line 3888 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6763  { CParserError("ASM not implemented\n"); }
6764 #line 6765 "cyacc.tab.c"
6765  break;
6766 
6767  case 315: /* asmoperandsne: asmoperand */
6768 #line 3892 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6769  { CParserError("ASM not implemented\n"); }
6770 #line 6771 "cyacc.tab.c"
6771  break;
6772 
6773  case 316: /* asmoperandsne: asmoperandsne TK_COMMA asmoperand */
6774 #line 3894 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6775  { CParserError("ASM not implemented\n"); }
6776 #line 6777 "cyacc.tab.c"
6777  break;
6778 
6779  case 317: /* asmoperand: string_constant TK_LPAREN expression TK_RPAREN */
6780 #line 3898 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6781  { CParserError("ASM not implemented\n"); }
6782 #line 6783 "cyacc.tab.c"
6783  break;
6784 
6785  case 318: /* asmoperand: string_constant TK_LPAREN error TK_RPAREN */
6786 #line 3900 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6787  { CParserError("ASM not implemented\n"); }
6788 #line 6789 "cyacc.tab.c"
6789  break;
6790 
6791  case 319: /* asminputs: %empty */
6792 #line 3904 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6793  { }
6794 #line 6795 "cyacc.tab.c"
6795  break;
6796 
6797  case 320: /* asminputs: TK_COLON asmoperands asmclobber */
6798 #line 3906 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6799  { CParserError("ASM not implemented\n"); }
6800 #line 6801 "cyacc.tab.c"
6801  break;
6802 
6803  case 321: /* asmclobber: %empty */
6804 #line 3910 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6805  { }
6806 #line 6807 "cyacc.tab.c"
6807  break;
6808 
6809  case 322: /* asmclobber: TK_COLON asmcloberlst_ne */
6810 #line 3912 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6811  { CParserError("ASM not implemented\n"); }
6812 #line 6813 "cyacc.tab.c"
6813  break;
6814 
6815  case 323: /* asmcloberlst_ne: one_string_constant */
6816 #line 3916 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6817  { CParserError("ASM not implemented\n"); }
6818 #line 6819 "cyacc.tab.c"
6819  break;
6820 
6821  case 324: /* asmcloberlst_ne: one_string_constant TK_COMMA asmcloberlst_ne */
6822 #line 3918 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
6823  { CParserError("ASM not implemented\n"); }
6824 #line 6825 "cyacc.tab.c"
6825  break;
6826 
6827 
6828 #line 6829 "cyacc.tab.c"
6829 
6830  default: break;
6831  }
6832  /* User semantic actions sometimes alter yychar, and that requires
6833  that yytoken be updated with the new translation. We take the
6834  approach of translating immediately before every use of yytoken.
6835  One alternative is translating here after every semantic action,
6836  but that translation would be missed if the semantic action invokes
6837  YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
6838  if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
6839  incorrect destructor might then be invoked immediately. In the
6840  case of YYERROR or YYBACKUP, subsequent parser actions might lead
6841  to an incorrect destructor call or verbose syntax error message
6842  before the lookahead is translated. */
6843  YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc);
6844 
6845  YYPOPSTACK (yylen);
6846  yylen = 0;
6847 
6848  *++yyvsp = yyval;
6849 
6850  /* Now 'shift' the result of the reduction. Determine what state
6851  that goes to, based on the state we popped back to and the rule
6852  number reduced by. */
6853  {
6854  const int yylhs = yyr1[yyn] - YYNTOKENS;
6855  const int yyi = yypgoto[yylhs] + *yyssp;
6856  yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
6857  ? yytable[yyi]
6858  : yydefgoto[yylhs]);
6859  }
6860 
6861  goto yynewstate;
6862 
6863 
6864 /*--------------------------------------.
6865 | yyerrlab -- here on detecting error. |
6866 `--------------------------------------*/
6867 yyerrlab:
6868  /* Make sure we have latest lookahead translation. See comments at
6869  user semantic actions for why this is necessary. */
6870  yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar);
6871  /* If not already recovering from an error, report this error. */
6872  if (!yyerrstatus)
6873  {
6874  ++yynerrs;
6875  yyerror (YY_("syntax error"));
6876  }
6877 
6878  if (yyerrstatus == 3)
6879  {
6880  /* If just tried and failed to reuse lookahead token after an
6881  error, discard it. */
6882 
6883  if (yychar <= YYEOF)
6884  {
6885  /* Return failure if at end of input. */
6886  if (yychar == YYEOF)
6887  YYABORT;
6888  }
6889  else
6890  {
6891  yydestruct ("Error: discarding",
6892  yytoken, &yylval);
6893  yychar = YYEMPTY;
6894  }
6895  }
6896 
6897  /* Else will try to reuse lookahead token after shifting the error
6898  token. */
6899  goto yyerrlab1;
6900 
6901 
6902 /*---------------------------------------------------.
6903 | yyerrorlab -- error raised explicitly by YYERROR. |
6904 `---------------------------------------------------*/
6905 yyerrorlab:
6906  /* Pacify compilers when the user code never invokes YYERROR and the
6907  label yyerrorlab therefore never appears in user code. */
6908  if (0)
6909  YYERROR;
6910  ++yynerrs;
6911 
6912  /* Do not reclaim the symbols of the rule whose action triggered
6913  this YYERROR. */
6914  YYPOPSTACK (yylen);
6915  yylen = 0;
6916  YY_STACK_PRINT (yyss, yyssp);
6917  yystate = *yyssp;
6918  goto yyerrlab1;
6919 
6920 
6921 /*-------------------------------------------------------------.
6922 | yyerrlab1 -- common code for both syntax error and YYERROR. |
6923 `-------------------------------------------------------------*/
6924 yyerrlab1:
6925  yyerrstatus = 3; /* Each real token shifted decrements this. */
6926 
6927  /* Pop stack until we find a state that shifts the error token. */
6928  for (;;)
6929  {
6930  yyn = yypact[yystate];
6931  if (!yypact_value_is_default (yyn))
6932  {
6933  yyn += YYSYMBOL_YYerror;
6934  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror)
6935  {
6936  yyn = yytable[yyn];
6937  if (0 < yyn)
6938  break;
6939  }
6940  }
6941 
6942  /* Pop the current state because it cannot handle the error token. */
6943  if (yyssp == yyss)
6944  YYABORT;
6945 
6946 
6947  yydestruct ("Error: popping",
6948  YY_ACCESSING_SYMBOL (yystate), yyvsp);
6949  YYPOPSTACK (1);
6950  yystate = *yyssp;
6951  YY_STACK_PRINT (yyss, yyssp);
6952  }
6953 
6955  *++yyvsp = yylval;
6957 
6958 
6959  /* Shift the error token. */
6960  YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp);
6961 
6962  yystate = yyn;
6963  goto yynewstate;
6964 
6965 
6966 /*-------------------------------------.
6967 | yyacceptlab -- YYACCEPT comes here. |
6968 `-------------------------------------*/
6969 yyacceptlab:
6970  yyresult = 0;
6971  goto yyreturnlab;
6972 
6973 
6974 /*-----------------------------------.
6975 | yyabortlab -- YYABORT comes here. |
6976 `-----------------------------------*/
6977 yyabortlab:
6978  yyresult = 1;
6979  goto yyreturnlab;
6980 
6981 
6982 /*-----------------------------------------------------------.
6983 | yyexhaustedlab -- YYNOMEM (memory exhaustion) comes here. |
6984 `-----------------------------------------------------------*/
6985 yyexhaustedlab:
6986  yyerror (YY_("memory exhausted"));
6987  yyresult = 2;
6988  goto yyreturnlab;
6989 
6990 
6991 /*----------------------------------------------------------.
6992 | yyreturnlab -- parsing is finished, clean up and return. |
6993 `----------------------------------------------------------*/
6994 yyreturnlab:
6995  if (yychar != YYEMPTY)
6996  {
6997  /* Make sure we have latest lookahead translation. See comments at
6998  user semantic actions for why this is necessary. */
6999  yytoken = YYTRANSLATE (yychar);
7000  yydestruct ("Cleanup: discarding lookahead",
7001  yytoken, &yylval);
7002  }
7003  /* Do not reclaim the symbols of the rule whose action triggered
7004  this YYABORT or YYACCEPT. */
7005  YYPOPSTACK (yylen);
7006  YY_STACK_PRINT (yyss, yyssp);
7007  while (yyssp != yyss)
7008  {
7009  yydestruct ("Cleanup: popping",
7010  YY_ACCESSING_SYMBOL (+*yyssp), yyvsp);
7011  YYPOPSTACK (1);
7012  }
7013 #ifndef yyoverflow
7014  if (yyss != yyssa)
7015  YYSTACK_FREE (yyss);
7016 #endif
7017 
7018  return yyresult;
7019 }
7020 
7021 #line 3921 "/home/fabien/NIGHT/prod/pips/src/Libs/c_syntax/cyacc.y"
7022 
c_parser_context make_c_parser_context(string a1, type a2, storage a3, list a4, bool a5, bool a6)
c_parser_context copy_c_parser_context(c_parser_context p)
C_PARSER_CONTEXT.
void free_c_parser_context(c_parser_context p)
dummy make_dummy_identifier(entity _field_)
Definition: ri.c:620
qualifier make_qualifier_static_dimension(void)
Definition: ri.c:1945
functional make_functional(list a1, type a2)
Definition: ri.c:1109
call make_call(entity a1, list a2)
Definition: ri.c:269
basic make_basic_complex(intptr_t _field_)
Definition: ri.c:170
basic make_basic_typedef(entity _field_)
Definition: ri.c:185
value make_value_unknown(void)
Definition: ri.c:2847
basic make_basic_derived(entity _field_)
Definition: ri.c:182
parameter make_parameter(type a1, mode a2, dummy a3)
Definition: ri.c:1495
sizeofexpression make_sizeofexpression_expression(expression _field_)
Definition: ri.c:2180
expression make_expression(syntax a1, normalized a2)
Definition: ri.c:886
type make_type_union(list _field_)
Definition: ri.c:2733
basic make_basic_bit(symbolic _field_)
Definition: ri.c:176
mode make_mode(enum mode_utype tag, void *val)
Definition: ri.c:1350
type make_type_variable(variable _field_)
Definition: ri.c:2715
basic make_basic(enum basic_utype tag, void *val)
Definition: ri.c:155
storage make_storage_rom(void)
Definition: ri.c:2285
void free_entity(entity p)
Definition: ri.c:2524
qualifier make_qualifier_thread(void)
Definition: ri.c:1939
type copy_type(type p)
TYPE.
Definition: ri.c:2655
qualifier make_qualifier_restrict(void)
Definition: ri.c:1927
type make_type_struct(list _field_)
Definition: ri.c:2730
basic make_basic_int(intptr_t _field_)
Definition: ri.c:158
type make_type_functional(functional _field_)
Definition: ri.c:2718
type make_type_void(list _field_)
Definition: ri.c:2727
basic make_basic_pointer(type _field_)
Definition: ri.c:179
value make_value(enum value_utype tag, void *val)
Definition: ri.c:2832
bool statement_consistent_p(statement p)
Definition: ri.c:2195
test make_test(expression a1, statement a2, statement a3)
Definition: ri.c:2607
basic make_basic_float(intptr_t _field_)
Definition: ri.c:161
sizeofexpression make_sizeofexpression_type(type _field_)
Definition: ri.c:2177
statement make_statement(entity a1, intptr_t a2, intptr_t a3, string a4, instruction a5, list a6, string a7, extensions a8, synchronization a9)
Definition: ri.c:2222
symbolic make_symbolic(expression a1, constant a2)
Definition: ri.c:2369
qualifier make_qualifier_register(void)
Definition: ri.c:1933
variable make_variable(basic a1, list a2, list a3)
Definition: ri.c:2895
instruction make_instruction_call(call _field_)
Definition: ri.c:1184
syntax make_syntax_va_arg(list _field_)
Definition: ri.c:2515
basic make_basic_logical(intptr_t _field_)
Definition: ri.c:164
qualifier make_qualifier_volatile(void)
Definition: ri.c:1930
code make_code(list a1, string a2, sequence a3, list a4, language a5)
Definition: ri.c:353
language make_language_c(void)
Definition: ri.c:1253
type make_type_unknown(void)
Definition: ri.c:2724
instruction make_instruction(enum instruction_utype tag, void *val)
Definition: ri.c:1166
void free_type(type p)
Definition: ri.c:2658
type make_type_varargs(type _field_)
Definition: ri.c:2721
constant make_constant_unknown(void)
Definition: ri.c:424
normalized make_normalized_complex(void)
Definition: ri.c:1453
qualifier make_qualifier_auto(void)
Definition: ri.c:1936
dummy make_dummy_unknown(void)
Definition: ri.c:617
synchronization make_synchronization_none(void)
Definition: ri.c:2424
type make_type_enum(list _field_)
Definition: ri.c:2736
sequence make_sequence(list a)
Definition: ri.c:2125
qualifier make_qualifier_const(void)
Definition: ri.c:1924
bool entity_consistent_p(entity p)
Definition: ri.c:2530
type make_type(enum type_utype tag, void *val)
Definition: ri.c:2706
qualifier make_qualifier_asm(string _field_)
Definition: ri.c:1942
value make_value_symbolic(symbolic _field_)
Definition: ri.c:2838
string list_to_string(list l)
Return the malloc()ed version of the concatenation of all the strings in the list.
Definition: args.c:74
int derived_counter
Definition: c_parser.c:125
stack StructNameStack
Definition: c_parser.c:121
stack get_from_entity_type_stack_table(entity key)
Definition: c_parser.c:146
stack OffsetStack
Definition: c_parser.c:120
stack FunctionStack
Definition: c_parser.c:118
void put_to_entity_type_stack_table(entity key, stack value)
Definition: c_parser.c:139
list removable_extern_entities
Definition: c_parser.c:542
int loop_counter
Global counter.
Definition: c_parser.c:124
void remove_entity_type_stacks(list el)
Definition: c_parser.c:179
stack FormalStack
Definition: c_parser.c:119
stack ContextStack
Definition: c_parser.c:117
statement ModuleStatement
Definition: c_parser.c:53
#define c_parser_context_undefined_p(x)
#define c_parser_context_storage(x)
#define c_parser_context_qualifiers(x)
#define c_parser_context_undefined
struct _newgen_struct_c_parser_context_ * c_parser_context
#define c_parser_context_static(x)
#define c_parser_context_type(x)
struct _newgen_struct_type_ * type
#define c_parser_context_typedef(x)
#define c_parser_context_scope(x)
string get_current_C_comment(void)
Return the current comment as a string to be freed by the caller and reset the current comment.
Definition: clexer.c:1282
void reset_token_has_been_seen_p(void)
Definition: clexer.c:1270
#define c_parser_user_warning(...)
void discard_C_comment(void)
Discard a C comment because we don't know how to deal with it.
Definition: clexer.c:1426
void push_current_C_comment(void)
Push the current C comment so that we can get it back when building the statement later.
Definition: clexer.c:1331
int get_current_C_line_number(void)
Definition: clexer.c:1146
string pop_current_C_comment(void)
Pop the current comment.
Definition: clexer.c:1352
void push_current_C_line_number(void)
The line number stack, designed for structured control structure, is not used yet.
Definition: clexer.c:1194
void clear_C_comment(void)
Definition: clexer.c:1489
int pop_current_C_line_number(void)
Definition: clexer.c:1202
entity MakeDerivedEntity(string, list, bool, int)
Definition: util.c:3140
statement MakeBreakStatement(string)
Definition: statement.c:849
void UpdateAbstractEntity(entity, stack)
Definition: util.c:2842
statement MakeDefaultStatement(void)
Definition: statement.c:827
expression MakeArrayExpression(expression, list)
FI: this function is called for a bracketed comma expression.
Definition: util.c:713
string CreateMemberScope(string, bool)
Definition: util.c:3261
list TakeDerivedEntities(list)
Definition: util.c:3020
void ResetCurrentModule(void)
Definition: statement.c:125
void UpdateFunctionEntity(entity, list)
The parser has found out that an entity is a function and partially sets its type.
Definition: util.c:1614
statement MakeForloop(expression, expression, expression, statement)
Create a for-loop statement with some parser-specific characteristics.
Definition: statement.c:358
void StackPop(stack)
The OffsetStack is poped n times, where n is the number of formal arguments of the actual function.
Definition: util.c:3450
list add_prettyprint_control_list_to_declaration_statement(statement, list)
The control list is hidden as arguments to the call to CONTROL in the declaration statement s.
Definition: statement.c:920
void UpdateEntities(list, stack, stack, stack, stack, bool, bool)
Definition: util.c:2733
expression MakeFunctionExpression(expression, list)
e is now owned by returned expression and must not be used any longer
Definition: util.c:368
void UpdateDerivedEntities(list, list, stack)
Definition: util.c:3097
stack SwitchControllerStack
Definition: statement.c:63
void UpdateArrayEntity(entity, list, list)
Definition: util.c:1514
bool check_declaration_uniqueness_p(statement)
This is designed for standard C functions, not for compilation units.
Definition: util.c:3540
void UpdatePointerEntity(entity, type, list)
Definition: util.c:1444
list insert_qualifier(list, qualifier)
if qualifier "nq" does not already belong to qualifier list "ql", add it in front of the list.
Definition: util.c:3567
void set_prettyprint_control_list_to_dummy(void)
Definition: statement.c:1084
stack LoopStack
Definition: statement.c:64
expression MemberIdentifierToExpression(expression, string)
Definition: util.c:498
entity FindOrCreateEntityFromLocalNameAndPrefix(string, string, bool)
Definition: util.c:811
void set_entity_initial(entity, expression)
Be careful if the initial value has already been set.
Definition: util.c:3469
void RemoveFromExterns(entity)
Definition: util.c:2884
void InitializeBlock(void)
Definition: statement.c:143
void InitializeEnumMemberValues(list)
Definition: util.c:3104
stack SwitchGotoStack
list of labeled statements of the current module
Definition: statement.c:62
list MakeParameterList(list, list, stack)
Definition: util.c:3348
void UpdateEntity(entity, stack, stack, stack, stack, bool, bool)
Update the entity with final type, storage and initial value; and also (sometimes?...
Definition: util.c:2473
void MakeCurrentModule(entity)
is used for switch statements also, because we do not distinguish a break in a loop or a switch
Definition: statement.c:67
void CreateReturnEntity(entity)
If necessary, create the return entity, which is a hidden variable used in PIPS internal representati...
Definition: util.c:2382
statement MakeSwitchStatement(statement)
Definition: statement.c:586
statement ExpressionToStatement(expression)
e is now owned by returned statement
Definition: statement.c:880
void UpdateEntity2(entity, stack, stack)
statement MakeForloopWithIndexDeclaration(list, expression, expression, statement)
Create a C99 for-loop statement with a declaration as first parameter in the for clause,...
Definition: statement.c:508
statement MakeCaseStatement(expression)
Transform.
Definition: statement.c:712
void SubstituteDummyParameters(entity, list)
Definition: util.c:2351
void UpdateParenEntity(entity, list)
Definition: util.c:1368
entity FindOrCreateCurrentEntity(string, stack, stack, stack, bool)
statement MakeBlock(list)
Create a block statement.
Definition: statement.c:153
statement MakeContinueStatement(string)
Definition: statement.c:865
entity RenameFunctionEntity(entity)
Rename function oe if necessary.
Definition: util.c:1556
entity make_C_constant_entity(string, tag, size_t)
Definition: util.c:269
statement C_MakeReturnStatement(list, int, string)
This function creates a goto instruction to label end_label.
Definition: return.c:155
expression IdentifierToExpression(string)
Definition: util.c:650
void set_prettyprint_control_list_to_extern(void)
Definition: statement.c:1042
statement MakeWhileLoop(list, statement, bool)
Definition: statement.c:297
entity CreateEntityFromLocalNameAndPrefix(string, string, bool)
Definition: util.c:962
void CleanUpEntities(list)
Definition: util.c:2772
void StackPush(stack)
The OffsetStack is pushed incrementally.
Definition: util.c:3457
statement MakeLabeledStatement(string, statement, string)
Construct a new statement from.
Definition: statement.c:204
statement MakeGotoStatement(string)
Definition: statement.c:254
void CCleanLocalEntities(entity function)
C language version.
Definition: clean.c:146
entity MakeConstant(string name, tag bt)
Make a Fortran constant.
Definition: constant.c:351
YYSTYPE c_lval
#define BREAKPOINT
Definition: cyacc.tab.c:112
string GetScope()
Definition: cyacc.tab.c:371
static const char * yysymbol_name(yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED
The user-facing name of the symbol whose (internal) number is YYSYMBOL.
Definition: cyacc.tab.c:1383
static void EnterScope()
Definition: cyacc.tab.c:311
static list all_expression_comments_as_statement_comments
after a while (crocodile) expression comments are pushed into a list that is purged upon call to add_...
Definition: cyacc.tab.c:202
#define yyparse
------—.
Definition: cyacc.tab.c:68
static const yytype_uint8 yyr1[]
YYR1[RULE-NUM] – Symbol kind of the left-hand side of rule RULE-NUM.
Definition: cyacc.tab.c:2284
void reset_expression_comment()
we don't want an expression comment with new lines, it is disgracefull
Definition: cyacc.tab.c:169
static void save_expression_comment_as_statement_comment()
Definition: cyacc.tab.c:203
int c_parser_number_of_scopes()
Definition: cyacc.tab.c:587
#define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
Definition: cyacc.tab.c:1059
#define YYMAXDEPTH
Increase the parser stack to have SPEC2006/445.gobmk/owl_defendpat.c going through without a:
Definition: cyacc.tab.c:107
#define YYSTACK_FREE
Definition: cyacc.tab.c:1121
static const yytype_int8 yytranslate[]
YYTRANSLATE[TOKEN-NUM] – Symbol number corresponding to TOKEN-NUM as returned by yylex.
Definition: cyacc.tab.c:1235
yysymbol_kind_t
Symbol kind.
Definition: cyacc.tab.c:653
@ YYSYMBOL_statement_list
block_attrs
Definition: cyacc.tab.c:810
@ YYSYMBOL_TK_ALIGNOF
TK_SIZEOF
Definition: cyacc.tab.c:692
@ YYSYMBOL_wstring_list
string_list
Definition: cyacc.tab.c:789
@ YYSYMBOL_TK_TYPEOF
TK_ASM
Definition: cyacc.tab.c:754
@ YYSYMBOL_decl_spec_list
init_declarator
Definition: cyacc.tab.c:830
@ YYSYMBOL_TK_SHORT
TK_LONG
Definition: cyacc.tab.c:681
@ YYSYMBOL_TK_LBRACKET
TK_LBRACE
Definition: cyacc.tab.c:732
@ YYSYMBOL_asmattr
attribute
Definition: cyacc.tab.c:876
@ YYSYMBOL_TK_MINUS_EQ
TK_PLUS_EQ
Definition: cyacc.tab.c:695
@ YYSYMBOL_local_label_names
local_labels
Definition: cyacc.tab.c:812
@ YYSYMBOL_for_clause
$@10
Definition: cyacc.tab.c:825
@ YYSYMBOL_attribute
attributes_with_asm
Definition: cyacc.tab.c:875
@ YYSYMBOL_YYUNDEF
error
Definition: cyacc.tab.c:657
@ YYSYMBOL_maybecomma
id_or_typename
Definition: cyacc.tab.c:783
@ YYSYMBOL_TK_UNION
TK_TYPEDEF
Definition: cyacc.tab.c:677
@ YYSYMBOL_block_attrs
block
Definition: cyacc.tab.c:809
@ YYSYMBOL_TK_ASM
TK_INLINE
Definition: cyacc.tab.c:753
@ YYSYMBOL_TK_RBRACKET
TK_LBRACKET
Definition: cyacc.tab.c:733
@ YYSYMBOL_TK_MSATTR
TK_MSASM
Definition: cyacc.tab.c:763
@ YYSYMBOL_comma_expression_opt
comma_expression
Definition: cyacc.tab.c:802
@ YYSYMBOL_TK_MINUS
TK_PLUS
Definition: cyacc.tab.c:713
@ YYSYMBOL_asmclobber
asminputs
Definition: cyacc.tab.c:882
@ YYSYMBOL_168_9
$@8
Definition: cyacc.tab.c:823
@ YYSYMBOL_rest_par_list1
rest_par_list
Definition: cyacc.tab.c:851
@ YYSYMBOL_TK_CASE
TK_SWITCH
Definition: cyacc.tab.c:744
@ YYSYMBOL_TK_NAMED_TYPE
TK_FLOATCON
Definition: cyacc.tab.c:662
@ YYSYMBOL_TK_SLASH_EQ
TK_STAR_EQ
Definition: cyacc.tab.c:697
@ YYSYMBOL_pointer_opt
pointer
Definition: cyacc.tab.c:862
@ YYSYMBOL_TK_BUILTIN_VA_ARG
TK_LABEL__
Definition: cyacc.tab.c:758
@ YYSYMBOL_TK_TYPEDEF
TK_STRUCT
Definition: cyacc.tab.c:676
@ YYSYMBOL_TK_GOTO
TK_CONTINUE
Definition: cyacc.tab.c:741
@ YYSYMBOL_TK_CONTINUE
TK_BREAK
Definition: cyacc.tab.c:740
@ YYSYMBOL_TK_BREAK
TK_QUEST
Definition: cyacc.tab.c:739
@ YYSYMBOL_TK_ARROW
TK_SUP_SUP_EQ
Definition: cyacc.tab.c:704
@ YYSYMBOL_enumerator
enum_list
Definition: cyacc.tab.c:845
@ YYSYMBOL_TK_BUILTIN_VA_LIST
TK_BUILTIN_VA_ARG
Definition: cyacc.tab.c:759
@ YYSYMBOL_id_or_typename
$@2
Definition: cyacc.tab.c:782
@ YYSYMBOL_TK_PERCENT
TK_SLASH
Definition: cyacc.tab.c:716
@ YYSYMBOL_initializer
initializer_list_opt
Definition: cyacc.tab.c:794
@ YYSYMBOL_TK_AUTO
TK_RESTRICT
Definition: cyacc.tab.c:688
@ YYSYMBOL_TK_INT
TK_CHAR
Definition: cyacc.tab.c:667
@ YYSYMBOL_asmoperand
asmoperandsne
Definition: cyacc.tab.c:880
@ YYSYMBOL_TK_COLON
TK_RBRACKET
Definition: cyacc.tab.c:734
@ YYSYMBOL_TK_SUP_EQ
TK_INF_EQ
Definition: cyacc.tab.c:711
@ YYSYMBOL_init_expression
one_string
Definition: cyacc.tab.c:791
@ YYSYMBOL_file
interpret
Definition: cyacc.tab.c:776
@ YYSYMBOL_TK_EXCLAM
TK_CIRC
Definition: cyacc.tab.c:721
@ YYSYMBOL_TK_SIZEOF
TK_THREAD
Definition: cyacc.tab.c:691
@ YYSYMBOL_YYerror
"end of file"
Definition: cyacc.tab.c:656
@ YYSYMBOL_TK_SUP_SUP
TK_INF_INF
Definition: cyacc.tab.c:725
@ YYSYMBOL_TK_CONST
TK_STATIC_DIMENSION
Definition: cyacc.tab.c:686
@ YYSYMBOL_constant
expression
Definition: cyacc.tab.c:785
@ YYSYMBOL_TK_AT_NAME
TK_AT_EXPR
Definition: cyacc.tab.c:770
@ YYSYMBOL_216_24
function_def_start
Definition: cyacc.tab.c:871
@ YYSYMBOL_TK_RPAREN
TK_MINUS_MINUS
Definition: cyacc.tab.c:728
@ YYSYMBOL_TK_UINT128
TK_INT128
Definition: cyacc.tab.c:669
@ YYSYMBOL_198_20
$@19
Definition: cyacc.tab.c:853
@ YYSYMBOL_126_2
global
Definition: cyacc.tab.c:781
@ YYSYMBOL_type_spec
decl_spec_list_opt_no_named
Definition: cyacc.tab.c:835
@ YYSYMBOL_214_23
function_def
Definition: cyacc.tab.c:869
@ YYSYMBOL_TK_EOF
TK_WSTRINGCON
Definition: cyacc.tab.c:665
@ YYSYMBOL_TK_SUP_SUP_EQ
TK_INF_INF_EQ
Definition: cyacc.tab.c:703
@ YYSYMBOL_166_7
$@6
Definition: cyacc.tab.c:821
@ YYSYMBOL_old_pardef_list
old_parameter_list_ne
Definition: cyacc.tab.c:859
@ YYSYMBOL_TK_VOLATILE
TK_SHORT
Definition: cyacc.tab.c:682
@ YYSYMBOL_local_labels
statement_list
Definition: cyacc.tab.c:811
@ YYSYMBOL_string_list
one_string_constant
Definition: cyacc.tab.c:788
@ YYSYMBOL_abs_direct_decl_opt
$@22
Definition: cyacc.tab.c:867
@ YYSYMBOL_202_21
direct_old_proto_decl
Definition: cyacc.tab.c:857
@ YYSYMBOL_TK_INF
TK_EXCLAM_EQ
Definition: cyacc.tab.c:708
@ YYSYMBOL_TK_INLINE
TK_ATTRIBUTE
Definition: cyacc.tab.c:752
@ YYSYMBOL_struct_decl_list
$@16
Definition: cyacc.tab.c:840
@ YYSYMBOL_TK_EQ_EQ
TK_DOT
Definition: cyacc.tab.c:706
@ YYSYMBOL_abs_direct_decl
abstract_decl
Definition: cyacc.tab.c:865
@ YYSYMBOL_TK_PRAGMA
TK_MSATTR
Definition: cyacc.tab.c:764
@ YYSYMBOL_164_5
$@4
Definition: cyacc.tab.c:819
@ YYSYMBOL_enum_list
field_decl
Definition: cyacc.tab.c:844
@ YYSYMBOL_182_14
$@13
Definition: cyacc.tab.c:837
@ YYSYMBOL_TK_INT128
TK_INT
Definition: cyacc.tab.c:668
@ YYSYMBOL_TK_AT_EXPR
TK_AT_SPECIFIER
Definition: cyacc.tab.c:769
@ YYSYMBOL_field_decl_list
$@17
Definition: cyacc.tab.c:842
@ YYSYMBOL_parameter_list_startscope
$@18
Definition: cyacc.tab.c:849
@ YYSYMBOL_declarator
enumerator
Definition: cyacc.tab.c:846
@ YYSYMBOL_TK_PIPE_PIPE
TK_AND_AND
Definition: cyacc.tab.c:723
@ YYSYMBOL_init_declarator
init_declarator_list
Definition: cyacc.tab.c:829
@ YYSYMBOL_TK__Pragma
TK_PRAGMA
Definition: cyacc.tab.c:765
@ YYSYMBOL_expression
maybecomma
Definition: cyacc.tab.c:784
@ YYSYMBOL_location
$@1
Definition: cyacc.tab.c:779
@ YYSYMBOL_TK_IF
TK_FOR
Definition: cyacc.tab.c:749
@ YYSYMBOL_TK_PIPE
TK_AND
Definition: cyacc.tab.c:719
@ YYSYMBOL_186_17
struct_decl_list
Definition: cyacc.tab.c:841
@ YYSYMBOL_asminputs
asmoperand
Definition: cyacc.tab.c:881
@ YYSYMBOL_label
local_label_names
Definition: cyacc.tab.c:813
@ YYSYMBOL_TK_AT_SPECIFIER
TK_AT_TRANSFORMEXPR
Definition: cyacc.tab.c:768
@ YYSYMBOL_TK_AND
TK_TILDE
Definition: cyacc.tab.c:718
@ YYSYMBOL_184_16
$@15
Definition: cyacc.tab.c:839
@ YYSYMBOL_TK_LBRACE
TK_RBRACE
Definition: cyacc.tab.c:731
@ YYSYMBOL_176_12
decl_spec_list
Definition: cyacc.tab.c:831
@ YYSYMBOL_TK_PERCENT_EQ
TK_SLASH_EQ
Definition: cyacc.tab.c:698
@ YYSYMBOL_TK_MINUS_MINUS
TK_PLUS_PLUS
Definition: cyacc.tab.c:727
@ YYSYMBOL_comma_expression
opt_expression
Definition: cyacc.tab.c:801
@ YYSYMBOL_TK_FLOATCON
TK_INTCON
Definition: cyacc.tab.c:661
@ YYSYMBOL_TK_DOT
TK_ARROW
Definition: cyacc.tab.c:705
@ YYSYMBOL_TK_INF_EQ
TK_SUP
Definition: cyacc.tab.c:710
@ YYSYMBOL_old_proto_decl
parameter_decl
Definition: cyacc.tab.c:855
@ YYSYMBOL_TK_CIRC_EQ
TK_PIPE_EQ
Definition: cyacc.tab.c:701
@ YYSYMBOL_TK_QUEST
TK_ELLIPSIS
Definition: cyacc.tab.c:738
@ YYSYMBOL_arguments
gcc_init_designators
Definition: cyacc.tab.c:799
@ YYSYMBOL_old_parameter_list_ne
$@21
Definition: cyacc.tab.c:858
@ YYSYMBOL_opt_expression
arguments
Definition: cyacc.tab.c:800
@ YYSYMBOL_old_pardef
old_pardef_list
Definition: cyacc.tab.c:860
@ YYSYMBOL_197_19
rest_par_list1
Definition: cyacc.tab.c:852
@ YYSYMBOL_bracket_comma_expression
paren_comma_expression
Definition: cyacc.tab.c:805
@ YYSYMBOL_TK_STATIC
TK_EXTERN
Definition: cyacc.tab.c:684
@ YYSYMBOL_my_decl_spec_list
$@12
Definition: cyacc.tab.c:832
@ YYSYMBOL_TK_DECLSPEC
TK_BLOCKATTRIBUTE
Definition: cyacc.tab.c:761
@ YYSYMBOL_TK_SWITCH
TK_RETURN
Definition: cyacc.tab.c:743
@ YYSYMBOL_init_declarator_list
declaration
Definition: cyacc.tab.c:828
@ YYSYMBOL_169_10
$@9
Definition: cyacc.tab.c:824
@ YYSYMBOL_TK_AND_EQ
TK_PERCENT_EQ
Definition: cyacc.tab.c:699
@ YYSYMBOL_TK_INF_INF
TK_PIPE_PIPE
Definition: cyacc.tab.c:724
@ YYSYMBOL_init_designators
eq_opt
Definition: cyacc.tab.c:796
@ YYSYMBOL_TK_STRUCT
TK_ENUM
Definition: cyacc.tab.c:675
@ YYSYMBOL_152_3
statements_inside_block
Definition: cyacc.tab.c:807
@ YYSYMBOL_TK_PLUS_EQ
TK_EQ
Definition: cyacc.tab.c:694
@ YYSYMBOL_asmoutputs
asmattr
Definition: cyacc.tab.c:877
@ YYSYMBOL_211_22
abs_direct_decl
Definition: cyacc.tab.c:866
@ YYSYMBOL_TK_LONG
TK_UNSIGNED
Definition: cyacc.tab.c:680
@ YYSYMBOL_TK_AND_AND
TK_EXCLAM
Definition: cyacc.tab.c:722
@ YYSYMBOL_statement_paren_comma_expression
comma_expression_opt
Definition: cyacc.tab.c:803
@ YYSYMBOL_statement_without_pragma
statement
Definition: cyacc.tab.c:817
@ YYSYMBOL_TK_DO
TK_WHILE
Definition: cyacc.tab.c:747
@ YYSYMBOL_initializer_list_opt
initializer_list
Definition: cyacc.tab.c:793
@ YYSYMBOL_asmoperandsne
asmoperands
Definition: cyacc.tab.c:879
@ YYSYMBOL_declaration
$@11
Definition: cyacc.tab.c:827
@ YYSYMBOL_TK_WSTRINGCON
TK_STRINGCON
Definition: cyacc.tab.c:664
@ YYSYMBOL_statements_inside_block
bracket_comma_expression
Definition: cyacc.tab.c:806
@ YYSYMBOL_block
$@3
Definition: cyacc.tab.c:808
@ YYSYMBOL_abstract_decl
type_name
Definition: cyacc.tab.c:864
@ YYSYMBOL_TK_WHILE
TK_DEFAULT
Definition: cyacc.tab.c:746
@ YYSYMBOL_TK_STAR_EQ
TK_MINUS_EQ
Definition: cyacc.tab.c:696
@ YYSYMBOL_TK_INF_INF_EQ
TK_CIRC_EQ
Definition: cyacc.tab.c:702
@ YYSYMBOL_TK_RBRACE
TK_LPAREN
Definition: cyacc.tab.c:730
@ YYSYMBOL_TK_CHAR
TK_EOF
Definition: cyacc.tab.c:666
@ YYSYMBOL_YYACCEPT
TK_ADDROF
Definition: cyacc.tab.c:774
@ YYSYMBOL_TK_SIGNED
TK_UNION
Definition: cyacc.tab.c:678
@ YYSYMBOL_statement
pragmas
Definition: cyacc.tab.c:816
@ YYSYMBOL_165_6
$@5
Definition: cyacc.tab.c:820
@ YYSYMBOL_181_13
type_spec
Definition: cyacc.tab.c:836
@ YYSYMBOL_TK_CIRC
TK_PIPE
Definition: cyacc.tab.c:720
@ YYSYMBOL_TK_PLUS_PLUS
TK_SUP_SUP
Definition: cyacc.tab.c:726
@ YYSYMBOL_167_8
$@7
Definition: cyacc.tab.c:822
@ YYSYMBOL_interpret
$accept
Definition: cyacc.tab.c:775
@ YYSYMBOL_TK_TILDE
TK_PERCENT
Definition: cyacc.tab.c:717
@ YYSYMBOL_217_25
$@24
Definition: cyacc.tab.c:872
@ YYSYMBOL_TK_REGISTER
TK_AUTO
Definition: cyacc.tab.c:689
@ YYSYMBOL_function_def
abs_direct_decl_opt
Definition: cyacc.tab.c:868
@ YYSYMBOL_pointer
old_pardef
Definition: cyacc.tab.c:861
@ YYSYMBOL_TK_FLOAT
TK_DOUBLE
Definition: cyacc.tab.c:671
@ YYSYMBOL_rest_par_list
parameter_list_startscope
Definition: cyacc.tab.c:850
@ YYSYMBOL_TK_COMPLEX
TK_VOID
Definition: cyacc.tab.c:673
@ YYSYMBOL_TK_SLASH
TK_STAR
Definition: cyacc.tab.c:715
@ YYSYMBOL_YYEOF
Definition: cyacc.tab.c:655
@ YYSYMBOL_pragma
label
Definition: cyacc.tab.c:814
@ YYSYMBOL_pragmas
pragma
Definition: cyacc.tab.c:815
@ YYSYMBOL_paren_comma_expression
statement_paren_comma_expression
Definition: cyacc.tab.c:804
@ YYSYMBOL_TK_ADDROF
TK_CAST
Definition: cyacc.tab.c:773
@ YYSYMBOL_TK_ATTRIBUTE
TK_ELSE
Definition: cyacc.tab.c:751
@ YYSYMBOL_direct_decl
declarator
Definition: cyacc.tab.c:847
@ YYSYMBOL_183_15
$@14
Definition: cyacc.tab.c:838
@ YYSYMBOL_TK_VOID
TK_FLOAT
Definition: cyacc.tab.c:672
@ YYSYMBOL_TK_FOR
TK_DO
Definition: cyacc.tab.c:748
@ YYSYMBOL_TK_COMMA
TK_SEMICOLON
Definition: cyacc.tab.c:736
@ YYSYMBOL_TK_FUNCTION__
TK_TYPEOF
Definition: cyacc.tab.c:755
@ YYSYMBOL_TK_MSASM
TK_DECLSPEC
Definition: cyacc.tab.c:762
@ YYSYMBOL_TK_DOUBLE
TK_UINT128
Definition: cyacc.tab.c:670
@ YYSYMBOL_171_11
for_clause
Definition: cyacc.tab.c:826
@ YYSYMBOL_TK_LABEL__
TK_PRETTY_FUNCTION__
Definition: cyacc.tab.c:757
@ YYSYMBOL_TK_PRETTY_FUNCTION__
TK_FUNCTION__
Definition: cyacc.tab.c:756
@ YYSYMBOL_193_18
direct_decl
Definition: cyacc.tab.c:848
@ YYSYMBOL_eq_opt
initializer
Definition: cyacc.tab.c:795
@ YYSYMBOL_TK_PLUS
TK_SUP_EQ
Definition: cyacc.tab.c:712
@ YYSYMBOL_TK_THREAD
TK_REGISTER
Definition: cyacc.tab.c:690
@ YYSYMBOL_type_name
pointer_opt
Definition: cyacc.tab.c:863
@ YYSYMBOL_TK_EXTERN
TK_VOLATILE
Definition: cyacc.tab.c:683
@ YYSYMBOL_TK_ELSE
TK_IF
Definition: cyacc.tab.c:750
@ YYSYMBOL_TK_ELLIPSIS
TK_COMMA
Definition: cyacc.tab.c:737
@ YYSYMBOL_TK_DEFAULT
TK_CASE
Definition: cyacc.tab.c:745
@ YYSYMBOL_initializer_list
init_expression
Definition: cyacc.tab.c:792
@ YYSYMBOL_TK_AT_TRANSFORMEXPR
TK_AT_TRANSFORM
Definition: cyacc.tab.c:767
@ YYSYMBOL_string_constant
constant
Definition: cyacc.tab.c:786
@ YYSYMBOL_attributes
$@25
Definition: cyacc.tab.c:873
@ YYSYMBOL_TK_STAR
TK_MINUS
Definition: cyacc.tab.c:714
@ YYSYMBOL_field_decl
field_decl_list
Definition: cyacc.tab.c:843
@ YYSYMBOL_YYEMPTY
Definition: cyacc.tab.c:654
@ YYSYMBOL_global
location
Definition: cyacc.tab.c:780
@ YYSYMBOL_globals
file
Definition: cyacc.tab.c:777
@ YYSYMBOL_function_def_start
$@23
Definition: cyacc.tab.c:870
@ YYSYMBOL_TK_LPAREN
TK_RPAREN
Definition: cyacc.tab.c:729
@ YYSYMBOL_asmcloberlst_ne
asmclobber
Definition: cyacc.tab.c:883
@ YYSYMBOL_TK_AT_TRANSFORM
TK__Pragma
Definition: cyacc.tab.c:766
@ YYSYMBOL_one_string
wstring_list
Definition: cyacc.tab.c:790
@ YYSYMBOL_asmoperands
asmoutputs
Definition: cyacc.tab.c:878
@ YYSYMBOL_init_designators_opt
init_designators
Definition: cyacc.tab.c:797
@ YYSYMBOL_TK_COMPLEXCON
TK_AT_NAME
Definition: cyacc.tab.c:771
@ YYSYMBOL_TK_EQ
TK_ALIGNOF
Definition: cyacc.tab.c:693
@ YYSYMBOL_TK_CHARCON
TK_IDENT
Definition: cyacc.tab.c:659
@ YYSYMBOL_123_1
globals
Definition: cyacc.tab.c:778
@ YYSYMBOL_TK_UNSIGNED
TK_SIGNED
Definition: cyacc.tab.c:679
@ YYSYMBOL_TK_INTCON
TK_CHARCON
Definition: cyacc.tab.c:660
@ YYSYMBOL_TK_RETURN
TK_GOTO
Definition: cyacc.tab.c:742
@ YYSYMBOL_TK_IDENT
"invalid token"
Definition: cyacc.tab.c:658
@ YYSYMBOL_attributes_with_asm
attributes
Definition: cyacc.tab.c:874
@ YYSYMBOL_TK_RESTRICT
TK_CONST
Definition: cyacc.tab.c:687
@ YYSYMBOL_gcc_init_designators
init_designators_opt
Definition: cyacc.tab.c:798
@ YYSYMBOL_TK_SUP
TK_INF
Definition: cyacc.tab.c:709
@ YYSYMBOL_TK_ENUM
TK_COMPLEX
Definition: cyacc.tab.c:674
@ YYSYMBOL_TK_BLOCKATTRIBUTE
TK_BUILTIN_VA_LIST
Definition: cyacc.tab.c:760
@ YYSYMBOL_decl_spec_list_opt_no_named
decl_spec_list_opt
Definition: cyacc.tab.c:834
@ YYSYMBOL_one_string_constant
string_constant
Definition: cyacc.tab.c:787
@ YYSYMBOL_TK_STRINGCON
TK_NAMED_TYPE
Definition: cyacc.tab.c:663
@ YYSYMBOL_decl_spec_list_opt
my_decl_spec_list
Definition: cyacc.tab.c:833
@ YYSYMBOL_TK_EXCLAM_EQ
TK_EQ_EQ
Definition: cyacc.tab.c:707
@ YYSYMBOL_TK_SEMICOLON
TK_COLON
Definition: cyacc.tab.c:735
@ YYSYMBOL_163_4
statement_without_pragma
Definition: cyacc.tab.c:818
@ YYSYMBOL_parameter_decl
$@20
Definition: cyacc.tab.c:854
@ YYSYMBOL_TK_STATIC_DIMENSION
TK_STATIC
Definition: cyacc.tab.c:685
@ YYSYMBOL_TK_CAST
TK_COMPLEXCON
Definition: cyacc.tab.c:772
@ YYSYMBOL_direct_old_proto_decl
old_proto_decl
Definition: cyacc.tab.c:856
@ YYSYMBOL_TK_PIPE_EQ
TK_AND_EQ
Definition: cyacc.tab.c:700
static void yy_symbol_print(FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const *const yyvaluep)
-----------------------—.
Definition: cyacc.tab.c:2447
#define YY_ASSERT(E)
Definition: cyacc.tab.c:1079
#define YY_(Msgid)
Definition: cyacc.tab.c:1013
static int declaration_counter
Declaration counter.
Definition: cyacc.tab.c:490
#define YYNOMEM
Definition: cyacc.tab.c:2368
void push_new_c_parser_scope()
Definition: cyacc.tab.c:549
#define YY_IGNORE_MAYBE_UNINITIALIZED_END
Definition: cyacc.tab.c:1060
#define YYNSTATES
YYNSTATES – Number of states.
Definition: cyacc.tab.c:1220
string get_c_parser_current_scope()
Definition: cyacc.tab.c:569
void reset_declaration_counter()
Definition: cyacc.tab.c:492
#define YY_IGNORE_USELESS_CAST_END
Definition: cyacc.tab.c:1075
static int expression_line_number
Definition: cyacc.tab.c:166
short yytype_int16
Definition: cyacc.tab.c:924
#define yychar
Definition: cyacc.tab.c:74
string get_c_parser_nth_scope(int n)
Definition: cyacc.tab.c:581
static const yytype_int16 yydefact[]
YYDEFACT[STATE-NUM] – Default reduction number in state STATE-NUM.
Definition: cyacc.tab.c:1468
#define YYABORT
Definition: cyacc.tab.c:2366
static const yytype_int16 yyrline[]
YYRLINE[YYN] – Source line where rule number YYN was defined.
Definition: cyacc.tab.c:1279
#define YYSTACK_BYTES(N)
The size of an array large to enough to hold all stacks, each with N elements.
Definition: cyacc.tab.c:1164
yytype_int16 yy_state_t
Stored state numbers (used for stacks).
Definition: cyacc.tab.c:1000
static const yytype_int16 yydefgoto[]
YYDEFGOTO[NTERM-NUM].
Definition: cyacc.tab.c:1549
#define YY_REDUCE_PRINT(Rule)
Definition: cyacc.tab.c:2505
static statement flush_statement_comment(statement s)
flushes all statement comments and add them to statement s
Definition: cyacc.tab.c:211
#define YY_CAST(Type, Val)
Definition: cyacc.tab.c:634
static void yydestruct(const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep)
YYMAXDEPTH – maximum size the stacks can grow to (effective only if the built-in stack extension meth...
Definition: cyacc.tab.c:2548
static statement flush_expression_comment(statement s)
flushes all expression comments and add them to statement s
Definition: cyacc.tab.c:182
void init_c_parser_scope_stack()
Definition: cyacc.tab.c:514
void force_reset_c_parser_scope_stack()
To be used by an error handler.
Definition: cyacc.tab.c:539
static const yytype_int16 yypact[]
YYPACT[STATE-NUM] – Index in YYTABLE of the portion describing STATE-NUM.
Definition: cyacc.tab.c:1401
#define SCOPE_UNDEFINED
Each scope in the current unit has its own number.
Definition: cyacc.tab.c:510
static list GetDerivedEntityDeclarations()
Definition: cyacc.tab.c:610
#define yylex
Definition: cyacc.tab.c:69
#define YY_NULLPTR
Definition: cyacc.tab.c:646
static void PushFunction(entity f)
The following structures must be stacks because all the related entities are in recursive structures.
Definition: cyacc.tab.c:136
static list internal_derived_entity_declarations
When struct and union declarations are nested, the rules cannot return information about the internal...
Definition: cyacc.tab.c:601
void * malloc(YYSIZE_T)
void PushContext(c_parser_context c)
Definition: cyacc.tab.c:434
#define YYFINAL
!YYCOPY_NEEDED
Definition: cyacc.tab.c:1209
#define YY_ACCESSING_SYMBOL(State)
Accessing symbol of state STATE.
Definition: cyacc.tab.c:1318
string scope_to_block_scope(string full_scope)
Allocate a new string containing only block scope information.
Definition: cyacc.tab.c:268
#define YY_SYMBOL_PRINT(Title, Kind, Value, Location)
Definition: cyacc.tab.c:2412
static string expression_comment
FI: these two variables are used in conjunction with comma expressions.
Definition: cyacc.tab.c:165
void ExitScope()
Definition: cyacc.tab.c:400
static const yytype_int16 yypgoto[]
YYPGOTO[NTERM-NUM].
Definition: cyacc.tab.c:1533
static void ResetDerivedEntityDeclarations()
Definition: cyacc.tab.c:619
#define yylval
Definition: cyacc.tab.c:73
#define YYNTOKENS
YYNTOKENS – Number of terminals.
Definition: cyacc.tab.c:1214
unsigned char yytype_uint8
Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants.
Definition: cyacc.tab.c:945
#define YY_STACK_PRINT(Bottom, Top)
Definition: cyacc.tab.c:2474
static void yy_symbol_value_print(FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const *const yyvaluep)
-------------------------------—.
Definition: cyacc.tab.c:2429
#define YYSIZE_T
Definition: cyacc.tab.c:986
#define yydebug
Definition: cyacc.tab.c:71
#define YY_IGNORE_USELESS_CAST_BEGIN
Definition: cyacc.tab.c:1074
static const yytype_int8 yyr2[]
YYR2[RULE-NUM] – Number of symbols on the right-hand side of rule RULE-NUM.
Definition: cyacc.tab.c:2322
static c_parser_context ycontext
Definition: cyacc.tab.c:157
#define YYPTRDIFF_T
Definition: cyacc.tab.c:972
bool c_parser_scope_stack_empty_p()
Definition: cyacc.tab.c:564
#define yynerrs
Definition: cyacc.tab.c:72
static int CurrentMode
to know the mode of the formal parameter: by value or by reference
Definition: cyacc.tab.c:114
static void yy_reduce_print(yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule)
--------------------------------------------—.
Definition: cyacc.tab.c:2486
static void add_initialization_expression(int init_p)
init_p = 0 => no initialization for a variable or no definition for a derived entity (struct,...
Definition: cyacc.tab.c:124
static const yytype_int16 yytable[]
YYTABLE[YYPACT[STATE-NUM]] – What to do in state STATE-NUM.
Definition: cyacc.tab.c:1567
#define YYACCEPT
Definition: cyacc.tab.c:2365
#define yytable_value_is_error(Yyn)
Definition: cyacc.tab.c:1396
static int enum_counter
to compute the enumerator value: val(i) = val(i-1) + 1
Definition: cyacc.tab.c:117
#define YYTRANSLATE(YYX)
YYTRANSLATE(TOKEN-NUM) – Symbol number corresponding to TOKEN-NUM as returned by yylex,...
Definition: cyacc.tab.c:1228
static void RecordDerivedEntityDeclaration(entity de)
Definition: cyacc.tab.c:603
static int c_parser_scope_number
Definition: cyacc.tab.c:511
c_parser_context GetContextCopy()
Definition: cyacc.tab.c:476
#define YY_ATTRIBUTE_UNUSED
Definition: cyacc.tab.c:1030
static list initialization_expressions
to preserve information about the declarations for the prettyprinter, especially for the global varia...
Definition: cyacc.tab.c:120
static const char *const yytname[]
YYTNAME[SYMBOL-NUM] – String name of the symbol SYMBOL-NUM.
Definition: cyacc.tab.c:1327
c_parser_context GetContext()
Definition: cyacc.tab.c:458
static const yytype_uint8 yystos[]
YYSTOS[STATE-NUM] – The symbol kind of the accessing symbol of state STATE-NUM.
Definition: cyacc.tab.c:2219
@ YYENOMEM
Definition: cyacc.tab.c:2360
static bool is_external
to know if the variable is declared inside or outside a function, so its scope is the current functio...
Definition: cyacc.tab.c:115
static void PopFunction()
Definition: cyacc.tab.c:141
static int abstract_counter
to create temporary entities for abstract types
Definition: cyacc.tab.c:118
void reset_c_parser_scope_stack()
Definition: cyacc.tab.c:522
entity GetFunction()
cproto workaround
Definition: cyacc.tab.c:146
c_parser_context CreateDefaultContext()
Definition: cyacc.tab.c:292
int get_declaration_counter()
Definition: cyacc.tab.c:497
#define YYPOPSTACK(N)
int yy_state_fast_t
State numbers in computations.
Definition: cyacc.tab.c:1003
string pop_block_scope(string old_scope)
The scope is moved up the scope tree and a NULL is return when there are no more scope to explore.
Definition: cyacc.tab.c:235
unsigned short yytype_uint16
Definition: cyacc.tab.c:956
void InitScope()
Definition: cyacc.tab.c:306
void PopContext()
Definition: cyacc.tab.c:441
void pop_c_parser_scope_stack()
Definition: cyacc.tab.c:558
#define YYLAST
YYLAST – Last index in YYTABLE.
Definition: cyacc.tab.c:1211
#define YYSTACK_RELOCATE(Stack_alloc, Stack)
Relocate STACK from its old location to the new one.
Definition: cyacc.tab.c:1175
static stack c_parser_scope_stack
Definition: cyacc.tab.c:512
#define yypact_value_is_default(Yyn)
Definition: cyacc.tab.c:1391
#define YYINITDEPTH
!YYDEBUG
Definition: cyacc.tab.c:2524
signed char yytype_int8
On compilers that do not define PTRDIFF_MAX etc., make sure <limits.h> and (if available) <stdint....
Definition: cyacc.tab.c:916
void free(void *)
#define YYERROR
Definition: cyacc.tab.c:2367
static void yy_stack_print(yy_state_t *yybottom, yy_state_t *yytop)
--------------------------------------------------------------—.
Definition: cyacc.tab.c:2463
#define YYSIZEOF(X)
Definition: cyacc.tab.c:996
#define YYFPRINTF
Enable debugging if requested.
Definition: cyacc.tab.c:2400
string GetParentScope()
Definition: cyacc.tab.c:387
static const yytype_int16 yycheck[]
Definition: cyacc.tab.c:1892
#define YYSTACK_ALLOC
The parser invokes alloca or malloc; define the necessary symbols.
Definition: cyacc.tab.c:1120
#define YYDPRINTF(Args)
Definition: cyacc.tab.c:2403
static int C_scope_identifier
Definition: cyacc.tab.c:304
int ScopeStackSize()
Definition: cyacc.tab.c:366
#define YY_USE(E)
Suppress unused-variable warnings by "using" E.
Definition: cyacc.tab.c:1036
#define yyerror
Definition: cyacc.tab.c:70
bool compilation_unit_p(const char *module_name)
The names of PIPS entities carry information about their nature.
Definition: entity_names.c:56
bool get_bool_property(const string)
FC 2015-07-20: yuk, moved out to prevent an include cycle dependency include "properties....
@ string_domain
Definition: genC.h:170
#define STRING(x)
Definition: genC.h:87
void gen_full_free_list(list l)
Definition: genClib.c:1023
#define YYEOF
Definition: genread.h:85
#define YYerror
Definition: genread.h:86
#define YYUNDEF
Definition: genread.h:87
#define YYEMPTY
Token kinds.
Definition: genread.h:84
yysymbol_kind_t
!YY_GENREAD_Y_TAB_H_INCLUDED
Definition: genread_yacc.c:294
short yytype_int16
Definition: genread_yacc.c:378
unsigned char yytype_uint8
Work around bug in HP-UX 11.23, which defines these macros incorrectly for preprocessor constants.
Definition: genread_yacc.c:399
int yy_state_fast_t
State numbers in computations.
Definition: genread_yacc.c:457
signed char yytype_int8
On compilers that do not define PTRDIFF_MAX etc., make sure <limits.h> and (if available) <stdint....
Definition: genread_yacc.c:370
yytype_int8 yy_state_t
Stored state numbers (used for stacks).
Definition: genread_yacc.c:454
void CParserError(char *msg)
statement make_statement_from_statement_list_or_empty_block(list)
Build a statement sequence from a statement list.
Definition: statement.c:700
statement make_empty_block_statement(void)
Build an empty statement (block/sequence)
Definition: statement.c:625
const char * get_current_module_name(void)
Get the name of the current module.
Definition: static.c:121
entity get_current_module_entity(void)
Get the entity of the current module.
Definition: static.c:85
instruction make_instruction_block(list statements)
Build an instruction block from a list of statements.
Definition: instruction.c:106
#define ENDP(l)
Test if a list is empty.
Definition: newgen_list.h:66
list gen_nreverse(list cp)
reverse a list in place
Definition: list.c:304
void gen_remove(list *cpp, const void *o)
remove all occurences of item o from list *cpp, which is thus modified.
Definition: list.c:685
#define NIL
The empty list (nil in Lisp)
Definition: newgen_list.h:47
size_t gen_length(const list l)
Definition: list.c:150
bool gen_once_p(list l)
FC: ARGH...O(n^2)!
Definition: list.c:758
#define CONS(_t_, _i_, _l_)
List element cell constructor (insert an element at the beginning of a list)
Definition: newgen_list.h:150
list gen_nconc(list cp1, list cp2)
physically concatenates CP1 and CP2 but do not duplicates the elements
Definition: list.c:344
#define CAR(pcons)
Get the value of the first element of a list.
Definition: newgen_list.h:92
void gen_free_list(list l)
free the spine of the list
Definition: list.c:327
bool gen_in_list_p(const void *vo, const list lx)
tell whether vo belongs to lx
Definition: list.c:734
#define FOREACH(_fe_CASTER, _fe_item, _fe_list)
Apply/map an instruction block on all the elements of a list.
Definition: newgen_list.h:179
#define list_undefined
Undefined list definition :-)
Definition: newgen_list.h:69
bool statement_test_p(statement)
Definition: statement.c:343
list statements_to_declarations(list)
Returns the declarations contained in a list of statement.
Definition: statement.c:3265
statement add_comment_and_line_number(statement, string, int)
Since block cannot carry comments nor line numbers, they must be moved to an internal continue statem...
Definition: statement.c:1980
statement make_declarations_statement(list, int, string)
Make a declaration(s) statement.
Definition: statement.c:990
statement make_continue_statement(entity)
Definition: statement.c:953
bool empty_comments_p(const char *)
Definition: statement.c:107
bool continue_statements_p(list)
Check that all statements contained in statement list sl are a continue statements.
Definition: statement.c:246
#define pips_debug
these macros use the GNU extensions that allow variadic macros, including with an empty list.
Definition: misc-local.h:145
#define pips_user_warning
Definition: misc-local.h:146
#define asprintf
Definition: misc-local.h:225
#define pips_assert(what, predicate)
common macros, two flavors depending on NDEBUG
Definition: misc-local.h:172
#define pips_internal_error
Definition: misc-local.h:149
#define abort()
Definition: misc-local.h:53
#define DUMMY_STRUCT_PREFIX
Definition: naming-local.h:87
#define BLOCK_SEP_CHAR
Definition: naming-local.h:51
#define MODULE_SEP
special characters to build entity names of various kinds
Definition: naming-local.h:27
#define DUMMY_ENUM_PREFIX
For enum and struct and union without names (see c_syntax/cyacc.y)
Definition: naming-local.h:86
#define DUMMY_MEMBER_PREFIX
Definition: naming-local.h:90
#define TYPEDEF_PREFIX
Definition: naming-local.h:62
#define UNION_PREFIX
Definition: naming-local.h:58
#define ENUM_PREFIX
Definition: naming-local.h:60
#define TOP_LEVEL_MODULE_NAME
Module containing the global variables in Fortran and C.
Definition: naming-local.h:101
#define DUMMY_UNION_PREFIX
Definition: naming-local.h:88
#define MODULE_SEP_STRING
Definition: naming-local.h:30
#define MEMBER_SEP_STRING
Definition: naming-local.h:53
#define DUMMY_ABSTRACT_PREFIX
Definition: naming-local.h:89
#define STRUCT_PREFIX
Definition: naming-local.h:56
#define BLOCK_SEP_STRING
Scope separator.
Definition: naming-local.h:50
#define STATEMENT_ORDERING_UNDEFINED
mapping.h inclusion
Definition: newgen-local.h:35
string gen_strndup0(string, size_t)
Like strdup() but copy at most n characters.
Definition: string.c:83
string concatenate(const char *,...)
Return the concatenation of the given strings.
Definition: string.c:183
#define stack_undefined
Definition: newgen_stack.h:55
void * stack_nth(const stack, int)
returns the nth item starting from the head and counting from 1, when possible, or NULL,...
Definition: stack.c:436
bool stack_empty_p(const stack)
void * stack_head(const stack)
returns the item on top of stack s
Definition: stack.c:420
int stack_size(const stack)
observers
void stack_push(void *, stack)
stack use
Definition: stack.c:373
void stack_free(stack *)
type, bucket_size, policy
Definition: stack.c:292
stack stack_make(int, int, int)
allocation
Definition: stack.c:246
void * stack_pop(stack)
POPs one item from stack s.
Definition: stack.c:399
#define stack_undefined_p(s)
Definition: newgen_stack.h:56
#define string_undefined
Definition: newgen_types.h:40
char * string
STRING.
Definition: newgen_types.h:39
#define string_undefined_p(s)
Definition: newgen_types.h:41
#define UU
Definition: newgen_types.h:98
int f(int off1, int off2, int n, float r[n], float a[n], float b[n])
Definition: offsets.c:15
#define BITWISE_OR_OPERATOR_NAME
#define POST_DECREMENT_OPERATOR_NAME
Definition: ri-util-local.h:98
#define BITWISE_XOR_OPERATOR_NAME
#define C_LESS_OR_EQUAL_OPERATOR_NAME
#define C_AND_OPERATOR_NAME
#define DEFAULT_SIGNED_TYPE_SIZE
#define C_GREATER_OR_EQUAL_OPERATOR_NAME
#define BITWISE_OR_UPDATE_OPERATOR_NAME
#define C_GREATER_THAN_OPERATOR_NAME
#define C_MODULO_OPERATOR_NAME
#define ASM_FUNCTION_NAME
__asm function
#define DIVIDE_UPDATE_OPERATOR_NAME
#define COMMA_OPERATOR_NAME
#define MODULO_UPDATE_OPERATOR_NAME
#define POINT_TO_OPERATOR_NAME
Definition: ri-util-local.h:92
#define DEFAULT_INTEGER_TYPE_SIZE
#define DEFAULT_REAL_TYPE_SIZE
The standard C integer types are represented as follow char = 1 short_int = 2 int = 4 long_int = 6 lo...
#define DEFAULT_SHORT_INTEGER_TYPE_SIZE
#define statement_block_p(stat)
#define DEREFERENCING_OPERATOR_NAME
Definition: ri-util-local.h:93
#define entity_symbolic_p(e)
#define test_to_statement(t)
#define FIELD_OPERATOR_NAME
Definition: ri-util-local.h:91
#define DEFAULT_COMPLEX_TYPE_SIZE
#define DEFAULT_DOUBLECOMPLEX_TYPE_SIZE
#define C_NON_EQUAL_OPERATOR_NAME
#define LEFT_SHIFT_UPDATE_OPERATOR_NAME
#define DEFAULT_LONG_LONG_LONG_INTEGER_TYPE_SIZE
#define DEFAULT_UNSIGNED_TYPE_SIZE
#define DEFAULT_QUADPRECISION_TYPE_SIZE
#define STATEMENT_NUMBER_UNDEFINED
default values
#define MULTIPLY_UPDATE_OPERATOR_NAME
#define LEFT_SHIFT_OPERATOR_NAME
#define CONDITIONAL_OPERATOR_NAME
#define C_RETURN_FUNCTION_NAME
#define call_to_statement(c)
#define MINUS_UPDATE_OPERATOR_NAME
#define C_NOT_OPERATOR_NAME
#define DEFAULT_CHARACTER_TYPE_SIZE
Default type sizes.
#define ADDRESS_OF_OPERATOR_NAME
#define PRE_DECREMENT_OPERATOR_NAME
#define DIVIDE_OPERATOR_NAME
#define UNARY_MINUS_OPERATOR_NAME
#define BITWISE_XOR_UPDATE_OPERATOR_NAME
#define call_to_instruction
#define UNARY_PLUS_OPERATOR_NAME
#define RIGHT_SHIFT_UPDATE_OPERATOR_NAME
#define C_LESS_THAN_OPERATOR_NAME
#define BITWISE_NOT_OPERATOR_NAME
#define PRE_INCREMENT_OPERATOR_NAME
Definition: ri-util-local.h:99
#define POST_INCREMENT_OPERATOR_NAME
Definition: ri-util-local.h:97
#define PLUS_UPDATE_OPERATOR_NAME
#define MINUS_C_OPERATOR_NAME
#define MULTIPLY_OPERATOR_NAME
#define BITWISE_AND_UPDATE_OPERATOR_NAME
#define C_OR_OPERATOR_NAME
#define BITWISE_AND_OPERATOR_NAME
#define RIGHT_SHIFT_OPERATOR_NAME
#define DEFAULT_DOUBLEPRECISION_TYPE_SIZE
#define C_EQUAL_OPERATOR_NAME
#define PLUS_C_OPERATOR_NAME
const char * entity_user_name(entity e)
Since entity_local_name may contain PIPS special characters such as prefixes (label,...
Definition: entity.c:487
const char * entity_local_name(entity e)
entity_local_name modified so that it does not core when used in vect_fprint, since someone thought t...
Definition: entity.c:453
entity FindOrCreateEntity(const char *package, const char *local_name)
Problem: A functional global entity may be referenced without parenthesis or CALL keyword in a functi...
Definition: entity.c:1586
bool dummy_parameter_entity_p(entity p)
is p a dummy parameter?
Definition: entity.c:1941
bool string_block_scope_p(string s)
Definition: entity.c:511
bool intrinsic_entity_p(entity e)
Definition: entity.c:1272
string empty_scope()
Functions used to manage the block scoping in conjunction with ContextStack and yco ntext.
Definition: entity.c:498
bool entities_p(list el)
Make sure that an list is an homogeneous list of entities.
Definition: entity.c:2580
bool string_struct_scope_p(string s)
same kind of testing required for union as well
Definition: entity.c:503
entity entity_empty_label(void)
Definition: entity.c:1105
bool entity_field_p(entity e)
e is the field of a structure
Definition: entity.c:857
void print_entities(list l)
Definition: entity.c:167
entity CreateIntrinsic(string name)
this function does not create an intrinsic function because they must all be created beforehand by th...
Definition: entity.c:1311
entity entity_intrinsic(const char *name)
FI: I do not understand this function name (see next one!).
Definition: entity.c:1292
value EvalExpression(expression e)
Evaluate statically an expression.
Definition: eval.c:108
expression MakeSizeofType(type t)
Definition: expression.c:3904
expression MakeBraceExpression(list l)
Definition: expression.c:3927
bool expression_call_p(expression e)
Definition: expression.c:415
expression MakeCommaExpression(list l)
Definition: expression.c:3918
expression make_call_expression(entity e, list l)
Build an expression that call an function entity with an argument list.
Definition: expression.c:321
expression entity_to_expression(entity e)
if v is a constant, returns a constant call.
Definition: expression.c:165
expression MakeBinaryCall(entity f, expression eg, expression ed)
Creates a call expression to a function with 2 arguments.
Definition: expression.c:354
expression int_to_expression(_int i)
transform an int into an expression and generate the corresponding entity if necessary; it is not cle...
Definition: expression.c:1188
expression MakeSizeofExpression(expression e)
Definition: expression.c:3896
expression MakeNullaryCall(entity f)
Creates a call expression to a function with zero arguments.
Definition: expression.c:331
expression MakeCastExpression(type t, expression e)
Definition: expression.c:3911
expression MakeUnaryCall(entity f, expression a)
Creates a call expression to a function with one argument.
Definition: expression.c:342
bool expression_reference_p(expression e)
Test if an expression is a reference.
Definition: expression.c:528
bool simplify_C_expression(expression e)
Replace C operators "+C" and "-C" which can handle pointers by arithmetic operators "+" and "-" when ...
Definition: expression.c:2814
expression make_assign_expression(expression lhs, expression rhs)
Make an assign expression, since in C the assignment is a side effect operator.
Definition: expression.c:390
reference expression_reference(expression e)
Short cut, meaningful only if expression_reference_p(e) holds.
Definition: expression.c:1832
expression MakeTernaryCall(entity f, expression e1, expression e2, expression e3)
Creates a call expression to a function with 3 arguments.
Definition: expression.c:367
extensions empty_extensions(void)
extension.c
Definition: extension.c:43
bool compilation_unit_entity_p(entity e)
Check if the given module entity is a compilation unit.
Definition: module.c:87
void add_pragma_str_to_statement(statement st, const char *s, bool copy_flag)
Add a string as a pragma to a statement.
Definition: pragma.c:425
void add_pragma_strings_to_statement(statement st, list l, bool copy_flag)
Add a list of strings as as many pragmas to a statement.
Definition: pragma.c:448
type ultimate_type(type)
Definition: type.c:3466
type make_standard_long_integer_type(type)
Definition: type.c:3309
bool default_complex_type_p(type)
Definition: type.c:3246
type make_standard_integer_type(type, int)
Definition: type.c:3196
bool scalar_integer_type_p(type)
Definition: type.c:3276
void AddEntityToDeclarations(entity, entity)
END_EOLE.
Definition: variable.c:108
type type_to_final_pointed_type(type)
returns t if t is not a pointer type, and the first indirectly pointed type that is not a pointer if ...
Definition: type.c:5336
type MakeIntegerResult(void)
Definition: type.c:276
bool pointer_type_p(type)
Check for scalar pointers.
Definition: type.c:2993
bool standard_long_integer_type_p(type)
Used to encode the long keyword in the parser.
Definition: type.c:3227
entity make_place_holder_variable(entity)
Definition: variable.c:2059
#define type_functional_p(x)
Definition: ri.h:2950
#define value_undefined_p(x)
Definition: ri.h:3017
#define value_undefined
Definition: ri.h:3016
@ is_basic_string
Definition: ri.h:576
@ is_basic_float
Definition: ri.h:572
@ is_basic_overloaded
Definition: ri.h:574
@ is_basic_int
Definition: ri.h:571
@ is_basic_complex
Definition: ri.h:575
#define functional_result(x)
Definition: ri.h:1444
struct _newgen_struct_value_ * value
Definition: ri.h:455
#define value_constant(x)
Definition: ri.h:3073
#define basic_int_p(x)
Definition: ri.h:614
#define call_function(x)
Definition: ri.h:709
#define QUALIFIER(x)
QUALIFIER.
Definition: ri.h:2106
#define reference_variable(x)
Definition: ri.h:2326
#define SIZEOFEXPRESSION(x)
SIZEOFEXPRESSION.
Definition: ri.h:2364
#define basic_int(x)
Definition: ri.h:616
#define ENTITY(x)
ENTITY.
Definition: ri.h:2755
#define type_functional(x)
Definition: ri.h:2952
#define value_unknown_p(x)
Definition: ri.h:3077
#define basic_tag(x)
Definition: ri.h:613
#define type_variable(x)
Definition: ri.h:2949
#define entity_storage(x)
Definition: ri.h:2794
@ is_value_code
Definition: ri.h:3031
#define value_constant_p(x)
Definition: ri.h:3071
#define EXPRESSION(x)
EXPRESSION.
Definition: ri.h:1217
#define type_undefined_p(x)
Definition: ri.h:2884
#define basic_undefined
Definition: ri.h:556
#define entity_undefined_p(x)
Definition: ri.h:2762
#define constant_int_p(x)
Definition: ri.h:848
#define expression_undefined
Definition: ri.h:1223
@ is_instruction_call
Definition: ri.h:1474
#define entity_name(x)
Definition: ri.h:2790
#define variable_undefined
Definition: ri.h:3095
#define PARAMETER(x)
PARAMETER.
Definition: ri.h:1788
#define statement_extensions(x)
Definition: ri.h:2464
#define syntax_call(x)
Definition: ri.h:2736
#define variable_qualifiers(x)
Definition: ri.h:3124
#define type_domain
newgen_transformer_domain_defined
Definition: ri.h:434
#define expression_undefined_p(x)
Definition: ri.h:1224
#define code_decls_text(x)
Definition: ri.h:786
#define statement_comments(x)
Definition: ri.h:2456
#define type_undefined
Definition: ri.h:2883
#define basic_complex(x)
Definition: ri.h:628
#define extensions_extension(x)
Definition: ri.h:1330
@ is_type_enum
Definition: ri.h:2907
@ is_type_variable
Definition: ri.h:2900
@ is_type_union
Definition: ri.h:2906
@ is_type_struct
Definition: ri.h:2905
#define sequence_undefined
Definition: ri.h:2338
#define entity_type(x)
Definition: ri.h:2792
#define statement_number(x)
Definition: ri.h:2452
#define expression_syntax(x)
Definition: ri.h:1247
#define entity_domain_number(x)
Definition: ri.h:2788
#define type_variable_p(x)
Definition: ri.h:2947
#define storage_undefined_p(x)
Definition: ri.h:2477
#define entity_domain
newgen_syntax_domain_defined
Definition: ri.h:410
#define variable_basic(x)
Definition: ri.h:3120
#define statement_undefined
Definition: ri.h:2419
#define basic_float_p(x)
Definition: ri.h:617
#define STATEMENT(x)
STATEMENT.
Definition: ri.h:2413
#define storage_undefined
Definition: ri.h:2476
#define entity_initial(x)
Definition: ri.h:2796
int fprintf()
test sc_min : ce test s'appelle par : programme fichier1.data fichier2.data ...
char * strdup()
#define ifdebug(n)
Definition: sg.c:47
#define uint_least8_t
Definition: stdint.in.h:229
#define int_least16_t
Definition: stdint.in.h:230
#define int_least8_t
7.18.1.2.
Definition: stdint.in.h:228
#define uint_least16_t
Definition: stdint.in.h:231
the stack head
Definition: stack.c:62
The structure used to build lists in NewGen.
Definition: newgen_list.h:41
Definition: statement.c:54
char * int2a(int)
util.c
Definition: util.c:42
bool stf(const string)
standardize_structure.c
Value type.
Definition: genread.h:115
expression expression
Definition: cyacc.h:185
statement statement
Definition: cyacc.h:186
string string
Definition: cyacc.h:187
cons * liste
Definition: cyacc.h:183
parameter parameter
Definition: cyacc.h:189
entity entity
Definition: cyacc.h:184
qualifier qualifier
Definition: cyacc.h:191
type type
Definition: cyacc.h:188
INFRINGES ON USER NAME SPACE.
Definition: genread_yacc.c:608
YYSTYPE yyvs_alloc
Definition: genread_yacc.c:610
yy_state_t yyss_alloc
Definition: genread_yacc.c:609
#define exp
Avoid some warnings from "gcc -Wshadow".
Definition: vasnprintf.c:207