home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cproto.zip / cproto46 / y_tab.c < prev    next >
C/C++ Source or Header  |  1998-01-20  |  49KB  |  1,553 lines

  1. #ifndef lint
  2. static char yysccsid[] = "@(#)yaccpar    1.9 (Berkeley) 02/21/93 (BSDI)";
  3. #endif
  4. #include <stdlib.h>
  5. #define YYBYACC 1
  6. #define YYMAJOR 1
  7. #define YYMINOR 9
  8. #define YYEMPTY (-1)
  9. #define YYLEX yylex()
  10. #define yyclearin (yychar=YYEMPTY)
  11. #define yyerrok (yyerrflag=0)
  12. #define YYRECOVERING (yyerrflag!=0)
  13. #define YYPREFIX "yy"
  14. #line 65 "grammar.y"
  15. #include <stdio.h>
  16. #include <ctype.h>
  17. #include "cproto.h"
  18. #include "symbol.h"
  19. #include "semantic.h"
  20.  
  21. #define YYMAXDEPTH 150
  22.  
  23. extern    int    yylex ARGS((void));
  24.  
  25. /* declaration specifier attributes for the typedef statement currently being
  26.  * scanned
  27.  */
  28. static int cur_decl_spec_flags;
  29.  
  30. /* pointer to parameter list for the current function definition */
  31. static ParameterList *func_params;
  32.  
  33. /* A parser semantic action sets this pointer to the current declarator in
  34.  * a function parameter declaration in order to catch any comments following
  35.  * the parameter declaration on the same line.  If the lexer scans a comment
  36.  * and <cur_declarator> is not NULL, then the comment is attached to the
  37.  * declarator.  To ignore subsequent comments, the lexer sets this to NULL
  38.  * after scanning a comment or end of line.
  39.  */
  40. static Declarator *cur_declarator;
  41.  
  42. /* temporary string buffer */
  43. static char buf[MAX_TEXT_SIZE];
  44.  
  45. /* table of typedef names */
  46. static SymbolTable *typedef_names;
  47.  
  48. /* table of define names */
  49. static SymbolTable *define_names;
  50.  
  51. /* table of type qualifiers */
  52. static SymbolTable *type_qualifiers;
  53.  
  54. /* information about the current input file */
  55. typedef struct {
  56.     char *base_name;        /* base input file name */
  57.     char *file_name;        /* current file name */
  58.     FILE *file;         /* input file */
  59.     unsigned line_num;        /* current line number in input file */
  60.     FILE *tmp_file;        /* temporary file */
  61.     long begin_comment;     /* tmp file offset after last written ) or ; */
  62.     long end_comment;        /* tmp file offset after last comment */
  63.     boolean convert;        /* if TRUE, convert function definitions */
  64.     boolean changed;        /* TRUE if conversion done in this file */
  65. } IncludeStack;
  66.  
  67. static IncludeStack *cur_file;    /* current input file */
  68.  
  69. #include "yyerror.c"
  70.  
  71. static int haveAnsiParam ARGS((void));
  72.  
  73.  
  74. /* Flags to enable us to find if a procedure returns a value.
  75.  */
  76. static int return_val,    /* nonzero on BRACES iff return-expression found */
  77.        returned_at;    /* marker for token-number to set 'return_val' */
  78.  
  79. #if OPT_LINTLIBRARY
  80. static char *dft_decl_spec ARGS((void));
  81.  
  82. static char *
  83. dft_decl_spec ()
  84. {
  85.     return (lintLibrary() && !return_val) ? "void" : "int";
  86. }
  87.  
  88. #else
  89. #define dft_decl_spec() "int"
  90. #endif
  91.  
  92. static int
  93. haveAnsiParam ()
  94. {
  95.     Parameter *p;
  96.     if (func_params != 0) {
  97.     for (p = func_params->first; p != 0; p = p->next) {
  98.         if (p->declarator->func_def == FUNC_ANSI) {
  99.         return TRUE;
  100.         }
  101.     }
  102.     }
  103.     return FALSE;
  104. }
  105. #line 106 "y.tab.c"
  106. #define T_IDENTIFIER 257
  107. #define T_TYPEDEF_NAME 258
  108. #define T_DEFINE_NAME 259
  109. #define T_AUTO 260
  110. #define T_EXTERN 261
  111. #define T_REGISTER 262
  112. #define T_STATIC 263
  113. #define T_TYPEDEF 264
  114. #define T_INLINE 265
  115. #define T_CHAR 266
  116. #define T_DOUBLE 267
  117. #define T_FLOAT 268
  118. #define T_INT 269
  119. #define T_VOID 270
  120. #define T_LONG 271
  121. #define T_SHORT 272
  122. #define T_SIGNED 273
  123. #define T_UNSIGNED 274
  124. #define T_ENUM 275
  125. #define T_STRUCT 276
  126. #define T_UNION 277
  127. #define T_TYPE_QUALIFIER 278
  128. #define T_BRACKETS 279
  129. #define T_LBRACE 280
  130. #define T_MATCHRBRACE 281
  131. #define T_ELLIPSIS 282
  132. #define T_INITIALIZER 283
  133. #define T_STRING_LITERAL 284
  134. #define T_ASM 285
  135. #define T_ASMARG 286
  136. #define T_VA_DCL 287
  137. #define YYERRCODE 256
  138. short yylhs[] = {                                        -1,
  139.     0,    0,   26,   26,   27,   27,   27,   27,   27,   27,
  140.    27,   31,   30,   30,   28,   28,   34,   28,   32,   33,
  141.    33,   35,   35,   37,   38,   29,   39,   29,   36,   36,
  142.    36,   40,   40,    1,    1,    2,    2,    2,    3,    3,
  143.     3,    3,    3,    4,    4,    4,    4,    4,    4,    4,
  144.     4,    4,    4,    4,    4,    5,    5,    6,    6,    6,
  145.    19,   19,    8,    8,    9,   41,    9,    7,    7,    7,
  146.    25,   23,   23,   10,   10,   11,   11,   11,   11,   11,
  147.    20,   20,   21,   21,   22,   22,   14,   14,   15,   15,
  148.    16,   16,   16,   17,   17,   18,   18,   24,   24,   12,
  149.    12,   12,   13,   13,   13,   13,   13,   13,   13,
  150. };
  151. short yylen[] = {                                         2,
  152.     0,    1,    1,    2,    1,    1,    1,    1,    3,    2,
  153.     2,    2,    3,    3,    2,    3,    0,    5,    1,    0,
  154.     1,    1,    3,    0,    0,    7,    0,    5,    0,    1,
  155.     1,    1,    2,    1,    2,    1,    1,    1,    1,    1,
  156.     1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
  157.     1,    1,    1,    1,    1,    1,    1,    3,    2,    2,
  158.     1,    1,    1,    3,    1,    0,    4,    3,    2,    2,
  159.     1,    1,    1,    2,    1,    1,    3,    2,    4,    4,
  160.     2,    3,    0,    1,    1,    2,    1,    3,    1,    3,
  161.     2,    2,    1,    0,    1,    1,    3,    1,    2,    1,
  162.     2,    1,    3,    2,    1,    4,    3,    3,    2,
  163. };
  164. short yydefred[] = {                                      0,
  165.     0,    0,    0,    0,   98,   53,   57,   39,    0,   41,
  166.    42,   19,   43,   44,   45,   46,   47,   52,   48,   49,
  167.    50,   51,   71,   61,   62,   56,    0,    7,    0,    0,
  168.    34,   36,   37,   38,   54,   55,   27,    0,    0,    0,
  169.    76,    0,    0,    3,    5,    6,    8,    0,   10,   11,
  170.     0,   85,    0,    0,   99,    0,    0,   40,   15,   35,
  171.     0,   63,    0,    0,    0,   78,   72,   73,    0,    0,
  172.    59,    0,    0,   69,    4,    0,   77,   82,   86,    0,
  173.    14,   13,    9,   16,    0,   66,    0,   30,   32,    0,
  174.     0,   96,    0,    0,    0,   89,    0,    0,   12,   58,
  175.    68,    0,    0,   64,    0,    0,    0,   33,    0,  105,
  176.    91,   92,    0,    0,   79,    0,   80,    0,   22,    0,
  177.     0,   67,   25,   28,  109,    0,    0,    0,  104,    0,
  178.    88,   90,   97,   18,    0,    0,  103,  108,  107,    0,
  179.    23,   26,  106,
  180. };
  181. short yydgoto[] = {                                      29,
  182.    80,   31,   32,   33,   34,   35,   36,   61,   62,   37,
  183.    38,  112,  113,   94,   95,   96,   97,   98,   39,   40,
  184.    53,   54,   70,   41,   42,   43,   44,   45,   46,   47,
  185.    71,   48,  120,  102,  121,   90,   87,  136,   64,   91,
  186.   105,
  187. };
  188. short yysindex[] = {                                    -38,
  189.   -36,   17, -248, -241,    0,    0,    0,    0, -264,    0,
  190.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  191.     0,    0,    0,    0,    0,    0, -261,    0,    0,  395,
  192.     0,    0,    0,    0,    0,    0,    0,  -37, -245,  -11,
  193.     0, -245,  -38,    0,    0,    0,    0,  438,    0,    0,
  194.   -15,    0,   -5, -248,    0,  327,  -27,    0,    0,    0,
  195.   -16,    0,  -22,  279,  351,    0,    0,    0, -239, -234,
  196.     0,  -37, -234,    0,    0,  438,    0,    0,    0,  395,
  197.     0,    0,    0,    0,   17,    0,  279,    0,    0, -232,
  198.   372,    0,  150,   24,   27,    0,   33,   32,    0,    0,
  199.     0,   17,  -22,    0, -206, -202, -199,    0,  127,    0,
  200.     0,    0,  -35,  203,    0,  302,    0, -174,    0,   28,
  201.    44,    0,    0,    0,    0,   48,   49,  258,    0,  -35,
  202.     0,    0,    0,    0,   17, -189,    0,    0,    0,   52,
  203.     0,    0,    0,
  204. };
  205. short yyrindex[] = {                                     95,
  206.     0,    0,  157,    0,    0,    0,    0,    0,  417,    0,
  207.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  208.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  209.     0,    0,    0,    0,    0,    0,    0,  -10,    0,    0,
  210.     0,    0,   96,    0,    0,    0,    0,    0,    0,    0,
  211.     0,    0,  231,  173,    0,    0,    0,    0,    0,    0,
  212.     0,    0,   50, -183,   57,    0,    0,    0,    0,   81,
  213.     0,   20,  104,    0,    0,   16,    0,    0,    0,    0,
  214.     0,    0,    0,    0,    0,    0, -183,    0,    0,    0,
  215.  -180,    0,  -26,    0,   60,    0,    0,   61,    0,    0,
  216.     0,   45,    1,    0,    0,    0,    0,    0,    0,    0,
  217.     0,    0,    9,   25,    0,    0,    0,    0,    0,    0,
  218.    46,    0,    0,    0,    0,    0,    0,    0,    0,   29,
  219.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  220.     0,    0,    0,
  221. };
  222. short yygindex[] = {                                      0,
  223.    19,   -8,    0,    0,   -2,    0,    0,    0,   18,    6,
  224.   -34,   -3,   -7,  -95,    0,   -6,    0,    0,    0,  -46,
  225.     0,    0,   69,    0,    0,    0,   70,  -47,    0,    0,
  226.   -32,    0,    0,    0,    0,   30,    0,    0,    0,    0,
  227.     0,
  228. };
  229. #define YYTABLESIZE 716
  230. short yytable[] = {                                       4,
  231.    52,    2,   65,    3,  128,   72,   78,   51,   81,   74,
  232.     7,   67,   68,  127,   93,   55,   89,   93,   30,   56,
  233.    28,   60,   50,   82,   57,   77,    4,   85,    2,   26,
  234.    75,   83,  140,   75,   69,   63,    3,  100,   86,   89,
  235.   101,   99,   84,  108,   65,   69,  114,  107,   75,  102,
  236.    75,   79,  102,   17,    4,   17,    2,   17,    3,   65,
  237.    74,   30,  114,   74,  115,  100,   76,   60,  100,  101,
  238.   116,   60,  101,  117,   17,  118,  122,  123,   74,   72,
  239.    74,  124,  133,   93,   60,  103,  134,  135,  137,  138,
  240.   103,  142,  143,   65,    1,    2,   29,   94,  111,   31,
  241.    87,   95,  104,   20,   21,  126,  130,  119,   65,  132,
  242.    73,    0,   75,    0,   51,    0,  106,    0,   60,    0,
  243.    60,   60,   60,    0,   60,    0,    0,   93,    0,    0,
  244.     0,    0,    0,    0,   93,    0,    0,    0,    0,   60,
  245.   141,   70,    0,   70,   70,   70,   93,   70,    0,    0,
  246.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  247.     0,    0,   70,    0,    4,    0,  109,  125,    3,    0,
  248.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  249.     0,    0,    0,    0,    0,    0,    0,    4,    0,  109,
  250.     0,    3,    0,    0,   83,    0,   83,   83,   83,    0,
  251.    83,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  252.    84,    0,   84,   84,   84,    0,   84,    1,    5,    6,
  253.     7,    8,    9,   10,   11,   12,   13,   14,   15,   16,
  254.    17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
  255.     4,   66,  109,  129,   49,    5,   27,   75,   75,   75,
  256.    75,   75,   75,   75,   75,   75,   75,   75,   75,   75,
  257.    75,   75,   75,   75,   75,   75,   75,   75,   81,   75,
  258.    81,   81,   17,    5,   81,    0,   75,   74,   74,   74,
  259.    74,   74,   74,   74,   74,   74,   74,   74,   74,   74,
  260.    74,   74,   74,   74,   74,   74,   74,   74,  139,   74,
  261.     0,    0,    0,    0,    0,    0,   74,   24,   24,   24,
  262.    24,   24,   24,   24,   24,   24,   24,   24,   24,   24,
  263.    24,   24,   24,   24,   24,   24,   24,   24,    0,   24,
  264.     0,    0,    0,    0,    0,    0,   24,   60,   60,   60,
  265.    60,   60,   60,   60,    0,   60,   60,   60,   60,   60,
  266.    60,   60,   60,   60,   60,   60,   60,   60,   60,   60,
  267.    70,   70,   70,   70,   70,   70,   70,    0,   70,   70,
  268.    70,   70,   70,   70,   70,   70,   70,   70,   70,   70,
  269.    70,   70,   70,    5,    6,    7,    8,   58,   10,   11,
  270.     0,   13,   14,   15,   16,   17,   18,   19,   20,   21,
  271.    22,   23,   24,   25,   26,  110,    5,    6,    7,    8,
  272.    58,   10,   11,   83,   13,   14,   15,   16,   17,   18,
  273.    19,   20,   21,   22,   23,   24,   25,   26,  110,   84,
  274.     0,    0,    4,    0,    2,   83,    3,    0,    0,    0,
  275.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  276.     0,   84,    0,   59,   40,    0,   40,    0,   40,    5,
  277.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  278.     0,    0,    0,    0,    0,   40,    0,    0,    0,    0,
  279.     0,  110,    0,    0,    0,    0,    0,   81,    0,    0,
  280.     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
  281.     0,    0,    0,    0,    0,    0,    0,    0,    0,   81,
  282.     0,    0,    0,    0,    0,    6,    7,    8,   58,   10,
  283.    11,    0,   13,   14,   15,   16,   17,   18,   19,   20,
  284.    21,   22,   23,   24,   25,   26,    6,    7,    8,   58,
  285.    10,   11,   12,   13,   14,   15,   16,   17,   18,   19,
  286.    20,   21,   22,   23,   24,   25,   26,    0,    0,    6,
  287.     7,    8,   58,   10,   11,   88,   13,   14,   15,   16,
  288.    17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
  289.     0,    0,    0,  131,    6,    7,    8,   58,   10,   11,
  290.    12,   13,   14,   15,   16,   17,   18,   19,   20,   21,
  291.    22,   23,   24,   25,   26,    0,   69,   92,    6,    7,
  292.     8,   58,   10,   11,    0,   13,   14,   15,   16,   17,
  293.    18,   19,   20,   21,   22,   23,   24,   25,   26,    6,
  294.     7,    8,   58,   10,   11,   12,   13,   14,   15,   16,
  295.    17,   18,   19,   20,   21,   22,   23,   24,   25,   26,
  296.     0,    5,    6,    7,    8,   58,   10,   11,    0,   13,
  297.    14,   15,   16,   17,   18,   19,   20,   21,   22,   23,
  298.    24,   25,   26,   40,   40,   40,   40,   40,   40,   40,
  299.     0,   40,   40,   40,   40,   40,   40,   40,   40,   40,
  300.    40,   40,   40,   40,   40,    6,    7,    8,   58,   10,
  301.    11,    0,   13,   14,   15,   16,   17,   18,   19,   20,
  302.    21,   22,   23,   24,   25,   26,
  303. };
  304. short yycheck[] = {                                      38,
  305.     3,   40,   40,   42,   40,   40,   53,    2,   56,   42,
  306.   259,  257,  258,  109,   41,  257,   64,   44,    0,  284,
  307.    59,   30,   59,   56,  286,   41,   38,   44,   40,  278,
  308.    41,   59,  128,   44,  280,   30,   42,   70,   61,   87,
  309.    73,  281,   59,   91,   44,  280,   93,  280,   59,   41,
  310.    61,   54,   44,   38,   38,   40,   40,   42,   42,   59,
  311.    41,   43,  109,   44,   41,   41,   48,   76,   44,   41,
  312.    44,   80,   44,   41,   59,   44,  283,  280,   59,  114,
  313.    61,  281,  257,   65,   93,   80,   59,   44,   41,   41,
  314.    85,  281,   41,   44,    0,    0,  280,   41,   93,  280,
  315.    41,   41,   85,   59,   59,  109,  114,  102,   59,  116,
  316.    42,   -1,   43,   -1,  109,   -1,   87,   -1,   38,   -1,
  317.    40,   41,   42,   -1,   44,   -1,   -1,  109,   -1,   -1,
  318.    -1,   -1,   -1,   -1,  116,   -1,   -1,   -1,   -1,   59,
  319.   135,   38,   -1,   40,   41,   42,  128,   44,   -1,   -1,
  320.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  321.    -1,   -1,   59,   -1,   38,   -1,   40,   41,   42,   -1,
  322.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  323.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   38,   -1,   40,
  324.    -1,   42,   -1,   -1,   38,   -1,   40,   41,   42,   -1,
  325.    44,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  326.    38,   -1,   40,   41,   42,   -1,   44,  256,  257,  258,
  327.   259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
  328.   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
  329.    38,  279,   40,  279,  281,  257,  285,  258,  259,  260,
  330.   261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  331.   271,  272,  273,  274,  275,  276,  277,  278,   38,  280,
  332.    40,   41,  257,  257,   44,   -1,  287,  258,  259,  260,
  333.   261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  334.   271,  272,  273,  274,  275,  276,  277,  278,   41,  280,
  335.    -1,   -1,   -1,   -1,   -1,   -1,  287,  258,  259,  260,
  336.   261,  262,  263,  264,  265,  266,  267,  268,  269,  270,
  337.   271,  272,  273,  274,  275,  276,  277,  278,   -1,  280,
  338.    -1,   -1,   -1,   -1,   -1,   -1,  287,  257,  258,  259,
  339.   260,  261,  262,  263,   -1,  265,  266,  267,  268,  269,
  340.   270,  271,  272,  273,  274,  275,  276,  277,  278,  279,
  341.   257,  258,  259,  260,  261,  262,  263,   -1,  265,  266,
  342.   267,  268,  269,  270,  271,  272,  273,  274,  275,  276,
  343.   277,  278,  279,  257,  258,  259,  260,  261,  262,  263,
  344.    -1,  265,  266,  267,  268,  269,  270,  271,  272,  273,
  345.   274,  275,  276,  277,  278,  279,  257,  258,  259,  260,
  346.   261,  262,  263,  257,  265,  266,  267,  268,  269,  270,
  347.   271,  272,  273,  274,  275,  276,  277,  278,  279,  257,
  348.    -1,   -1,   38,   -1,   40,  279,   42,   -1,   -1,   -1,
  349.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  350.    -1,  279,   -1,   59,   38,   -1,   40,   -1,   42,  257,
  351.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  352.    -1,   -1,   -1,   -1,   -1,   59,   -1,   -1,   -1,   -1,
  353.    -1,  279,   -1,   -1,   -1,   -1,   -1,  257,   -1,   -1,
  354.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
  355.    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  279,
  356.    -1,   -1,   -1,   -1,   -1,  258,  259,  260,  261,  262,
  357.   263,   -1,  265,  266,  267,  268,  269,  270,  271,  272,
  358.   273,  274,  275,  276,  277,  278,  258,  259,  260,  261,
  359.   262,  263,  264,  265,  266,  267,  268,  269,  270,  271,
  360.   272,  273,  274,  275,  276,  277,  278,   -1,   -1,  258,
  361.   259,  260,  261,  262,  263,  287,  265,  266,  267,  268,
  362.   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
  363.    -1,   -1,   -1,  282,  258,  259,  260,  261,  262,  263,
  364.   264,  265,  266,  267,  268,  269,  270,  271,  272,  273,
  365.   274,  275,  276,  277,  278,   -1,  280,  257,  258,  259,
  366.   260,  261,  262,  263,   -1,  265,  266,  267,  268,  269,
  367.   270,  271,  272,  273,  274,  275,  276,  277,  278,  258,
  368.   259,  260,  261,  262,  263,  264,  265,  266,  267,  268,
  369.   269,  270,  271,  272,  273,  274,  275,  276,  277,  278,
  370.    -1,  257,  258,  259,  260,  261,  262,  263,   -1,  265,
  371.   266,  267,  268,  269,  270,  271,  272,  273,  274,  275,
  372.   276,  277,  278,  257,  258,  259,  260,  261,  262,  263,
  373.    -1,  265,  266,  267,  268,  269,  270,  271,  272,  273,
  374.   274,  275,  276,  277,  278,  258,  259,  260,  261,  262,
  375.   263,   -1,  265,  266,  267,  268,  269,  270,  271,  272,
  376.   273,  274,  275,  276,  277,  278,
  377. };
  378. #define YYFINAL 29
  379. #ifndef YYDEBUG
  380. #define YYDEBUG 0
  381. #endif
  382. #define YYMAXTOKEN 287
  383. #if YYDEBUG
  384. char *yyname[] = {
  385. "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  386. 0,0,0,0,"'&'",0,"'('","')'","'*'",0,"','",0,0,0,0,0,0,0,0,0,0,0,0,0,0,"';'",0,
  387. "'='",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  388. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  389. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  390. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  391. 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  392. "T_IDENTIFIER","T_TYPEDEF_NAME","T_DEFINE_NAME","T_AUTO","T_EXTERN",
  393. "T_REGISTER","T_STATIC","T_TYPEDEF","T_INLINE","T_CHAR","T_DOUBLE","T_FLOAT",
  394. "T_INT","T_VOID","T_LONG","T_SHORT","T_SIGNED","T_UNSIGNED","T_ENUM","T_STRUCT",
  395. "T_UNION","T_TYPE_QUALIFIER","T_BRACKETS","T_LBRACE","T_MATCHRBRACE",
  396. "T_ELLIPSIS","T_INITIALIZER","T_STRING_LITERAL","T_ASM","T_ASMARG","T_VA_DCL",
  397. };
  398. char *yyrule[] = {
  399. "$accept : program",
  400. "program :",
  401. "program : translation_unit",
  402. "translation_unit : external_declaration",
  403. "translation_unit : translation_unit external_declaration",
  404. "external_declaration : declaration",
  405. "external_declaration : function_definition",
  406. "external_declaration : ';'",
  407. "external_declaration : linkage_specification",
  408. "external_declaration : T_ASM T_ASMARG ';'",
  409. "external_declaration : error T_MATCHRBRACE",
  410. "external_declaration : error ';'",
  411. "braces : T_LBRACE T_MATCHRBRACE",
  412. "linkage_specification : T_EXTERN T_STRING_LITERAL braces",
  413. "linkage_specification : T_EXTERN T_STRING_LITERAL declaration",
  414. "declaration : decl_specifiers ';'",
  415. "declaration : decl_specifiers init_declarator_list ';'",
  416. "$$1 :",
  417. "declaration : any_typedef decl_specifiers $$1 opt_declarator_list ';'",
  418. "any_typedef : T_TYPEDEF",
  419. "opt_declarator_list :",
  420. "opt_declarator_list : declarator_list",
  421. "declarator_list : declarator",
  422. "declarator_list : declarator_list ',' declarator",
  423. "$$2 :",
  424. "$$3 :",
  425. "function_definition : decl_specifiers declarator $$2 opt_declaration_list T_LBRACE $$3 T_MATCHRBRACE",
  426. "$$4 :",
  427. "function_definition : declarator $$4 opt_declaration_list T_LBRACE T_MATCHRBRACE",
  428. "opt_declaration_list :",
  429. "opt_declaration_list : T_VA_DCL",
  430. "opt_declaration_list : declaration_list",
  431. "declaration_list : declaration",
  432. "declaration_list : declaration_list declaration",
  433. "decl_specifiers : decl_specifier",
  434. "decl_specifiers : decl_specifiers decl_specifier",
  435. "decl_specifier : storage_class",
  436. "decl_specifier : type_specifier",
  437. "decl_specifier : type_qualifier",
  438. "storage_class : T_AUTO",
  439. "storage_class : T_EXTERN",
  440. "storage_class : T_REGISTER",
  441. "storage_class : T_STATIC",
  442. "storage_class : T_INLINE",
  443. "type_specifier : T_CHAR",
  444. "type_specifier : T_DOUBLE",
  445. "type_specifier : T_FLOAT",
  446. "type_specifier : T_INT",
  447. "type_specifier : T_LONG",
  448. "type_specifier : T_SHORT",
  449. "type_specifier : T_SIGNED",
  450. "type_specifier : T_UNSIGNED",
  451. "type_specifier : T_VOID",
  452. "type_specifier : T_TYPEDEF_NAME",
  453. "type_specifier : struct_or_union_specifier",
  454. "type_specifier : enum_specifier",
  455. "type_qualifier : T_TYPE_QUALIFIER",
  456. "type_qualifier : T_DEFINE_NAME",
  457. "struct_or_union_specifier : struct_or_union any_id braces",
  458. "struct_or_union_specifier : struct_or_union braces",
  459. "struct_or_union_specifier : struct_or_union any_id",
  460. "struct_or_union : T_STRUCT",
  461. "struct_or_union : T_UNION",
  462. "init_declarator_list : init_declarator",
  463. "init_declarator_list : init_declarator_list ',' init_declarator",
  464. "init_declarator : declarator",
  465. "$$5 :",
  466. "init_declarator : declarator '=' $$5 T_INITIALIZER",
  467. "enum_specifier : enumeration any_id braces",
  468. "enum_specifier : enumeration braces",
  469. "enum_specifier : enumeration any_id",
  470. "enumeration : T_ENUM",
  471. "any_id : T_IDENTIFIER",
  472. "any_id : T_TYPEDEF_NAME",
  473. "declarator : pointer direct_declarator",
  474. "declarator : direct_declarator",
  475. "direct_declarator : identifier_or_ref",
  476. "direct_declarator : '(' declarator ')'",
  477. "direct_declarator : direct_declarator T_BRACKETS",
  478. "direct_declarator : direct_declarator '(' parameter_type_list ')'",
  479. "direct_declarator : direct_declarator '(' opt_identifier_list ')'",
  480. "pointer : '*' opt_type_qualifiers",
  481. "pointer : '*' opt_type_qualifiers pointer",
  482. "opt_type_qualifiers :",
  483. "opt_type_qualifiers : type_qualifier_list",
  484. "type_qualifier_list : type_qualifier",
  485. "type_qualifier_list : type_qualifier_list type_qualifier",
  486. "parameter_type_list : parameter_list",
  487. "parameter_type_list : parameter_list ',' T_ELLIPSIS",
  488. "parameter_list : parameter_declaration",
  489. "parameter_list : parameter_list ',' parameter_declaration",
  490. "parameter_declaration : decl_specifiers declarator",
  491. "parameter_declaration : decl_specifiers abs_declarator",
  492. "parameter_declaration : decl_specifiers",
  493. "opt_identifier_list :",
  494. "opt_identifier_list : identifier_list",
  495. "identifier_list : T_IDENTIFIER",
  496. "identifier_list : identifier_list ',' T_IDENTIFIER",
  497. "identifier_or_ref : T_IDENTIFIER",
  498. "identifier_or_ref : '&' T_IDENTIFIER",
  499. "abs_declarator : pointer",
  500. "abs_declarator : pointer direct_abs_declarator",
  501. "abs_declarator : direct_abs_declarator",
  502. "direct_abs_declarator : '(' abs_declarator ')'",
  503. "direct_abs_declarator : direct_abs_declarator T_BRACKETS",
  504. "direct_abs_declarator : T_BRACKETS",
  505. "direct_abs_declarator : direct_abs_declarator '(' parameter_type_list ')'",
  506. "direct_abs_declarator : direct_abs_declarator '(' ')'",
  507. "direct_abs_declarator : '(' parameter_type_list ')'",
  508. "direct_abs_declarator : '(' ')'",
  509. };
  510. #endif
  511. #ifdef YYSTACKSIZE
  512. #undef YYMAXDEPTH
  513. #define YYMAXDEPTH YYSTACKSIZE
  514. #else
  515. #ifdef YYMAXDEPTH
  516. #define YYSTACKSIZE YYMAXDEPTH
  517. #else
  518. #define YYSTACKSIZE 10000
  519. #define YYMAXDEPTH 10000
  520. #endif
  521. #endif
  522. #define YYINITSTACKSIZE 200
  523. int yydebug;
  524. int yynerrs;
  525. struct yystack {
  526.     short *ssp;
  527.     YYSTYPE *vsp;
  528.     short *ss;
  529.     YYSTYPE *vs;
  530.     int stacksize;
  531.     short *sslim;
  532. };
  533. int yychar; /* some people use this, so we copy it in & out */
  534. int yyerrflag; /* must be global for yyerrok & YYRECOVERING */
  535. YYSTYPE yylval;
  536. #line 792 "grammar.y"
  537.  
  538. #if defined(__EMX__) || defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(vms)
  539. # ifdef USE_flex
  540. #  include "lexyy.c"
  541. # else
  542. #  include "lex_yy.c"
  543. # endif
  544. #else
  545. # include "lex.yy.c"
  546. #endif
  547.  
  548. static void
  549. yaccError (msg)
  550. char *msg;
  551. {
  552.     func_params = NULL;
  553.     put_error();        /* tell what line we're on, and what file */
  554.     fprintf(stderr, "%s at token '%s'\n", msg, yytext);
  555. }
  556.  
  557. /* Initialize the table of type qualifier keywords recognized by the lexical
  558.  * analyzer.
  559.  */
  560. void
  561. init_parser ()
  562. {
  563.     static char *keywords[] = {
  564.     "const", "volatile", "interrupt",
  565. #ifdef vms
  566.     "noshare", "readonly",
  567. #endif
  568. #if defined(MSDOS) || defined(OS2)
  569.     "cdecl", "far", "huge", "near", "pascal",
  570.     "_cdecl", "_export", "_far", "_fastcall", "_fortran", "_huge",
  571.     "_interrupt", "_loadds", "_near", "_pascal", "_saveregs", "_segment",
  572.     "_cs", "_ds", "_es", "_ss", "_seg",
  573.     "__cdecl", "__export", "__far", "__fastcall", "__fortran", "__huge",
  574.     "__inline", "__interrupt", "__loadds", "__near", "__pascal",
  575.     "__saveregs", "__segment", "__stdcall", "__syscall",
  576. #ifdef OS2
  577.     "__far16",
  578. #endif
  579. #else
  580.     "__const__",    "__const",
  581.     "__volatile__", "__volatile",
  582.     "__inline__",   "__inline",
  583. #endif
  584.     };
  585.     int i;
  586.  
  587.     /* Initialize type qualifier table. */
  588.     type_qualifiers = new_symbol_table();
  589.     for (i = 0; i < sizeof(keywords)/sizeof(keywords[0]); ++i) {
  590.     new_symbol(type_qualifiers, keywords[i], NULL, DS_NONE);
  591.     }
  592. }
  593.  
  594. /* Process the C source file.  Write function prototypes to the standard
  595.  * output.  Convert function definitions and write the converted source
  596.  * code to a temporary file.
  597.  */
  598. void
  599. process_file (infile, name)
  600. FILE *infile;
  601. char *name;
  602. {
  603.     char *s;
  604.  
  605.     if (strlen(name) > 2) {
  606.     s = name + strlen(name) - 2;
  607.     if (*s == '.') {
  608.         ++s;
  609.         if (*s == 'l' || *s == 'y')
  610.         BEGIN LEXYACC;
  611. #if defined(MSDOS) || defined(OS2)
  612.         if (*s == 'L' || *s == 'Y')
  613.         BEGIN LEXYACC;
  614. #endif
  615.     }
  616.     }
  617.  
  618.     included_files = new_symbol_table();
  619.     typedef_names = new_symbol_table();
  620.     define_names = new_symbol_table();
  621.     inc_depth = -1;
  622.     curly = 0;
  623.     ly_count = 0;
  624.     func_params = NULL;
  625.     yyin = infile;
  626.     include_file(strcpy(base_file, name), func_style != FUNC_NONE);
  627.     if (file_comments) {
  628. #if OPT_LINTLIBRARY
  629.         if (lintLibrary()) {
  630.         put_blankline(stdout);
  631.         begin_tracking();
  632.     }
  633. #endif
  634.     put_string(stdout, "/* ");
  635.     put_string(stdout, cur_file_name());
  636.     put_string(stdout, " */\n");
  637.     }
  638.     yyparse();
  639.     free_symbol_table(define_names);
  640.     free_symbol_table(typedef_names);
  641.     free_symbol_table(included_files);
  642. }
  643.  
  644. #ifdef NO_LEAKS
  645. void
  646. free_parser()
  647. {
  648.     free_symbol_table (type_qualifiers);
  649. #ifdef FLEX_SCANNER
  650.     if (yy_current_buffer != 0)
  651.     yy_delete_buffer(yy_current_buffer);
  652. #endif
  653. }
  654. #endif
  655. #line 656 "y.tab.c"
  656. /* allocate initial stack */
  657. #if defined(__STDC__) || defined(__cplusplus)
  658. static int yyinitstack(struct yystack *sp)
  659. #else
  660. static int yyinitstack(sp)
  661.     struct yystack *sp;
  662. #endif
  663. {
  664.     int newsize;
  665.     short *newss;
  666.     YYSTYPE *newvs;
  667.  
  668.     newsize = YYINITSTACKSIZE;
  669.     newss = (short *)malloc(newsize * sizeof *newss);
  670.     newvs = (YYSTYPE *)malloc(newsize * sizeof *newvs);
  671.     sp->ss = sp->ssp = newss;
  672.     sp->vs = sp->vsp = newvs;
  673.     if (newss == NULL || newvs == NULL) return -1;
  674.     sp->stacksize = newsize;
  675.     sp->sslim = newss + newsize - 1;
  676.     return 0;
  677. }
  678.  
  679. /* double stack size, up to YYMAXDEPTH */
  680. #if defined(__STDC__) || defined(__cplusplus)
  681. static int yygrowstack(struct yystack *sp)
  682. #else
  683. static int yygrowstack(sp)
  684.     struct yystack *sp;
  685. #endif
  686. {
  687.     int newsize, i;
  688.     short *newss;
  689.     YYSTYPE *newvs;
  690.  
  691.     if ((newsize = sp->stacksize) >= YYMAXDEPTH) return -1;
  692.     if ((newsize *= 2) > YYMAXDEPTH) newsize = YYMAXDEPTH;
  693.     i = sp->ssp - sp->ss;
  694.     if ((newss = (short *)realloc(sp->ss, newsize * sizeof *newss)) == NULL)
  695.         return -1;
  696.     sp->ss = newss;
  697.     sp->ssp = newss + i;
  698.     if ((newvs = (YYSTYPE *)realloc(sp->vs, newsize * sizeof *newvs)) == NULL)
  699.         return -1;
  700.     sp->vs = newvs;
  701.     sp->vsp = newvs + i;
  702.     sp->stacksize = newsize;
  703.     sp->sslim = newss + newsize - 1;
  704.     return 0;
  705. }
  706.  
  707. #define YYFREESTACK(sp) { free((sp)->ss); free((sp)->vs); }
  708.  
  709. #define YYABORT goto yyabort
  710. #define YYREJECT goto yyabort
  711. #define YYACCEPT goto yyaccept
  712. #define YYERROR goto yyerrlab
  713. int
  714. yyparse()
  715. {
  716.     register int yym, yyn, yystate, yych;
  717.     register YYSTYPE *yyvsp;
  718.     YYSTYPE yyval;
  719.     struct yystack yystk;
  720. #if YYDEBUG
  721.     register char *yys;
  722.     extern char *getenv();
  723.  
  724.     if (yys = getenv("YYDEBUG"))
  725.     {
  726.         yyn = *yys;
  727.         if (yyn >= '0' && yyn <= '9')
  728.             yydebug = yyn - '0';
  729.     }
  730. #endif
  731.  
  732.     yynerrs = 0;
  733.     yyerrflag = 0;
  734.     yychar = yych = YYEMPTY;
  735.  
  736.     if (yyinitstack(&yystk)) goto yyoverflow;
  737.     *yystk.ssp = yystate = 0;
  738.  
  739. yyloop:
  740.     if (yyn = yydefred[yystate]) goto yyreduce;
  741.     if (yych < 0)
  742.     {
  743.         if ((yych = YYLEX) < 0) yych = 0;
  744.         yychar = yych;
  745. #if YYDEBUG
  746.         if (yydebug)
  747.         {
  748.             yys = 0;
  749.             if (yych <= YYMAXTOKEN) yys = yyname[yych];
  750.             if (!yys) yys = "illegal-symbol";
  751.             printf("%sdebug: state %d, reading %d (%s)\n",
  752.                     YYPREFIX, yystate, yych, yys);
  753.         }
  754. #endif
  755.     }
  756.     if ((yyn = yysindex[yystate]) && (yyn += yych) >= 0 &&
  757.             yyn <= YYTABLESIZE && yycheck[yyn] == yych)
  758.     {
  759. #if YYDEBUG
  760.         if (yydebug)
  761.             printf("%sdebug: state %d, shifting to state %d\n",
  762.                     YYPREFIX, yystate, yytable[yyn]);
  763. #endif
  764.         if (yystk.ssp >= yystk.sslim && yygrowstack(&yystk))
  765.             goto yyoverflow;
  766.         *++yystk.ssp = yystate = yytable[yyn];
  767.         *++yystk.vsp = yylval;
  768.         yychar = yych = YYEMPTY;
  769.         if (yyerrflag > 0)  --yyerrflag;
  770.         goto yyloop;
  771.     }
  772.     if ((yyn = yyrindex[yystate]) && (yyn += yych) >= 0 &&
  773.             yyn <= YYTABLESIZE && yycheck[yyn] == yych)
  774.     {
  775.         yyn = yytable[yyn];
  776.         goto yyreduce;
  777.     }
  778.     if (yyerrflag) goto yyinrecovery;
  779. #ifdef lint
  780.     goto yynewerror;
  781. #endif
  782. yynewerror:
  783.     yyerror("syntax error");
  784. #ifdef lint
  785.     goto yyerrlab;
  786. #endif
  787. yyerrlab:
  788.     ++yynerrs;
  789. yyinrecovery:
  790.     if (yyerrflag < 3)
  791.     {
  792.         yyerrflag = 3;
  793.         for (;;)
  794.         {
  795.             if ((yyn = yysindex[*yystk.ssp]) &&
  796.                     (yyn += YYERRCODE) >= 0 &&
  797.                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
  798.             {
  799. #if YYDEBUG
  800.                 if (yydebug)
  801.                     printf("%sdebug: state %d, error recovery shifting\
  802.  to state %d\n", YYPREFIX, *yystk.ssp, yytable[yyn]);
  803. #endif
  804.                 if (yystk.ssp >= yystk.sslim && yygrowstack(&yystk))
  805.                     goto yyoverflow;
  806.                 *++yystk.ssp = yystate = yytable[yyn];
  807.                 *++yystk.vsp = yylval;
  808.                 goto yyloop;
  809.             }
  810.             else
  811.             {
  812. #if YYDEBUG
  813.                 if (yydebug)
  814.                     printf("%sdebug: error recovery discarding state %d\n",
  815.                             YYPREFIX, *yystk.ssp);
  816. #endif
  817.                 if (yystk.ssp <= yystk.ss) goto yyabort;
  818.                 --yystk.ssp;
  819.                 --yystk.vsp;
  820.             }
  821.         }
  822.     }
  823.     else
  824.     {
  825.         if (yych == 0) goto yyabort;
  826. #if YYDEBUG
  827.         if (yydebug)
  828.         {
  829.             yys = 0;
  830.             if (yych <= YYMAXTOKEN) yys = yyname[yych];
  831.             if (!yys) yys = "illegal-symbol";
  832.             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
  833.                     YYPREFIX, yystate, yych, yys);
  834.         }
  835. #endif
  836.         yychar = yych = YYEMPTY;
  837.         goto yyloop;
  838.     }
  839. yyreduce:
  840. #if YYDEBUG
  841.     if (yydebug)
  842.         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
  843.                 YYPREFIX, yystate, yyn, yyrule[yyn]);
  844. #endif
  845.     yym = yylen[yyn];
  846.     yyvsp = yystk.vsp; /* for speed in code under switch() */
  847.     yyval = yyvsp[1-yym];
  848.     switch (yyn)
  849.     {
  850. case 10:
  851. #line 175 "grammar.y"
  852. {
  853.         yyerrok;
  854.     }
  855. break;
  856. case 11:
  857. #line 179 "grammar.y"
  858. {
  859.         yyerrok;
  860.     }
  861. break;
  862. case 13:
  863. #line 190 "grammar.y"
  864. {
  865.         /* Provide an empty action here so bison will not complain about
  866.          * incompatible types in the default action it normally would
  867.          * have generated.
  868.          */
  869.     }
  870. break;
  871. case 14:
  872. #line 197 "grammar.y"
  873. {
  874.         /* empty */
  875.     }
  876. break;
  877. case 15:
  878. #line 204 "grammar.y"
  879. {
  880. #if OPT_LINTLIBRARY
  881.         if (types_out && want_typedef()) {
  882.         gen_declarations(&yyvsp[-1].decl_spec, (DeclaratorList *)0);
  883.         flush_varargs();
  884.         }
  885. #endif
  886.         free_decl_spec(&yyvsp[-1].decl_spec);
  887.         end_typedef();
  888.     }
  889. break;
  890. case 16:
  891. #line 215 "grammar.y"
  892. {
  893.         if (func_params != NULL) {
  894.         set_param_types(func_params, &yyvsp[-2].decl_spec, &yyvsp[-1].decl_list);
  895.         } else {
  896.         gen_declarations(&yyvsp[-2].decl_spec, &yyvsp[-1].decl_list);
  897. #if OPT_LINTLIBRARY
  898.         flush_varargs();
  899. #endif
  900.         free_decl_list(&yyvsp[-1].decl_list);
  901.         }
  902.         free_decl_spec(&yyvsp[-2].decl_spec);
  903.         end_typedef();
  904.     }
  905. break;
  906. case 17:
  907. #line 229 "grammar.y"
  908. {
  909.         cur_decl_spec_flags = yyvsp[0].decl_spec.flags;
  910.         free_decl_spec(&yyvsp[0].decl_spec);
  911.     }
  912. break;
  913. case 18:
  914. #line 234 "grammar.y"
  915. {
  916.         end_typedef();
  917.     }
  918. break;
  919. case 19:
  920. #line 241 "grammar.y"
  921. {
  922.         begin_typedef();
  923.     }
  924. break;
  925. case 22:
  926. #line 253 "grammar.y"
  927. {
  928.         int flags = cur_decl_spec_flags;
  929.  
  930.         /* If the typedef is a pointer type, then reset the short type
  931.          * flags so it does not get promoted.
  932.          */
  933.         if (strcmp(yyvsp[0].declarator->text, yyvsp[0].declarator->name) != 0)
  934.         flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
  935.         new_symbol(typedef_names, yyvsp[0].declarator->name, NULL, flags);
  936.         free_declarator(yyvsp[0].declarator);
  937.     }
  938. break;
  939. case 23:
  940. #line 265 "grammar.y"
  941. {
  942.         int flags = cur_decl_spec_flags;
  943.  
  944.         if (strcmp(yyvsp[0].declarator->text, yyvsp[0].declarator->name) != 0)
  945.         flags &= ~(DS_CHAR | DS_SHORT | DS_FLOAT);
  946.         new_symbol(typedef_names, yyvsp[0].declarator->name, NULL, flags);
  947.         free_declarator(yyvsp[0].declarator);
  948.     }
  949. break;
  950. case 24:
  951. #line 277 "grammar.y"
  952. {
  953.         check_untagged(&yyvsp[-1].decl_spec);
  954.         if (yyvsp[0].declarator->func_def == FUNC_NONE) {
  955.         yyerror("syntax error");
  956.         YYERROR;
  957.         }
  958.         func_params = &(yyvsp[0].declarator->head->params);
  959.         func_params->begin_comment = cur_file->begin_comment;
  960.         func_params->end_comment = cur_file->end_comment;
  961.     }
  962. break;
  963. case 25:
  964. #line 288 "grammar.y"
  965. {
  966.         /* If we're converting to K&R and we've got a nominally K&R
  967.          * function which has a parameter which is ANSI (i.e., a prototyped
  968.          * function pointer), then we must override the deciphered value of
  969.          * 'func_def' so that the parameter will be converted.
  970.          */
  971.         if (func_style == FUNC_TRADITIONAL
  972.          && haveAnsiParam()
  973.          && yyvsp[-3].declarator->head->func_def == func_style) {
  974.         yyvsp[-3].declarator->head->func_def = FUNC_BOTH;
  975.         }
  976.  
  977.         func_params = NULL;
  978.  
  979.         if (cur_file->convert)
  980.         gen_func_definition(&yyvsp[-4].decl_spec, yyvsp[-3].declarator);
  981.         gen_prototype(&yyvsp[-4].decl_spec, yyvsp[-3].declarator);
  982. #if OPT_LINTLIBRARY
  983.         flush_varargs();
  984. #endif
  985.         free_decl_spec(&yyvsp[-4].decl_spec);
  986.         free_declarator(yyvsp[-3].declarator);
  987.     }
  988. break;
  989. case 27:
  990. #line 313 "grammar.y"
  991. {
  992.         if (yyvsp[0].declarator->func_def == FUNC_NONE) {
  993.         yyerror("syntax error");
  994.         YYERROR;
  995.         }
  996.         func_params = &(yyvsp[0].declarator->head->params);
  997.         func_params->begin_comment = cur_file->begin_comment;
  998.         func_params->end_comment = cur_file->end_comment;
  999.     }
  1000. break;
  1001. case 28:
  1002. #line 323 "grammar.y"
  1003. {
  1004.         DeclSpec decl_spec;
  1005.  
  1006.         func_params = NULL;
  1007.  
  1008.         new_decl_spec(&decl_spec, dft_decl_spec(), yyvsp[-4].declarator->begin, DS_NONE);
  1009.         if (cur_file->convert)
  1010.         gen_func_definition(&decl_spec, yyvsp[-4].declarator);
  1011.         gen_prototype(&decl_spec, yyvsp[-4].declarator);
  1012. #if OPT_LINTLIBRARY
  1013.         flush_varargs();
  1014. #endif
  1015.         free_decl_spec(&decl_spec);
  1016.         free_declarator(yyvsp[-4].declarator);
  1017.     }
  1018. break;
  1019. case 35:
  1020. #line 354 "grammar.y"
  1021. {
  1022.         join_decl_specs(&yyval.decl_spec, &yyvsp[-1].decl_spec, &yyvsp[0].decl_spec);
  1023.         free(yyvsp[-1].decl_spec.text);
  1024.         free(yyvsp[0].decl_spec.text);
  1025.     }
  1026. break;
  1027. case 39:
  1028. #line 369 "grammar.y"
  1029. {
  1030.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1031.     }
  1032. break;
  1033. case 40:
  1034. #line 373 "grammar.y"
  1035. {
  1036.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_EXTERN);
  1037.     }
  1038. break;
  1039. case 41:
  1040. #line 377 "grammar.y"
  1041. {
  1042.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1043.     }
  1044. break;
  1045. case 42:
  1046. #line 381 "grammar.y"
  1047. {
  1048.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_STATIC);
  1049.     }
  1050. break;
  1051. case 43:
  1052. #line 385 "grammar.y"
  1053. {
  1054.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_JUNK);
  1055.     }
  1056. break;
  1057. case 44:
  1058. #line 392 "grammar.y"
  1059. {
  1060.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_CHAR);
  1061.     }
  1062. break;
  1063. case 45:
  1064. #line 396 "grammar.y"
  1065. {
  1066.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1067.     }
  1068. break;
  1069. case 46:
  1070. #line 400 "grammar.y"
  1071. {
  1072.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_FLOAT);
  1073.     }
  1074. break;
  1075. case 47:
  1076. #line 404 "grammar.y"
  1077. {
  1078.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1079.     }
  1080. break;
  1081. case 48:
  1082. #line 408 "grammar.y"
  1083. {
  1084.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1085.     }
  1086. break;
  1087. case 49:
  1088. #line 412 "grammar.y"
  1089. {
  1090.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_SHORT);
  1091.     }
  1092. break;
  1093. case 50:
  1094. #line 416 "grammar.y"
  1095. {
  1096.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1097.     }
  1098. break;
  1099. case 51:
  1100. #line 420 "grammar.y"
  1101. {
  1102.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1103.     }
  1104. break;
  1105. case 52:
  1106. #line 424 "grammar.y"
  1107. {
  1108.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1109.     }
  1110. break;
  1111. case 53:
  1112. #line 428 "grammar.y"
  1113. {
  1114.         Symbol *s;
  1115.         s = find_symbol(typedef_names, yyvsp[0].text.text);
  1116.         if (s != NULL)
  1117.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, s->flags);
  1118.     }
  1119. break;
  1120. case 56:
  1121. #line 440 "grammar.y"
  1122. {
  1123.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, DS_NONE);
  1124.     }
  1125. break;
  1126. case 57:
  1127. #line 444 "grammar.y"
  1128. {
  1129.         /* This rule allows the <pointer> nonterminal to scan #define
  1130.          * names as if they were type modifiers.
  1131.          */
  1132.         Symbol *s;
  1133.         s = find_symbol(define_names, yyvsp[0].text.text);
  1134.         if (s != NULL)
  1135.         new_decl_spec(&yyval.decl_spec, yyvsp[0].text.text, yyvsp[0].text.begin, s->flags);
  1136.     }
  1137. break;
  1138. case 58:
  1139. #line 457 "grammar.y"
  1140. {
  1141.         char *s;
  1142.         if ((s = implied_typedef()) == 0)
  1143.             (void)sprintf(s = buf, "%s %s", yyvsp[-2].text.text, yyvsp[-1].text.text);
  1144.         new_decl_spec(&yyval.decl_spec, s, yyvsp[-2].text.begin, DS_NONE);
  1145.     }
  1146. break;
  1147. case 59:
  1148. #line 464 "grammar.y"
  1149. {
  1150.         char *s;
  1151.         if ((s = implied_typedef()) == 0)
  1152.         (void)sprintf(s = buf, "%s {}", yyvsp[-1].text.text);
  1153.         new_decl_spec(&yyval.decl_spec, s, yyvsp[-1].text.begin, DS_NONE);
  1154.     }
  1155. break;
  1156. case 60:
  1157. #line 471 "grammar.y"
  1158. {
  1159.         (void)sprintf(buf, "%s %s", yyvsp[-1].text.text, yyvsp[0].text.text);
  1160.         new_decl_spec(&yyval.decl_spec, buf, yyvsp[-1].text.begin, DS_NONE);
  1161.     }
  1162. break;
  1163. case 61:
  1164. #line 479 "grammar.y"
  1165. {
  1166.         imply_typedef(yyval.text.text);
  1167.     }
  1168. break;
  1169. case 62:
  1170. #line 483 "grammar.y"
  1171. {
  1172.         imply_typedef(yyval.text.text);
  1173.     }
  1174. break;
  1175. case 63:
  1176. #line 490 "grammar.y"
  1177. {
  1178.         new_decl_list(&yyval.decl_list, yyvsp[0].declarator);
  1179.     }
  1180. break;
  1181. case 64:
  1182. #line 494 "grammar.y"
  1183. {
  1184.         add_decl_list(&yyval.decl_list, &yyvsp[-2].decl_list, yyvsp[0].declarator);
  1185.     }
  1186. break;
  1187. case 65:
  1188. #line 501 "grammar.y"
  1189. {
  1190.         if (yyvsp[0].declarator->func_def != FUNC_NONE && func_params == NULL &&
  1191.         func_style == FUNC_TRADITIONAL && cur_file->convert) {
  1192.         gen_func_declarator(yyvsp[0].declarator);
  1193.         fputs(cur_text(), cur_file->tmp_file);
  1194.         }
  1195.         cur_declarator = yyval.declarator;
  1196.     }
  1197. break;
  1198. case 66:
  1199. #line 510 "grammar.y"
  1200. {
  1201.         if (yyvsp[-1].declarator->func_def != FUNC_NONE && func_params == NULL &&
  1202.         func_style == FUNC_TRADITIONAL && cur_file->convert) {
  1203.         gen_func_declarator(yyvsp[-1].declarator);
  1204.         fputs(" =", cur_file->tmp_file);
  1205.         }
  1206.     }
  1207. break;
  1208. case 68:
  1209. #line 522 "grammar.y"
  1210. {
  1211.         char *s;
  1212.         if ((s = implied_typedef()) == 0)
  1213.         (void)sprintf(s = buf, "enum %s", yyvsp[-1].text.text);
  1214.         new_decl_spec(&yyval.decl_spec, s, yyvsp[-2].text.begin, DS_NONE);
  1215.     }
  1216. break;
  1217. case 69:
  1218. #line 529 "grammar.y"
  1219. {
  1220.         char *s;
  1221.         if ((s = implied_typedef()) == 0)
  1222.         (void)sprintf(s = buf, "%s {}", yyvsp[-1].text.text);
  1223.         new_decl_spec(&yyval.decl_spec, s, yyvsp[-1].text.begin, DS_NONE);
  1224.     }
  1225. break;
  1226. case 70:
  1227. #line 536 "grammar.y"
  1228. {
  1229.         (void)sprintf(buf, "enum %s", yyvsp[0].text.text);
  1230.         new_decl_spec(&yyval.decl_spec, buf, yyvsp[-1].text.begin, DS_NONE);
  1231.     }
  1232. break;
  1233. case 71:
  1234. #line 544 "grammar.y"
  1235. {
  1236.         imply_typedef("enum");
  1237.         yyval.text = yyvsp[0].text;
  1238.     }
  1239. break;
  1240. case 74:
  1241. #line 557 "grammar.y"
  1242. {
  1243.         yyval.declarator = yyvsp[0].declarator;
  1244.         (void)sprintf(buf, "%s%s", yyvsp[-1].text.text, yyval.declarator->text);
  1245.         free(yyval.declarator->text);
  1246.         yyval.declarator->text = xstrdup(buf);
  1247.         yyval.declarator->begin = yyvsp[-1].text.begin;
  1248.         yyval.declarator->pointer = TRUE;
  1249.     }
  1250. break;
  1251. case 76:
  1252. #line 570 "grammar.y"
  1253. {
  1254.         yyval.declarator = new_declarator(yyvsp[0].text.text, yyvsp[0].text.text, yyvsp[0].text.begin);
  1255.     }
  1256. break;
  1257. case 77:
  1258. #line 574 "grammar.y"
  1259. {
  1260.         yyval.declarator = yyvsp[-1].declarator;
  1261.         (void)sprintf(buf, "(%s)", yyval.declarator->text);
  1262.         free(yyval.declarator->text);
  1263.         yyval.declarator->text = xstrdup(buf);
  1264.         yyval.declarator->begin = yyvsp[-2].text.begin;
  1265.     }
  1266. break;
  1267. case 78:
  1268. #line 582 "grammar.y"
  1269. {
  1270.         yyval.declarator = yyvsp[-1].declarator;
  1271.         (void)sprintf(buf, "%s%s", yyval.declarator->text, yyvsp[0].text.text);
  1272.         free(yyval.declarator->text);
  1273.         yyval.declarator->text = xstrdup(buf);
  1274.     }
  1275. break;
  1276. case 79:
  1277. #line 589 "grammar.y"
  1278. {
  1279.         yyval.declarator = new_declarator("%s()", yyvsp[-3].declarator->name, yyvsp[-3].declarator->begin);
  1280.         yyval.declarator->params = yyvsp[-1].param_list;
  1281.         yyval.declarator->func_stack = yyvsp[-3].declarator;
  1282.         yyval.declarator->head = (yyvsp[-3].declarator->func_stack == NULL) ? yyval.declarator : yyvsp[-3].declarator->head;
  1283.         yyval.declarator->func_def = FUNC_ANSI;
  1284.     }
  1285. break;
  1286. case 80:
  1287. #line 597 "grammar.y"
  1288. {
  1289.         yyval.declarator = new_declarator("%s()", yyvsp[-3].declarator->name, yyvsp[-3].declarator->begin);
  1290.         yyval.declarator->params = yyvsp[-1].param_list;
  1291.         yyval.declarator->func_stack = yyvsp[-3].declarator;
  1292.         yyval.declarator->head = (yyvsp[-3].declarator->func_stack == NULL) ? yyval.declarator : yyvsp[-3].declarator->head;
  1293.         yyval.declarator->func_def = FUNC_TRADITIONAL;
  1294.     }
  1295. break;
  1296. case 81:
  1297. #line 608 "grammar.y"
  1298. {
  1299.         (void)sprintf(yyval.text.text, "*%s", yyvsp[0].text.text);
  1300.         yyval.text.begin = yyvsp[-1].text.begin;
  1301.     }
  1302. break;
  1303. case 82:
  1304. #line 613 "grammar.y"
  1305. {
  1306.         (void)sprintf(yyval.text.text, "*%s%s", yyvsp[-1].text.text, yyvsp[0].text.text);
  1307.         yyval.text.begin = yyvsp[-2].text.begin;
  1308.     }
  1309. break;
  1310. case 83:
  1311. #line 621 "grammar.y"
  1312. {
  1313.         strcpy(yyval.text.text, "");
  1314.         yyval.text.begin = 0L;
  1315.     }
  1316. break;
  1317. case 85:
  1318. #line 630 "grammar.y"
  1319. {
  1320.         (void)sprintf(yyval.text.text, "%s ", yyvsp[0].decl_spec.text);
  1321.         yyval.text.begin = yyvsp[0].decl_spec.begin;
  1322.         free(yyvsp[0].decl_spec.text);
  1323.     }
  1324. break;
  1325. case 86:
  1326. #line 636 "grammar.y"
  1327. {
  1328.         (void)sprintf(yyval.text.text, "%s%s ", yyvsp[-1].text.text, yyvsp[0].decl_spec.text);
  1329.         yyval.text.begin = yyvsp[-1].text.begin;
  1330.         free(yyvsp[0].decl_spec.text);
  1331.     }
  1332. break;
  1333. case 88:
  1334. #line 646 "grammar.y"
  1335. {
  1336.         add_ident_list(&yyval.param_list, &yyvsp[-2].param_list, "...");
  1337.     }
  1338. break;
  1339. case 89:
  1340. #line 653 "grammar.y"
  1341. {
  1342.         new_param_list(&yyval.param_list, yyvsp[0].parameter);
  1343.     }
  1344. break;
  1345. case 90:
  1346. #line 657 "grammar.y"
  1347. {
  1348.         add_param_list(&yyval.param_list, &yyvsp[-2].param_list, yyvsp[0].parameter);
  1349.     }
  1350. break;
  1351. case 91:
  1352. #line 664 "grammar.y"
  1353. {
  1354.         check_untagged(&yyvsp[-1].decl_spec);
  1355.         yyval.parameter = new_parameter(&yyvsp[-1].decl_spec, yyvsp[0].declarator);
  1356.     }
  1357. break;
  1358. case 92:
  1359. #line 669 "grammar.y"
  1360. {
  1361.         check_untagged(&yyvsp[-1].decl_spec);
  1362.         yyval.parameter = new_parameter(&yyvsp[-1].decl_spec, yyvsp[0].declarator);
  1363.     }
  1364. break;
  1365. case 93:
  1366. #line 674 "grammar.y"
  1367. {
  1368.         check_untagged(&yyvsp[0].decl_spec);
  1369.         yyval.parameter = new_parameter(&yyvsp[0].decl_spec, (Declarator *)0);
  1370.     }
  1371. break;
  1372. case 94:
  1373. #line 682 "grammar.y"
  1374. {
  1375.         new_ident_list(&yyval.param_list);
  1376.     }
  1377. break;
  1378. case 96:
  1379. #line 690 "grammar.y"
  1380. {
  1381.         new_ident_list(&yyval.param_list);
  1382.         add_ident_list(&yyval.param_list, &yyval.param_list, yyvsp[0].text.text);
  1383.     }
  1384. break;
  1385. case 97:
  1386. #line 695 "grammar.y"
  1387. {
  1388.         add_ident_list(&yyval.param_list, &yyvsp[-2].param_list, yyvsp[0].text.text);
  1389.     }
  1390. break;
  1391. case 98:
  1392. #line 702 "grammar.y"
  1393. {
  1394.         yyval.text = yyvsp[0].text;
  1395.     }
  1396. break;
  1397. case 99:
  1398. #line 706 "grammar.y"
  1399. {
  1400. #if OPT_LINTLIBRARY
  1401.         if (lintLibrary()) { /* Lint doesn't grok C++ ref variables */
  1402.         yyval.text = yyvsp[0].text;
  1403.         } else
  1404. #endif
  1405.         (void)sprintf(yyval.text.text, "&%s", yyvsp[0].text.text);
  1406.         yyval.text.begin = yyvsp[-1].text.begin;
  1407.     }
  1408. break;
  1409. case 100:
  1410. #line 719 "grammar.y"
  1411. {
  1412.         yyval.declarator = new_declarator(yyvsp[0].text.text, "", yyvsp[0].text.begin);
  1413.     }
  1414. break;
  1415. case 101:
  1416. #line 723 "grammar.y"
  1417. {
  1418.         yyval.declarator = yyvsp[0].declarator;
  1419.         (void)sprintf(buf, "%s%s", yyvsp[-1].text.text, yyval.declarator->text);
  1420.         free(yyval.declarator->text);
  1421.         yyval.declarator->text = xstrdup(buf);
  1422.         yyval.declarator->begin = yyvsp[-1].text.begin;
  1423.     }
  1424. break;
  1425. case 103:
  1426. #line 735 "grammar.y"
  1427. {
  1428.         yyval.declarator = yyvsp[-1].declarator;
  1429.         (void)sprintf(buf, "(%s)", yyval.declarator->text);
  1430.         free(yyval.declarator->text);
  1431.         yyval.declarator->text = xstrdup(buf);
  1432.         yyval.declarator->begin = yyvsp[-2].text.begin;
  1433.     }
  1434. break;
  1435. case 104:
  1436. #line 743 "grammar.y"
  1437. {
  1438.         yyval.declarator = yyvsp[-1].declarator;
  1439.         (void)sprintf(buf, "%s%s", yyval.declarator->text, yyvsp[0].text.text);
  1440.         free(yyval.declarator->text);
  1441.         yyval.declarator->text = xstrdup(buf);
  1442.     }
  1443. break;
  1444. case 105:
  1445. #line 750 "grammar.y"
  1446. {
  1447.         yyval.declarator = new_declarator(yyvsp[0].text.text, "", yyvsp[0].text.begin);
  1448.     }
  1449. break;
  1450. case 106:
  1451. #line 754 "grammar.y"
  1452. {
  1453.         yyval.declarator = new_declarator("%s()", "", yyvsp[-3].declarator->begin);
  1454.         yyval.declarator->params = yyvsp[-1].param_list;
  1455.         yyval.declarator->func_stack = yyvsp[-3].declarator;
  1456.         yyval.declarator->head = (yyvsp[-3].declarator->func_stack == NULL) ? yyval.declarator : yyvsp[-3].declarator->head;
  1457.         yyval.declarator->func_def = FUNC_ANSI;
  1458.     }
  1459. break;
  1460. case 107:
  1461. #line 762 "grammar.y"
  1462. {
  1463.         yyval.declarator = new_declarator("%s()", "", yyvsp[-2].declarator->begin);
  1464.         yyval.declarator->func_stack = yyvsp[-2].declarator;
  1465.         yyval.declarator->head = (yyvsp[-2].declarator->func_stack == NULL) ? yyval.declarator : yyvsp[-2].declarator->head;
  1466.         yyval.declarator->func_def = FUNC_ANSI;
  1467.     }
  1468. break;
  1469. case 108:
  1470. #line 769 "grammar.y"
  1471. {
  1472.         Declarator *d;
  1473.         
  1474.         d = new_declarator("", "", yyvsp[-2].text.begin);
  1475.         yyval.declarator = new_declarator("%s()", "", yyvsp[-2].text.begin);
  1476.         yyval.declarator->params = yyvsp[-1].param_list;
  1477.         yyval.declarator->func_stack = d;
  1478.         yyval.declarator->head = yyval.declarator;
  1479.         yyval.declarator->func_def = FUNC_ANSI;
  1480.     }
  1481. break;
  1482. case 109:
  1483. #line 780 "grammar.y"
  1484. {
  1485.         Declarator *d;
  1486.         
  1487.         d = new_declarator("", "", yyvsp[-1].text.begin);
  1488.         yyval.declarator = new_declarator("%s()", "", yyvsp[-1].text.begin);
  1489.         yyval.declarator->func_stack = d;
  1490.         yyval.declarator->head = yyval.declarator;
  1491.         yyval.declarator->func_def = FUNC_ANSI;
  1492.     }
  1493. break;
  1494. #line 1495 "y.tab.c"
  1495.     }
  1496.     yystk.ssp -= yym;
  1497.     yystate = *yystk.ssp;
  1498.     yystk.vsp -= yym;
  1499.     yym = yylhs[yyn];
  1500.     yych = yychar;
  1501.     if (yystate == 0 && yym == 0)
  1502.     {
  1503. #if YYDEBUG
  1504.         if (yydebug)
  1505.             printf("%sdebug: after reduction, shifting from state 0 to\
  1506.  state %d\n", YYPREFIX, YYFINAL);
  1507. #endif
  1508.         yystate = YYFINAL;
  1509.         *++yystk.ssp = YYFINAL;
  1510.         *++yystk.vsp = yyval;
  1511.         if (yych < 0)
  1512.         {
  1513.             if ((yych = YYLEX) < 0) yych = 0;
  1514.             yychar = yych;
  1515. #if YYDEBUG
  1516.             if (yydebug)
  1517.             {
  1518.                 yys = 0;
  1519.                 if (yych <= YYMAXTOKEN) yys = yyname[yych];
  1520.                 if (!yys) yys = "illegal-symbol";
  1521.                 printf("%sdebug: state %d, reading %d (%s)\n",
  1522.                         YYPREFIX, YYFINAL, yych, yys);
  1523.             }
  1524. #endif
  1525.         }
  1526.         if (yych == 0) goto yyaccept;
  1527.         goto yyloop;
  1528.     }
  1529.     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
  1530.             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
  1531.         yystate = yytable[yyn];
  1532.     else
  1533.         yystate = yydgoto[yym];
  1534. #if YYDEBUG
  1535.     if (yydebug)
  1536.         printf("%sdebug: after reduction, shifting from state %d \
  1537. to state %d\n", YYPREFIX, *yystk.ssp, yystate);
  1538. #endif
  1539.     if (yystk.ssp >= yystk.sslim && yygrowstack(&yystk))
  1540.         goto yyoverflow;
  1541.     *++yystk.ssp = yystate;
  1542.     *++yystk.vsp = yyval;
  1543.     goto yyloop;
  1544. yyoverflow:
  1545.     yyerror("yacc stack overflow");
  1546. yyabort:
  1547.     YYFREESTACK(&yystk);
  1548.     return (1);
  1549. yyaccept:
  1550.     YYFREESTACK(&yystk);
  1551.     return (0);
  1552. }
  1553.