ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

ppy.tab.c
Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.4.2.  */
00002 
00003 /* Skeleton implementation for Bison's Yacc-like parsers in C
00004    
00005       Copyright (C) 1984, 1989-1990, 2000-2006, 2009-2010 Free Software
00006    Foundation, Inc.
00007    
00008    This program is free software: you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation, either version 3 of the License, or
00011    (at your option) any later version.
00012    
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017    
00018    You should have received a copy of the GNU General Public License
00019    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00020 
00021 /* As a special exception, you may create a larger work that contains
00022    part or all of the Bison parser skeleton and distribute that work
00023    under terms of your choice, so long as that work isn't itself a
00024    parser generator using the skeleton or a modified version thereof
00025    as a parser skeleton.  Alternatively, if you modify or redistribute
00026    the parser skeleton itself, you may (at your option) remove this
00027    special exception, which will cause the skeleton and the resulting
00028    Bison output files to be licensed under the GNU General Public
00029    License without this special exception.
00030    
00031    This special exception was added by the Free Software Foundation in
00032    version 2.2 of Bison.  */
00033 
00034 /* C LALR(1) parser skeleton written by Richard Stallman, by
00035    simplifying the original so-called "semantic" parser.  */
00036 
00037 /* All symbols defined below should begin with yy or YY, to avoid
00038    infringing on user name space.  This should be done even for local
00039    variables, as they might otherwise be expanded by user macros.
00040    There are some unavoidable exceptions within include files to
00041    define necessary library symbols; they are noted "INFRINGES ON
00042    USER NAME SPACE" below.  */
00043 
00044 /* Identify Bison output.  */
00045 #define YYBISON 1
00046 
00047 /* Bison version.  */
00048 #define YYBISON_VERSION "2.4.2"
00049 
00050 /* Skeleton name.  */
00051 #define YYSKELETON_NAME "yacc.c"
00052 
00053 /* Pure parsers.  */
00054 #define YYPURE 0
00055 
00056 /* Push parsers.  */
00057 #define YYPUSH 0
00058 
00059 /* Pull parsers.  */
00060 #define YYPULL 1
00061 
00062 /* Using locations.  */
00063 #define YYLSP_NEEDED 0
00064 
00065 /* Substitute the variable and function names.  */
00066 #define yyparse         ppy_parse
00067 #define yylex           ppy_lex
00068 #define yyerror         ppy_error
00069 #define yylval          ppy_lval
00070 #define yychar          ppy_char
00071 #define yydebug         ppy_debug
00072 #define yynerrs         ppy_nerrs
00073 
00074 
00075 /* Copy the first part of user declarations.  */
00076 
00077 /* Line 189 of yacc.c  */
00078 #line 30 "ppy.y"
00079 
00080 #include "config.h"
00081 #include "wine/port.h"
00082 
00083 #include <stdio.h>
00084 #include <stdlib.h>
00085 #include <stdarg.h>
00086 #include <assert.h>
00087 #include <ctype.h>
00088 #include <string.h>
00089 
00090 #include "wpp_private.h"
00091 
00092 
00093 #define UNARY_OP(r, v, OP)                  \
00094     switch(v.type)                      \
00095     {                           \
00096     case cv_sint:   r.val.si  = OP v.val.si; break;     \
00097     case cv_uint:   r.val.ui  = OP v.val.ui; break;     \
00098     case cv_slong:  r.val.sl  = OP v.val.sl; break;     \
00099     case cv_ulong:  r.val.ul  = OP v.val.ul; break;     \
00100     case cv_sll:    r.val.sll = OP v.val.sll; break;    \
00101     case cv_ull:    r.val.ull = OP v.val.ull; break;    \
00102     }
00103 
00104 #define cv_signed(v)    ((v.type & FLAG_SIGNED) != 0)
00105 
00106 #define BIN_OP_INT(r, v1, v2, OP)           \
00107     r.type = v1.type;               \
00108     if(cv_signed(v1) && cv_signed(v2))      \
00109         r.val.si = v1.val.si OP v2.val.si;  \
00110     else if(cv_signed(v1) && !cv_signed(v2))    \
00111         r.val.si = v1.val.si OP (signed) v2.val.ui; \
00112     else if(!cv_signed(v1) && cv_signed(v2))    \
00113         r.val.si = (signed) v1.val.ui OP v2.val.si; \
00114     else                        \
00115         r.val.ui = v1.val.ui OP v2.val.ui;
00116 
00117 #define BIN_OP_LONG(r, v1, v2, OP)          \
00118     r.type = v1.type;               \
00119     if(cv_signed(v1) && cv_signed(v2))      \
00120         r.val.sl = v1.val.sl OP v2.val.sl;  \
00121     else if(cv_signed(v1) && !cv_signed(v2))    \
00122         r.val.sl = v1.val.sl OP (signed long) v2.val.ul; \
00123     else if(!cv_signed(v1) && cv_signed(v2))    \
00124         r.val.sl = (signed long) v1.val.ul OP v2.val.sl; \
00125     else                        \
00126         r.val.ul = v1.val.ul OP v2.val.ul;
00127 
00128 #define BIN_OP_LONGLONG(r, v1, v2, OP)          \
00129     r.type = v1.type;               \
00130     if(cv_signed(v1) && cv_signed(v2))      \
00131         r.val.sll = v1.val.sll OP v2.val.sll;   \
00132     else if(cv_signed(v1) && !cv_signed(v2))    \
00133         r.val.sll = v1.val.sll OP (wrc_sll_t) v2.val.ull; \
00134     else if(!cv_signed(v1) && cv_signed(v2))    \
00135         r.val.sll = (wrc_sll_t) v1.val.ull OP v2.val.sll; \
00136     else                        \
00137         r.val.ull = v1.val.ull OP v2.val.ull;
00138 
00139 #define BIN_OP(r, v1, v2, OP)                       \
00140     switch(v1.type & SIZE_MASK)                 \
00141     {                               \
00142     case SIZE_INT:      BIN_OP_INT(r, v1, v2, OP); break;   \
00143     case SIZE_LONG:     BIN_OP_LONG(r, v1, v2, OP); break;  \
00144     case SIZE_LONGLONG: BIN_OP_LONGLONG(r, v1, v2, OP); break;  \
00145     default: pp_internal_error(__FILE__, __LINE__, "Invalid type indicator (0x%04x)", v1.type); \
00146     }
00147 
00148 
00149 /*
00150  * Prototypes
00151  */
00152 static int boolean(cval_t *v);
00153 static void promote_equal_size(cval_t *v1, cval_t *v2);
00154 static void cast_to_sint(cval_t *v);
00155 static void cast_to_uint(cval_t *v);
00156 static void cast_to_slong(cval_t *v);
00157 static void cast_to_ulong(cval_t *v);
00158 static void cast_to_sll(cval_t *v);
00159 static void cast_to_ull(cval_t *v);
00160 static marg_t *new_marg(char *str, def_arg_t type);
00161 static marg_t *add_new_marg(char *str, def_arg_t type);
00162 static int marg_index(char *id);
00163 static mtext_t *new_mtext(char *str, int idx, def_exp_t type);
00164 static mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp);
00165 static char *merge_text(char *s1, char *s2);
00166 
00167 /*
00168  * Local variables
00169  */
00170 static marg_t **macro_args; /* Macro parameters array while parsing */
00171 static int  nmacro_args;
00172 
00173 
00174 
00175 /* Line 189 of yacc.c  */
00176 #line 177 "ppy.tab.c"
00177 
00178 /* Enabling traces.  */
00179 #ifndef YYDEBUG
00180 # define YYDEBUG 0
00181 #endif
00182 
00183 /* Enabling verbose error messages.  */
00184 #ifdef YYERROR_VERBOSE
00185 # undef YYERROR_VERBOSE
00186 # define YYERROR_VERBOSE 1
00187 #else
00188 # define YYERROR_VERBOSE 0
00189 #endif
00190 
00191 /* Enabling the token table.  */
00192 #ifndef YYTOKEN_TABLE
00193 # define YYTOKEN_TABLE 0
00194 #endif
00195 
00196 
00197 /* Tokens.  */
00198 #ifndef YYTOKENTYPE
00199 # define YYTOKENTYPE
00200    /* Put the tokens into the symbol table, so that GDB and other debuggers
00201       know about them.  */
00202    enum yytokentype {
00203      tRCINCLUDE = 258,
00204      tIF = 259,
00205      tIFDEF = 260,
00206      tIFNDEF = 261,
00207      tELSE = 262,
00208      tELIF = 263,
00209      tENDIF = 264,
00210      tDEFINED = 265,
00211      tNL = 266,
00212      tINCLUDE = 267,
00213      tLINE = 268,
00214      tGCCLINE = 269,
00215      tERROR = 270,
00216      tWARNING = 271,
00217      tPRAGMA = 272,
00218      tPPIDENT = 273,
00219      tUNDEF = 274,
00220      tMACROEND = 275,
00221      tCONCAT = 276,
00222      tELIPSIS = 277,
00223      tSTRINGIZE = 278,
00224      tIDENT = 279,
00225      tLITERAL = 280,
00226      tMACRO = 281,
00227      tDEFINE = 282,
00228      tDQSTRING = 283,
00229      tSQSTRING = 284,
00230      tIQSTRING = 285,
00231      tUINT = 286,
00232      tSINT = 287,
00233      tULONG = 288,
00234      tSLONG = 289,
00235      tULONGLONG = 290,
00236      tSLONGLONG = 291,
00237      tRCINCLUDEPATH = 292,
00238      tLOGOR = 293,
00239      tLOGAND = 294,
00240      tNE = 295,
00241      tEQ = 296,
00242      tGTE = 297,
00243      tLTE = 298,
00244      tRSHIFT = 299,
00245      tLSHIFT = 300
00246    };
00247 #endif
00248 
00249 
00250 
00251 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00252 typedef union YYSTYPE
00253 {
00254 
00255 /* Line 214 of yacc.c  */
00256 #line 126 "ppy.y"
00257 
00258     int     sint;
00259     unsigned int    uint;
00260     long        slong;
00261     unsigned long   ulong;
00262     wrc_sll_t   sll;
00263     wrc_ull_t   ull;
00264     int     *iptr;
00265     char        *cptr;
00266     cval_t      cval;
00267     marg_t      *marg;
00268     mtext_t     *mtext;
00269 
00270 
00271 
00272 /* Line 214 of yacc.c  */
00273 #line 274 "ppy.tab.c"
00274 } YYSTYPE;
00275 # define YYSTYPE_IS_TRIVIAL 1
00276 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00277 # define YYSTYPE_IS_DECLARED 1
00278 #endif
00279 
00280 
00281 /* Copy the second part of user declarations.  */
00282 
00283 
00284 /* Line 264 of yacc.c  */
00285 #line 286 "ppy.tab.c"
00286 
00287 #ifdef short
00288 # undef short
00289 #endif
00290 
00291 #ifdef YYTYPE_UINT8
00292 typedef YYTYPE_UINT8 yytype_uint8;
00293 #else
00294 typedef unsigned char yytype_uint8;
00295 #endif
00296 
00297 #ifdef YYTYPE_INT8
00298 typedef YYTYPE_INT8 yytype_int8;
00299 #elif (defined __STDC__ || defined __C99__FUNC__ \
00300      || defined __cplusplus || defined _MSC_VER)
00301 typedef signed char yytype_int8;
00302 #else
00303 typedef short int yytype_int8;
00304 #endif
00305 
00306 #ifdef YYTYPE_UINT16
00307 typedef YYTYPE_UINT16 yytype_uint16;
00308 #else
00309 typedef unsigned short int yytype_uint16;
00310 #endif
00311 
00312 #ifdef YYTYPE_INT16
00313 typedef YYTYPE_INT16 yytype_int16;
00314 #else
00315 typedef short int yytype_int16;
00316 #endif
00317 
00318 #ifndef YYSIZE_T
00319 # ifdef __SIZE_TYPE__
00320 #  define YYSIZE_T __SIZE_TYPE__
00321 # elif defined size_t
00322 #  define YYSIZE_T size_t
00323 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00324      || defined __cplusplus || defined _MSC_VER)
00325 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00326 #  define YYSIZE_T size_t
00327 # else
00328 #  define YYSIZE_T unsigned int
00329 # endif
00330 #endif
00331 
00332 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00333 
00334 #ifndef YY_
00335 # if defined YYENABLE_NLS && YYENABLE_NLS
00336 #  if ENABLE_NLS
00337 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00338 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00339 #  endif
00340 # endif
00341 # ifndef YY_
00342 #  define YY_(msgid) msgid
00343 # endif
00344 #endif
00345 
00346 /* Suppress unused-variable warnings by "using" E.  */
00347 #if ! defined lint || defined __GNUC__
00348 # define YYUSE(e) ((void) (e))
00349 #else
00350 # define YYUSE(e) /* empty */
00351 #endif
00352 
00353 /* Identity function, used to suppress warnings about constant conditions.  */
00354 #ifndef lint
00355 # define YYID(n) (n)
00356 #else
00357 #if (defined __STDC__ || defined __C99__FUNC__ \
00358      || defined __cplusplus || defined _MSC_VER)
00359 static int
00360 YYID (int yyi)
00361 #else
00362 static int
00363 YYID (yyi)
00364     int yyi;
00365 #endif
00366 {
00367   return yyi;
00368 }
00369 #endif
00370 
00371 #if ! defined yyoverflow || YYERROR_VERBOSE
00372 
00373 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00374 
00375 # ifdef YYSTACK_USE_ALLOCA
00376 #  if YYSTACK_USE_ALLOCA
00377 #   ifdef __GNUC__
00378 #    define YYSTACK_ALLOC __builtin_alloca
00379 #   elif defined __BUILTIN_VA_ARG_INCR
00380 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00381 #   elif defined _AIX
00382 #    define YYSTACK_ALLOC __alloca
00383 #   elif defined _MSC_VER
00384 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00385 #    define alloca _alloca
00386 #   else
00387 #    define YYSTACK_ALLOC alloca
00388 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00389      || defined __cplusplus || defined _MSC_VER)
00390 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00391 #     ifndef _STDLIB_H
00392 #      define _STDLIB_H 1
00393 #     endif
00394 #    endif
00395 #   endif
00396 #  endif
00397 # endif
00398 
00399 # ifdef YYSTACK_ALLOC
00400    /* Pacify GCC's `empty if-body' warning.  */
00401 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00402 #  ifndef YYSTACK_ALLOC_MAXIMUM
00403     /* The OS might guarantee only one guard page at the bottom of the stack,
00404        and a page size can be as small as 4096 bytes.  So we cannot safely
00405        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00406        to allow for a few compiler-allocated temporary stack slots.  */
00407 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00408 #  endif
00409 # else
00410 #  define YYSTACK_ALLOC YYMALLOC
00411 #  define YYSTACK_FREE YYFREE
00412 #  ifndef YYSTACK_ALLOC_MAXIMUM
00413 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00414 #  endif
00415 #  if (defined __cplusplus && ! defined _STDLIB_H \
00416        && ! ((defined YYMALLOC || defined malloc) \
00417          && (defined YYFREE || defined free)))
00418 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00419 #   ifndef _STDLIB_H
00420 #    define _STDLIB_H 1
00421 #   endif
00422 #  endif
00423 #  ifndef YYMALLOC
00424 #   define YYMALLOC malloc
00425 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00426      || defined __cplusplus || defined _MSC_VER)
00427 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00428 #   endif
00429 #  endif
00430 #  ifndef YYFREE
00431 #   define YYFREE free
00432 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00433      || defined __cplusplus || defined _MSC_VER)
00434 void free (void *); /* INFRINGES ON USER NAME SPACE */
00435 #   endif
00436 #  endif
00437 # endif
00438 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
00439 
00440 
00441 #if (! defined yyoverflow \
00442      && (! defined __cplusplus \
00443      || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
00444 
00445 /* A type that is properly aligned for any stack member.  */
00446 union yyalloc
00447 {
00448   yytype_int16 yyss_alloc;
00449   YYSTYPE yyvs_alloc;
00450 };
00451 
00452 /* The size of the maximum gap between one aligned stack and the next.  */
00453 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
00454 
00455 /* The size of an array large to enough to hold all stacks, each with
00456    N elements.  */
00457 # define YYSTACK_BYTES(N) \
00458      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
00459       + YYSTACK_GAP_MAXIMUM)
00460 
00461 /* Copy COUNT objects from FROM to TO.  The source and destination do
00462    not overlap.  */
00463 # ifndef YYCOPY
00464 #  if defined __GNUC__ && 1 < __GNUC__
00465 #   define YYCOPY(To, From, Count) \
00466       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
00467 #  else
00468 #   define YYCOPY(To, From, Count)      \
00469       do                    \
00470     {                   \
00471       YYSIZE_T yyi;             \
00472       for (yyi = 0; yyi < (Count); yyi++)   \
00473         (To)[yyi] = (From)[yyi];        \
00474     }                   \
00475       while (YYID (0))
00476 #  endif
00477 # endif
00478 
00479 /* Relocate STACK from its old location to the new one.  The
00480    local variables YYSIZE and YYSTACKSIZE give the old and new number of
00481    elements in the stack, and YYPTR gives the new location of the
00482    stack.  Advance YYPTR to a properly aligned location for the next
00483    stack.  */
00484 # define YYSTACK_RELOCATE(Stack_alloc, Stack)               \
00485     do                                  \
00486       {                                 \
00487     YYSIZE_T yynewbytes;                        \
00488     YYCOPY (&yyptr->Stack_alloc, Stack, yysize);            \
00489     Stack = &yyptr->Stack_alloc;                    \
00490     yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
00491     yyptr += yynewbytes / sizeof (*yyptr);              \
00492       }                                 \
00493     while (YYID (0))
00494 
00495 #endif
00496 
00497 /* YYFINAL -- State number of the termination state.  */
00498 #define YYFINAL  2
00499 /* YYLAST -- Last index in YYTABLE.  */
00500 #define YYLAST   303
00501 
00502 /* YYNTOKENS -- Number of terminals.  */
00503 #define YYNTOKENS  62
00504 /* YYNNTS -- Number of nonterminals.  */
00505 #define YYNNTS  13
00506 /* YYNRULES -- Number of rules.  */
00507 #define YYNRULES  84
00508 /* YYNRULES -- Number of states.  */
00509 #define YYNSTATES  153
00510 
00511 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
00512 #define YYUNDEFTOK  2
00513 #define YYMAXUTOK   300
00514 
00515 #define YYTRANSLATE(YYX)                        \
00516   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
00517 
00518 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
00519 static const yytype_uint8 yytranslate[] =
00520 {
00521        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00522        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00523        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00524        2,     2,     2,    58,     2,     2,     2,     2,    44,     2,
00525       60,    61,    55,    53,    59,    54,     2,    56,     2,     2,
00526        2,     2,     2,     2,     2,     2,     2,     2,    39,     2,
00527       47,     2,    48,    38,     2,     2,     2,     2,     2,     2,
00528        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00529        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00530        2,     2,     2,     2,    43,     2,     2,     2,     2,     2,
00531        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00532        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00533        2,     2,     2,     2,    42,     2,    57,     2,     2,     2,
00534        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00535        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00536        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00537        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00538        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00539        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00540        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00541        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00542        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00543        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00544        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00545        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00546        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
00547        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
00548       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
00549       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
00550       35,    36,    37,    40,    41,    45,    46,    49,    50,    51,
00551       52
00552 };
00553 
00554 #if YYDEBUG
00555 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
00556    YYRHS.  */
00557 static const yytype_uint16 yyprhs[] =
00558 {
00559        0,     0,     3,     4,     7,    11,    15,    19,    23,    27,
00560       31,    34,    37,    41,    45,    52,    57,    62,    68,    75,
00561       83,    92,    95,    99,   103,   107,   111,   114,   117,   118,
00562      120,   122,   124,   126,   129,   132,   135,   136,   137,   139,
00563      141,   145,   149,   151,   152,   154,   156,   159,   161,   163,
00564      165,   167,   170,   172,   174,   176,   178,   180,   182,   184,
00565      187,   192,   194,   198,   202,   206,   210,   214,   218,   222,
00566      226,   230,   234,   238,   242,   246,   250,   254,   258,   262,
00567      265,   268,   271,   274,   278
00568 };
00569 
00570 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
00571 static const yytype_int8 yyrhs[] =
00572 {
00573       63,     0,    -1,    -1,    63,    64,    -1,    12,    28,    11,
00574       -1,    12,    30,    11,    -1,     4,    74,    11,    -1,     5,
00575       24,    11,    -1,     6,    24,    11,    -1,     8,    74,    11,
00576       -1,     7,    11,    -1,     9,    11,    -1,    19,    24,    11,
00577       -1,    27,    65,    11,    -1,    26,    67,    68,    20,    71,
00578       11,    -1,    13,    32,    28,    11,    -1,    14,    32,    28,
00579       11,    -1,    14,    32,    28,    32,    11,    -1,    14,    32,
00580       28,    32,    32,    11,    -1,    14,    32,    28,    32,    32,
00581       32,    11,    -1,    14,    32,    28,    32,    32,    32,    32,
00582       11,    -1,    14,    11,    -1,    15,    65,    11,    -1,    16,
00583       65,    11,    -1,    17,    65,    11,    -1,    18,    65,    11,
00584       -1,     3,    37,    -1,     3,    28,    -1,    -1,    66,    -1,
00585       25,    -1,    28,    -1,    29,    -1,    66,    25,    -1,    66,
00586       28,    -1,    66,    29,    -1,    -1,    -1,    69,    -1,    70,
00587       -1,    70,    59,    22,    -1,    70,    59,    24,    -1,    24,
00588       -1,    -1,    72,    -1,    73,    -1,    72,    73,    -1,    25,
00589       -1,    28,    -1,    29,    -1,    21,    -1,    23,    24,    -1,
00590       24,    -1,    32,    -1,    31,    -1,    34,    -1,    33,    -1,
00591       36,    -1,    35,    -1,    10,    24,    -1,    10,    60,    24,
00592       61,    -1,    24,    -1,    74,    40,    74,    -1,    74,    41,
00593       74,    -1,    74,    46,    74,    -1,    74,    45,    74,    -1,
00594       74,    47,    74,    -1,    74,    48,    74,    -1,    74,    50,
00595       74,    -1,    74,    49,    74,    -1,    74,    53,    74,    -1,
00596       74,    54,    74,    -1,    74,    43,    74,    -1,    74,    44,
00597       74,    -1,    74,    42,    74,    -1,    74,    55,    74,    -1,
00598       74,    56,    74,    -1,    74,    52,    74,    -1,    74,    51,
00599       74,    -1,    53,    74,    -1,    54,    74,    -1,    57,    74,
00600       -1,    58,    74,    -1,    60,    74,    61,    -1,    74,    38,
00601       74,    39,    74,    -1
00602 };
00603 
00604 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
00605 static const yytype_uint16 yyrline[] =
00606 {
00607        0,   181,   181,   182,   186,   187,   188,   189,   190,   210,
00608      234,   260,   277,   278,   279,   282,   283,   284,   286,   288,
00609      290,   292,   293,   294,   295,   296,   297,   310,   316,   317,
00610      320,   321,   322,   323,   324,   325,   328,   331,   332,   335,
00611      336,   339,   340,   344,   345,   351,   352,   355,   356,   357,
00612      358,   359,   366,   375,   376,   377,   378,   379,   380,   381,
00613      382,   383,   384,   385,   386,   387,   388,   389,   390,   391,
00614      392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
00615      402,   403,   404,   405,   406
00616 };
00617 #endif
00618 
00619 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
00620 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
00621    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
00622 static const char *const yytname[] =
00623 {
00624   "$end", "error", "$undefined", "tRCINCLUDE", "tIF", "tIFDEF", "tIFNDEF",
00625   "tELSE", "tELIF", "tENDIF", "tDEFINED", "tNL", "tINCLUDE", "tLINE",
00626   "tGCCLINE", "tERROR", "tWARNING", "tPRAGMA", "tPPIDENT", "tUNDEF",
00627   "tMACROEND", "tCONCAT", "tELIPSIS", "tSTRINGIZE", "tIDENT", "tLITERAL",
00628   "tMACRO", "tDEFINE", "tDQSTRING", "tSQSTRING", "tIQSTRING", "tUINT",
00629   "tSINT", "tULONG", "tSLONG", "tULONGLONG", "tSLONGLONG",
00630   "tRCINCLUDEPATH", "'?'", "':'", "tLOGOR", "tLOGAND", "'|'", "'^'", "'&'",
00631   "tNE", "tEQ", "'<'", "'>'", "tGTE", "tLTE", "tRSHIFT", "tLSHIFT", "'+'",
00632   "'-'", "'*'", "'/'", "'~'", "'!'", "','", "'('", "')'", "$accept",
00633   "pp_file", "preprocessor", "opt_text", "text", "res_arg", "allmargs",
00634   "emargs", "margs", "opt_mtexts", "mtexts", "mtext", "pp_expr", 0
00635 };
00636 #endif
00637 
00638 # ifdef YYPRINT
00639 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
00640    token YYLEX-NUM.  */
00641 static const yytype_uint16 yytoknum[] =
00642 {
00643        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
00644      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
00645      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
00646      285,   286,   287,   288,   289,   290,   291,   292,    63,    58,
00647      293,   294,   124,    94,    38,   295,   296,    60,    62,   297,
00648      298,   299,   300,    43,    45,    42,    47,   126,    33,    44,
00649       40,    41
00650 };
00651 # endif
00652 
00653 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
00654 static const yytype_uint8 yyr1[] =
00655 {
00656        0,    62,    63,    63,    64,    64,    64,    64,    64,    64,
00657       64,    64,    64,    64,    64,    64,    64,    64,    64,    64,
00658       64,    64,    64,    64,    64,    64,    64,    64,    65,    65,
00659       66,    66,    66,    66,    66,    66,    67,    68,    68,    69,
00660       69,    70,    70,    71,    71,    72,    72,    73,    73,    73,
00661       73,    73,    73,    74,    74,    74,    74,    74,    74,    74,
00662       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
00663       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
00664       74,    74,    74,    74,    74
00665 };
00666 
00667 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
00668 static const yytype_uint8 yyr2[] =
00669 {
00670        0,     2,     0,     2,     3,     3,     3,     3,     3,     3,
00671        2,     2,     3,     3,     6,     4,     4,     5,     6,     7,
00672        8,     2,     3,     3,     3,     3,     2,     2,     0,     1,
00673        1,     1,     1,     2,     2,     2,     0,     0,     1,     1,
00674        3,     3,     1,     0,     1,     1,     2,     1,     1,     1,
00675        1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
00676        4,     1,     3,     3,     3,     3,     3,     3,     3,     3,
00677        3,     3,     3,     3,     3,     3,     3,     3,     3,     2,
00678        2,     2,     2,     3,     5
00679 };
00680 
00681 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
00682    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
00683    means the default is an error.  */
00684 static const yytype_uint8 yydefact[] =
00685 {
00686        2,     0,     1,     0,     0,     0,     0,     0,     0,     0,
00687        0,     0,     0,    28,    28,    28,    28,     0,    36,    28,
00688        3,    27,    26,     0,    61,    54,    53,    56,    55,    58,
00689       57,     0,     0,     0,     0,     0,     0,     0,     0,    10,
00690        0,    11,     0,     0,     0,    21,     0,    30,    31,    32,
00691        0,    29,     0,     0,     0,     0,    37,     0,    59,     0,
00692       79,    80,    81,    82,     0,     6,     0,     0,     0,     0,
00693        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00694        0,     0,     0,     0,     7,     8,     9,     4,     5,     0,
00695        0,    22,    33,    34,    35,    23,    24,    25,    12,    42,
00696        0,    38,    39,    13,     0,    83,     0,    62,    63,    74,
00697       72,    73,    65,    64,    66,    67,    69,    68,    78,    77,
00698       70,    71,    75,    76,    15,    16,     0,    43,     0,    60,
00699        0,    17,     0,    50,     0,    52,    47,    48,    49,     0,
00700       44,    45,    40,    41,    84,    18,     0,    51,    14,    46,
00701       19,     0,    20
00702 };
00703 
00704 /* YYDEFGOTO[NTERM-NUM].  */
00705 static const yytype_int16 yydefgoto[] =
00706 {
00707       -1,     1,    20,    50,    51,    56,   100,   101,   102,   139,
00708      140,   141,    36
00709 };
00710 
00711 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
00712    STATE-NUM.  */
00713 #define YYPACT_NINF -27
00714 static const yytype_int16 yypact[] =
00715 {
00716      -27,   142,   -27,   -26,    -3,   -12,    -2,    30,    -3,    41,
00717       91,    21,     2,   -19,   -19,   -19,   -19,    32,   -27,   -19,
00718      -27,   -27,   -27,   -23,   -27,   -27,   -27,   -27,   -27,   -27,
00719      -27,    -3,    -3,    -3,    -3,    -3,    38,    66,   109,   -27,
00720       85,   -27,   113,   133,   115,   -27,   124,   -27,   -27,   -27,
00721      179,    -9,   278,   280,   281,   282,   129,   283,   -27,   271,
00722      -10,   -10,   -27,   -27,    57,   -27,    -3,    -3,    -3,    -3,
00723       -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,    -3,
00724       -3,    -3,    -3,    -3,   -27,   -27,   -27,   -27,   -27,   285,
00725        3,   -27,   -27,   -27,   -27,   -27,   -27,   -27,   -27,   -27,
00726      277,   -27,   239,   -27,   238,   -27,   132,   167,   182,   196,
00727      209,   221,   231,   231,   111,   111,   111,   111,    61,    61,
00728      -10,   -10,   -27,   -27,   -27,   -27,     4,    19,   266,   -27,
00729       -3,   -27,     6,   -27,   276,   -27,   -27,   -27,   -27,   290,
00730       19,   -27,   -27,   -27,   151,   -27,     7,   -27,   -27,   -27,
00731      -27,   291,   -27
00732 };
00733 
00734 /* YYPGOTO[NTERM-NUM].  */
00735 static const yytype_int16 yypgoto[] =
00736 {
00737      -27,   -27,   -27,   -11,   -27,   -27,   -27,   -27,   -27,   -27,
00738      -27,   163,    -8
00739 };
00740 
00741 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
00742    positive, shift that token.  If negative, reduce the rule which
00743    number is the opposite.  If zero, do what YYDEFACT says.
00744    If YYTABLE_NINF, syntax error.  */
00745 #define YYTABLE_NINF -1
00746 static const yytype_uint8 yytable[] =
00747 {
00748       40,    58,    21,    52,    53,    54,    47,    23,    57,    48,
00749       49,    22,    37,    45,   125,   131,    92,   145,   150,    93,
00750       94,    24,    38,    60,    61,    62,    63,    64,    25,    26,
00751       27,    28,    29,    30,    46,   126,   132,    59,   146,   151,
00752      133,    39,   134,   135,   136,    82,    83,   137,   138,    65,
00753       31,    32,    41,    44,    33,    34,    55,    35,   106,   107,
00754      108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
00755      118,   119,   120,   121,   122,   123,    66,    84,    67,    68,
00756       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
00757       79,    80,    81,    82,    83,    66,    86,    67,    68,    69,
00758       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
00759       80,    81,    82,    83,    80,    81,    82,    83,   105,    42,
00760       85,    43,   144,    66,    87,    67,    68,    69,    70,    71,
00761       72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
00762       82,    83,     2,    89,    88,     3,     4,     5,     6,     7,
00763        8,     9,    90,    99,    10,    11,    12,    13,    14,    15,
00764       16,    17,    78,    79,    80,    81,    82,    83,    18,    19,
00765       66,   130,    67,    68,    69,    70,    71,    72,    73,    74,
00766       75,    76,    77,    78,    79,    80,    81,    82,    83,    66,
00767       91,    67,    68,    69,    70,    71,    72,    73,    74,    75,
00768       76,    77,    78,    79,    80,    81,    82,    83,    68,    69,
00769       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
00770       80,    81,    82,    83,    69,    70,    71,    72,    73,    74,
00771       75,    76,    77,    78,    79,    80,    81,    82,    83,    70,
00772       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
00773       81,    82,    83,    71,    72,    73,    74,    75,    76,    77,
00774       78,    79,    80,    81,    82,    83,    72,    73,    74,    75,
00775       76,    77,    78,    79,    80,    81,    82,    83,    74,    75,
00776       76,    77,    78,    79,    80,    81,    82,    83,   142,    95,
00777      143,    96,    97,    98,   103,   104,   124,   127,   128,   129,
00778      147,   148,   152,   149
00779 };
00780 
00781 static const yytype_uint8 yycheck[] =
00782 {
00783        8,    24,    28,    14,    15,    16,    25,    10,    19,    28,
00784       29,    37,    24,    11,    11,    11,    25,    11,    11,    28,
00785       29,    24,    24,    31,    32,    33,    34,    35,    31,    32,
00786       33,    34,    35,    36,    32,    32,    32,    60,    32,    32,
00787       21,    11,    23,    24,    25,    55,    56,    28,    29,    11,
00788       53,    54,    11,    32,    57,    58,    24,    60,    66,    67,
00789       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
00790       78,    79,    80,    81,    82,    83,    38,    11,    40,    41,
00791       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
00792       52,    53,    54,    55,    56,    38,    11,    40,    41,    42,
00793       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
00794       53,    54,    55,    56,    53,    54,    55,    56,    61,    28,
00795       11,    30,   130,    38,    11,    40,    41,    42,    43,    44,
00796       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
00797       55,    56,     0,    28,    11,     3,     4,     5,     6,     7,
00798        8,     9,    28,    24,    12,    13,    14,    15,    16,    17,
00799       18,    19,    51,    52,    53,    54,    55,    56,    26,    27,
00800       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
00801       48,    49,    50,    51,    52,    53,    54,    55,    56,    38,
00802       11,    40,    41,    42,    43,    44,    45,    46,    47,    48,
00803       49,    50,    51,    52,    53,    54,    55,    56,    41,    42,
00804       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
00805       53,    54,    55,    56,    42,    43,    44,    45,    46,    47,
00806       48,    49,    50,    51,    52,    53,    54,    55,    56,    43,
00807       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
00808       54,    55,    56,    44,    45,    46,    47,    48,    49,    50,
00809       51,    52,    53,    54,    55,    56,    45,    46,    47,    48,
00810       49,    50,    51,    52,    53,    54,    55,    56,    47,    48,
00811       49,    50,    51,    52,    53,    54,    55,    56,    22,    11,
00812       24,    11,    11,    11,    11,    24,    11,    20,    59,    61,
00813       24,    11,    11,   140
00814 };
00815 
00816 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
00817    symbol of state STATE-NUM.  */
00818 static const yytype_uint8 yystos[] =
00819 {
00820        0,    63,     0,     3,     4,     5,     6,     7,     8,     9,
00821       12,    13,    14,    15,    16,    17,    18,    19,    26,    27,
00822       64,    28,    37,    10,    24,    31,    32,    33,    34,    35,
00823       36,    53,    54,    57,    58,    60,    74,    24,    24,    11,
00824       74,    11,    28,    30,    32,    11,    32,    25,    28,    29,
00825       65,    66,    65,    65,    65,    24,    67,    65,    24,    60,
00826       74,    74,    74,    74,    74,    11,    38,    40,    41,    42,
00827       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
00828       53,    54,    55,    56,    11,    11,    11,    11,    11,    28,
00829       28,    11,    25,    28,    29,    11,    11,    11,    11,    24,
00830       68,    69,    70,    11,    24,    61,    74,    74,    74,    74,
00831       74,    74,    74,    74,    74,    74,    74,    74,    74,    74,
00832       74,    74,    74,    74,    11,    11,    32,    20,    59,    61,
00833       39,    11,    32,    21,    23,    24,    25,    28,    29,    71,
00834       72,    73,    22,    24,    74,    11,    32,    24,    11,    73,
00835       11,    32,    11
00836 };
00837 
00838 #define yyerrok     (yyerrstatus = 0)
00839 #define yyclearin   (yychar = YYEMPTY)
00840 #define YYEMPTY     (-2)
00841 #define YYEOF       0
00842 
00843 #define YYACCEPT    goto yyacceptlab
00844 #define YYABORT     goto yyabortlab
00845 #define YYERROR     goto yyerrorlab
00846 
00847 
00848 /* Like YYERROR except do call yyerror.  This remains here temporarily
00849    to ease the transition to the new meaning of YYERROR, for GCC.
00850    Once GCC version 2 has supplanted version 1, this can go.  However,
00851    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
00852    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
00853    discussed.  */
00854 
00855 #define YYFAIL      goto yyerrlab
00856 #if defined YYFAIL
00857   /* This is here to suppress warnings from the GCC cpp's
00858      -Wunused-macros.  Normally we don't worry about that warning, but
00859      some users do, and we want to make it easy for users to remove
00860      YYFAIL uses, which will produce warnings from Bison 2.5.  */
00861 #endif
00862 
00863 #define YYRECOVERING()  (!!yyerrstatus)
00864 
00865 #define YYBACKUP(Token, Value)                  \
00866 do                              \
00867   if (yychar == YYEMPTY && yylen == 1)              \
00868     {                               \
00869       yychar = (Token);                     \
00870       yylval = (Value);                     \
00871       yytoken = YYTRANSLATE (yychar);               \
00872       YYPOPSTACK (1);                       \
00873       goto yybackup;                        \
00874     }                               \
00875   else                              \
00876     {                               \
00877       yyerror (YY_("syntax error: cannot back up")); \
00878       YYERROR;                          \
00879     }                               \
00880 while (YYID (0))
00881 
00882 
00883 #define YYTERROR    1
00884 #define YYERRCODE   256
00885 
00886 
00887 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
00888    If N is 0, then set CURRENT to the empty location which ends
00889    the previous symbol: RHS[0] (always defined).  */
00890 
00891 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
00892 #ifndef YYLLOC_DEFAULT
00893 # define YYLLOC_DEFAULT(Current, Rhs, N)                \
00894     do                                  \
00895       if (YYID (N))                                                    \
00896     {                               \
00897       (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;    \
00898       (Current).first_column = YYRHSLOC (Rhs, 1).first_column;  \
00899       (Current).last_line    = YYRHSLOC (Rhs, N).last_line;     \
00900       (Current).last_column  = YYRHSLOC (Rhs, N).last_column;   \
00901     }                               \
00902       else                              \
00903     {                               \
00904       (Current).first_line   = (Current).last_line   =      \
00905         YYRHSLOC (Rhs, 0).last_line;                \
00906       (Current).first_column = (Current).last_column =      \
00907         YYRHSLOC (Rhs, 0).last_column;              \
00908     }                               \
00909     while (YYID (0))
00910 #endif
00911 
00912 
00913 /* YY_LOCATION_PRINT -- Print the location on the stream.
00914    This macro was not mandated originally: define only if we know
00915    we won't break user code: when these are the locations we know.  */
00916 
00917 #ifndef YY_LOCATION_PRINT
00918 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
00919 #  define YY_LOCATION_PRINT(File, Loc)          \
00920      fprintf (File, "%d.%d-%d.%d",          \
00921           (Loc).first_line, (Loc).first_column, \
00922           (Loc).last_line,  (Loc).last_column)
00923 # else
00924 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
00925 # endif
00926 #endif
00927 
00928 
00929 /* YYLEX -- calling `yylex' with the right arguments.  */
00930 
00931 #ifdef YYLEX_PARAM
00932 # define YYLEX yylex (YYLEX_PARAM)
00933 #else
00934 # define YYLEX yylex ()
00935 #endif
00936 
00937 /* Enable debugging if requested.  */
00938 #if YYDEBUG
00939 
00940 # ifndef YYFPRINTF
00941 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
00942 #  define YYFPRINTF fprintf
00943 # endif
00944 
00945 # define YYDPRINTF(Args)            \
00946 do {                        \
00947   if (yydebug)                  \
00948     YYFPRINTF Args;             \
00949 } while (YYID (0))
00950 
00951 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)            \
00952 do {                                      \
00953   if (yydebug)                                \
00954     {                                     \
00955       YYFPRINTF (stderr, "%s ", Title);                   \
00956       yy_symbol_print (stderr,                        \
00957           Type, Value); \
00958       YYFPRINTF (stderr, "\n");                       \
00959     }                                     \
00960 } while (YYID (0))
00961 
00962 
00963 /*--------------------------------.
00964 | Print this symbol on YYOUTPUT.  |
00965 `--------------------------------*/
00966 
00967 /*ARGSUSED*/
00968 #if (defined __STDC__ || defined __C99__FUNC__ \
00969      || defined __cplusplus || defined _MSC_VER)
00970 static void
00971 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
00972 #else
00973 static void
00974 yy_symbol_value_print (yyoutput, yytype, yyvaluep)
00975     FILE *yyoutput;
00976     int yytype;
00977     YYSTYPE const * const yyvaluep;
00978 #endif
00979 {
00980   if (!yyvaluep)
00981     return;
00982 # ifdef YYPRINT
00983   if (yytype < YYNTOKENS)
00984     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
00985 # else
00986   YYUSE (yyoutput);
00987 # endif
00988   switch (yytype)
00989     {
00990       default:
00991     break;
00992     }
00993 }
00994 
00995 
00996 /*--------------------------------.
00997 | Print this symbol on YYOUTPUT.  |
00998 `--------------------------------*/
00999 
01000 #if (defined __STDC__ || defined __C99__FUNC__ \
01001      || defined __cplusplus || defined _MSC_VER)
01002 static void
01003 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
01004 #else
01005 static void
01006 yy_symbol_print (yyoutput, yytype, yyvaluep)
01007     FILE *yyoutput;
01008     int yytype;
01009     YYSTYPE const * const yyvaluep;
01010 #endif
01011 {
01012   if (yytype < YYNTOKENS)
01013     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
01014   else
01015     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
01016 
01017   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
01018   YYFPRINTF (yyoutput, ")");
01019 }
01020 
01021 /*------------------------------------------------------------------.
01022 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
01023 | TOP (included).                                                   |
01024 `------------------------------------------------------------------*/
01025 
01026 #if (defined __STDC__ || defined __C99__FUNC__ \
01027      || defined __cplusplus || defined _MSC_VER)
01028 static void
01029 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
01030 #else
01031 static void
01032 yy_stack_print (yybottom, yytop)
01033     yytype_int16 *yybottom;
01034     yytype_int16 *yytop;
01035 #endif
01036 {
01037   YYFPRINTF (stderr, "Stack now");
01038   for (; yybottom <= yytop; yybottom++)
01039     {
01040       int yybot = *yybottom;
01041       YYFPRINTF (stderr, " %d", yybot);
01042     }
01043   YYFPRINTF (stderr, "\n");
01044 }
01045 
01046 # define YY_STACK_PRINT(Bottom, Top)                \
01047 do {                                \
01048   if (yydebug)                          \
01049     yy_stack_print ((Bottom), (Top));               \
01050 } while (YYID (0))
01051 
01052 
01053 /*------------------------------------------------.
01054 | Report that the YYRULE is going to be reduced.  |
01055 `------------------------------------------------*/
01056 
01057 #if (defined __STDC__ || defined __C99__FUNC__ \
01058      || defined __cplusplus || defined _MSC_VER)
01059 static void
01060 yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
01061 #else
01062 static void
01063 yy_reduce_print (yyvsp, yyrule)
01064     YYSTYPE *yyvsp;
01065     int yyrule;
01066 #endif
01067 {
01068   int yynrhs = yyr2[yyrule];
01069   int yyi;
01070   unsigned long int yylno = yyrline[yyrule];
01071   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
01072          yyrule - 1, yylno);
01073   /* The symbols being reduced.  */
01074   for (yyi = 0; yyi < yynrhs; yyi++)
01075     {
01076       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
01077       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
01078                &(yyvsp[(yyi + 1) - (yynrhs)])
01079                            );
01080       YYFPRINTF (stderr, "\n");
01081     }
01082 }
01083 
01084 # define YY_REDUCE_PRINT(Rule)      \
01085 do {                    \
01086   if (yydebug)              \
01087     yy_reduce_print (yyvsp, Rule); \
01088 } while (YYID (0))
01089 
01090 /* Nonzero means print parse trace.  It is left uninitialized so that
01091    multiple parsers can coexist.  */
01092 int yydebug;
01093 #else /* !YYDEBUG */
01094 # define YYDPRINTF(Args)
01095 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
01096 # define YY_STACK_PRINT(Bottom, Top)
01097 # define YY_REDUCE_PRINT(Rule)
01098 #endif /* !YYDEBUG */
01099 
01100 
01101 /* YYINITDEPTH -- initial size of the parser's stacks.  */
01102 #ifndef YYINITDEPTH
01103 # define YYINITDEPTH 200
01104 #endif
01105 
01106 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
01107    if the built-in stack extension method is used).
01108 
01109    Do not make this value too large; the results are undefined if
01110    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
01111    evaluated with infinite-precision integer arithmetic.  */
01112 
01113 #ifndef YYMAXDEPTH
01114 # define YYMAXDEPTH 10000
01115 #endif
01116 
01117 
01118 
01119 #if YYERROR_VERBOSE
01120 
01121 # ifndef yystrlen
01122 #  if defined __GLIBC__ && defined _STRING_H
01123 #   define yystrlen strlen
01124 #  else
01125 /* Return the length of YYSTR.  */
01126 #if (defined __STDC__ || defined __C99__FUNC__ \
01127      || defined __cplusplus || defined _MSC_VER)
01128 static YYSIZE_T
01129 yystrlen (const char *yystr)
01130 #else
01131 static YYSIZE_T
01132 yystrlen (yystr)
01133     const char *yystr;
01134 #endif
01135 {
01136   YYSIZE_T yylen;
01137   for (yylen = 0; yystr[yylen]; yylen++)
01138     continue;
01139   return yylen;
01140 }
01141 #  endif
01142 # endif
01143 
01144 # ifndef yystpcpy
01145 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
01146 #   define yystpcpy stpcpy
01147 #  else
01148 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
01149    YYDEST.  */
01150 #if (defined __STDC__ || defined __C99__FUNC__ \
01151      || defined __cplusplus || defined _MSC_VER)
01152 static char *
01153 yystpcpy (char *yydest, const char *yysrc)
01154 #else
01155 static char *
01156 yystpcpy (yydest, yysrc)
01157     char *yydest;
01158     const char *yysrc;
01159 #endif
01160 {
01161   char *yyd = yydest;
01162   const char *yys = yysrc;
01163 
01164   while ((*yyd++ = *yys++) != '\0')
01165     continue;
01166 
01167   return yyd - 1;
01168 }
01169 #  endif
01170 # endif
01171 
01172 # ifndef yytnamerr
01173 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
01174    quotes and backslashes, so that it's suitable for yyerror.  The
01175    heuristic is that double-quoting is unnecessary unless the string
01176    contains an apostrophe, a comma, or backslash (other than
01177    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
01178    null, do not copy; instead, return the length of what the result
01179    would have been.  */
01180 static YYSIZE_T
01181 yytnamerr (char *yyres, const char *yystr)
01182 {
01183   if (*yystr == '"')
01184     {
01185       YYSIZE_T yyn = 0;
01186       char const *yyp = yystr;
01187 
01188       for (;;)
01189     switch (*++yyp)
01190       {
01191       case '\'':
01192       case ',':
01193         goto do_not_strip_quotes;
01194 
01195       case '\\':
01196         if (*++yyp != '\\')
01197           goto do_not_strip_quotes;
01198         /* Fall through.  */
01199       default:
01200         if (yyres)
01201           yyres[yyn] = *yyp;
01202         yyn++;
01203         break;
01204 
01205       case '"':
01206         if (yyres)
01207           yyres[yyn] = '\0';
01208         return yyn;
01209       }
01210     do_not_strip_quotes: ;
01211     }
01212 
01213   if (! yyres)
01214     return yystrlen (yystr);
01215 
01216   return yystpcpy (yyres, yystr) - yyres;
01217 }
01218 # endif
01219 
01220 /* Copy into YYRESULT an error message about the unexpected token
01221    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
01222    including the terminating null byte.  If YYRESULT is null, do not
01223    copy anything; just return the number of bytes that would be
01224    copied.  As a special case, return 0 if an ordinary "syntax error"
01225    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
01226    size calculation.  */
01227 static YYSIZE_T
01228 yysyntax_error (char *yyresult, int yystate, int yychar)
01229 {
01230   int yyn = yypact[yystate];
01231 
01232   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
01233     return 0;
01234   else
01235     {
01236       int yytype = YYTRANSLATE (yychar);
01237       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
01238       YYSIZE_T yysize = yysize0;
01239       YYSIZE_T yysize1;
01240       int yysize_overflow = 0;
01241       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
01242       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
01243       int yyx;
01244 
01245 # if 0
01246       /* This is so xgettext sees the translatable formats that are
01247      constructed on the fly.  */
01248       YY_("syntax error, unexpected %s");
01249       YY_("syntax error, unexpected %s, expecting %s");
01250       YY_("syntax error, unexpected %s, expecting %s or %s");
01251       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
01252       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
01253 # endif
01254       char *yyfmt;
01255       char const *yyf;
01256       static char const yyunexpected[] = "syntax error, unexpected %s";
01257       static char const yyexpecting[] = ", expecting %s";
01258       static char const yyor[] = " or %s";
01259       char yyformat[sizeof yyunexpected
01260             + sizeof yyexpecting - 1
01261             + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
01262                * (sizeof yyor - 1))];
01263       char const *yyprefix = yyexpecting;
01264 
01265       /* Start YYX at -YYN if negative to avoid negative indexes in
01266      YYCHECK.  */
01267       int yyxbegin = yyn < 0 ? -yyn : 0;
01268 
01269       /* Stay within bounds of both yycheck and yytname.  */
01270       int yychecklim = YYLAST - yyn + 1;
01271       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
01272       int yycount = 1;
01273 
01274       yyarg[0] = yytname[yytype];
01275       yyfmt = yystpcpy (yyformat, yyunexpected);
01276 
01277       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
01278     if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
01279       {
01280         if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
01281           {
01282         yycount = 1;
01283         yysize = yysize0;
01284         yyformat[sizeof yyunexpected - 1] = '\0';
01285         break;
01286           }
01287         yyarg[yycount++] = yytname[yyx];
01288         yysize1 = yysize + yytnamerr (0, yytname[yyx]);
01289         yysize_overflow |= (yysize1 < yysize);
01290         yysize = yysize1;
01291         yyfmt = yystpcpy (yyfmt, yyprefix);
01292         yyprefix = yyor;
01293       }
01294 
01295       yyf = YY_(yyformat);
01296       yysize1 = yysize + yystrlen (yyf);
01297       yysize_overflow |= (yysize1 < yysize);
01298       yysize = yysize1;
01299 
01300       if (yysize_overflow)
01301     return YYSIZE_MAXIMUM;
01302 
01303       if (yyresult)
01304     {
01305       /* Avoid sprintf, as that infringes on the user's name space.
01306          Don't have undefined behavior even if the translation
01307          produced a string with the wrong number of "%s"s.  */
01308       char *yyp = yyresult;
01309       int yyi = 0;
01310       while ((*yyp = *yyf) != '\0')
01311         {
01312           if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
01313         {
01314           yyp += yytnamerr (yyp, yyarg[yyi++]);
01315           yyf += 2;
01316         }
01317           else
01318         {
01319           yyp++;
01320           yyf++;
01321         }
01322         }
01323     }
01324       return yysize;
01325     }
01326 }
01327 #endif /* YYERROR_VERBOSE */
01328 
01329 
01330 /*-----------------------------------------------.
01331 | Release the memory associated to this symbol.  |
01332 `-----------------------------------------------*/
01333 
01334 /*ARGSUSED*/
01335 #if (defined __STDC__ || defined __C99__FUNC__ \
01336      || defined __cplusplus || defined _MSC_VER)
01337 static void
01338 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
01339 #else
01340 static void
01341 yydestruct (yymsg, yytype, yyvaluep)
01342     const char *yymsg;
01343     int yytype;
01344     YYSTYPE *yyvaluep;
01345 #endif
01346 {
01347   YYUSE (yyvaluep);
01348 
01349   if (!yymsg)
01350     yymsg = "Deleting";
01351   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
01352 
01353   switch (yytype)
01354     {
01355 
01356       default:
01357     break;
01358     }
01359 }
01360 
01361 /* Prevent warnings from -Wmissing-prototypes.  */
01362 #ifdef YYPARSE_PARAM
01363 #if defined __STDC__ || defined __cplusplus
01364 int yyparse (void *YYPARSE_PARAM);
01365 #else
01366 int yyparse ();
01367 #endif
01368 #else /* ! YYPARSE_PARAM */
01369 #if defined __STDC__ || defined __cplusplus
01370 int yyparse (void);
01371 #else
01372 int yyparse ();
01373 #endif
01374 #endif /* ! YYPARSE_PARAM */
01375 
01376 
01377 /* The lookahead symbol.  */
01378 int yychar;
01379 
01380 /* The semantic value of the lookahead symbol.  */
01381 YYSTYPE yylval;
01382 
01383 /* Number of syntax errors so far.  */
01384 int yynerrs;
01385 
01386 
01387 
01388 /*-------------------------.
01389 | yyparse or yypush_parse.  |
01390 `-------------------------*/
01391 
01392 #ifdef YYPARSE_PARAM
01393 #if (defined __STDC__ || defined __C99__FUNC__ \
01394      || defined __cplusplus || defined _MSC_VER)
01395 int
01396 yyparse (void *YYPARSE_PARAM)
01397 #else
01398 int
01399 yyparse (YYPARSE_PARAM)
01400     void *YYPARSE_PARAM;
01401 #endif
01402 #else /* ! YYPARSE_PARAM */
01403 #if (defined __STDC__ || defined __C99__FUNC__ \
01404      || defined __cplusplus || defined _MSC_VER)
01405 int
01406 yyparse (void)
01407 #else
01408 int
01409 yyparse ()
01410 
01411 #endif
01412 #endif
01413 {
01414 
01415 
01416     int yystate;
01417     /* Number of tokens to shift before error messages enabled.  */
01418     int yyerrstatus;
01419 
01420     /* The stacks and their tools:
01421        `yyss': related to states.
01422        `yyvs': related to semantic values.
01423 
01424        Refer to the stacks thru separate pointers, to allow yyoverflow
01425        to reallocate them elsewhere.  */
01426 
01427     /* The state stack.  */
01428     yytype_int16 yyssa[YYINITDEPTH];
01429     yytype_int16 *yyss;
01430     yytype_int16 *yyssp;
01431 
01432     /* The semantic value stack.  */
01433     YYSTYPE yyvsa[YYINITDEPTH];
01434     YYSTYPE *yyvs;
01435     YYSTYPE *yyvsp;
01436 
01437     YYSIZE_T yystacksize;
01438 
01439   int yyn;
01440   int yyresult;
01441   /* Lookahead token as an internal (translated) token number.  */
01442   int yytoken;
01443   /* The variables used to return semantic value and location from the
01444      action routines.  */
01445   YYSTYPE yyval;
01446 
01447 #if YYERROR_VERBOSE
01448   /* Buffer for error messages, and its allocated size.  */
01449   char yymsgbuf[128];
01450   char *yymsg = yymsgbuf;
01451   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
01452 #endif
01453 
01454 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
01455 
01456   /* The number of symbols on the RHS of the reduced rule.
01457      Keep to zero when no symbol should be popped.  */
01458   int yylen = 0;
01459 
01460   yytoken = 0;
01461   yyss = yyssa;
01462   yyvs = yyvsa;
01463   yystacksize = YYINITDEPTH;
01464 
01465   YYDPRINTF ((stderr, "Starting parse\n"));
01466 
01467   yystate = 0;
01468   yyerrstatus = 0;
01469   yynerrs = 0;
01470   yychar = YYEMPTY; /* Cause a token to be read.  */
01471 
01472   /* Initialize stack pointers.
01473      Waste one element of value and location stack
01474      so that they stay on the same level as the state stack.
01475      The wasted elements are never initialized.  */
01476   yyssp = yyss;
01477   yyvsp = yyvs;
01478 
01479   goto yysetstate;
01480 
01481 /*------------------------------------------------------------.
01482 | yynewstate -- Push a new state, which is found in yystate.  |
01483 `------------------------------------------------------------*/
01484  yynewstate:
01485   /* In all cases, when you get here, the value and location stacks
01486      have just been pushed.  So pushing a state here evens the stacks.  */
01487   yyssp++;
01488 
01489  yysetstate:
01490   *yyssp = yystate;
01491 
01492   if (yyss + yystacksize - 1 <= yyssp)
01493     {
01494       /* Get the current used size of the three stacks, in elements.  */
01495       YYSIZE_T yysize = yyssp - yyss + 1;
01496 
01497 #ifdef yyoverflow
01498       {
01499     /* Give user a chance to reallocate the stack.  Use copies of
01500        these so that the &'s don't force the real ones into
01501        memory.  */
01502     YYSTYPE *yyvs1 = yyvs;
01503     yytype_int16 *yyss1 = yyss;
01504 
01505     /* Each stack pointer address is followed by the size of the
01506        data in use in that stack, in bytes.  This used to be a
01507        conditional around just the two extra args, but that might
01508        be undefined if yyoverflow is a macro.  */
01509     yyoverflow (YY_("memory exhausted"),
01510             &yyss1, yysize * sizeof (*yyssp),
01511             &yyvs1, yysize * sizeof (*yyvsp),
01512             &yystacksize);
01513 
01514     yyss = yyss1;
01515     yyvs = yyvs1;
01516       }
01517 #else /* no yyoverflow */
01518 # ifndef YYSTACK_RELOCATE
01519       goto yyexhaustedlab;
01520 # else
01521       /* Extend the stack our own way.  */
01522       if (YYMAXDEPTH <= yystacksize)
01523     goto yyexhaustedlab;
01524       yystacksize *= 2;
01525       if (YYMAXDEPTH < yystacksize)
01526     yystacksize = YYMAXDEPTH;
01527 
01528       {
01529     yytype_int16 *yyss1 = yyss;
01530     union yyalloc *yyptr =
01531       (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
01532     if (! yyptr)
01533       goto yyexhaustedlab;
01534     YYSTACK_RELOCATE (yyss_alloc, yyss);
01535     YYSTACK_RELOCATE (yyvs_alloc, yyvs);
01536 #  undef YYSTACK_RELOCATE
01537     if (yyss1 != yyssa)
01538       YYSTACK_FREE (yyss1);
01539       }
01540 # endif
01541 #endif /* no yyoverflow */
01542 
01543       yyssp = yyss + yysize - 1;
01544       yyvsp = yyvs + yysize - 1;
01545 
01546       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
01547           (unsigned long int) yystacksize));
01548 
01549       if (yyss + yystacksize - 1 <= yyssp)
01550     YYABORT;
01551     }
01552 
01553   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
01554 
01555   if (yystate == YYFINAL)
01556     YYACCEPT;
01557 
01558   goto yybackup;
01559 
01560 /*-----------.
01561 | yybackup.  |
01562 `-----------*/
01563 yybackup:
01564 
01565   /* Do appropriate processing given the current state.  Read a
01566      lookahead token if we need one and don't already have one.  */
01567 
01568   /* First try to decide what to do without reference to lookahead token.  */
01569   yyn = yypact[yystate];
01570   if (yyn == YYPACT_NINF)
01571     goto yydefault;
01572 
01573   /* Not known => get a lookahead token if don't already have one.  */
01574 
01575   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
01576   if (yychar == YYEMPTY)
01577     {
01578       YYDPRINTF ((stderr, "Reading a token: "));
01579       yychar = YYLEX;
01580     }
01581 
01582   if (yychar <= YYEOF)
01583     {
01584       yychar = yytoken = YYEOF;
01585       YYDPRINTF ((stderr, "Now at end of input.\n"));
01586     }
01587   else
01588     {
01589       yytoken = YYTRANSLATE (yychar);
01590       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
01591     }
01592 
01593   /* If the proper action on seeing token YYTOKEN is to reduce or to
01594      detect an error, take that action.  */
01595   yyn += yytoken;
01596   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
01597     goto yydefault;
01598   yyn = yytable[yyn];
01599   if (yyn <= 0)
01600     {
01601       if (yyn == 0 || yyn == YYTABLE_NINF)
01602     goto yyerrlab;
01603       yyn = -yyn;
01604       goto yyreduce;
01605     }
01606 
01607   /* Count tokens shifted since error; after three, turn off error
01608      status.  */
01609   if (yyerrstatus)
01610     yyerrstatus--;
01611 
01612   /* Shift the lookahead token.  */
01613   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
01614 
01615   /* Discard the shifted token.  */
01616   yychar = YYEMPTY;
01617 
01618   yystate = yyn;
01619   *++yyvsp = yylval;
01620 
01621   goto yynewstate;
01622 
01623 
01624 /*-----------------------------------------------------------.
01625 | yydefault -- do the default action for the current state.  |
01626 `-----------------------------------------------------------*/
01627 yydefault:
01628   yyn = yydefact[yystate];
01629   if (yyn == 0)
01630     goto yyerrlab;
01631   goto yyreduce;
01632 
01633 
01634 /*-----------------------------.
01635 | yyreduce -- Do a reduction.  |
01636 `-----------------------------*/
01637 yyreduce:
01638   /* yyn is the number of a rule to reduce with.  */
01639   yylen = yyr2[yyn];
01640 
01641   /* If YYLEN is nonzero, implement the default value of the action:
01642      `$$ = $1'.
01643 
01644      Otherwise, the following line sets YYVAL to garbage.
01645      This behavior is undocumented and Bison
01646      users should not rely upon it.  Assigning to YYVAL
01647      unconditionally makes the parser a bit smaller, and it avoids a
01648      GCC warning that YYVAL may be used uninitialized.  */
01649   yyval = yyvsp[1-yylen];
01650 
01651 
01652   YY_REDUCE_PRINT (yyn);
01653   switch (yyn)
01654     {
01655         case 4:
01656 
01657 /* Line 1464 of yacc.c  */
01658 #line 186 "ppy.y"
01659     { pp_do_include((yyvsp[(2) - (3)].cptr), 1); ;}
01660     break;
01661 
01662   case 5:
01663 
01664 /* Line 1464 of yacc.c  */
01665 #line 187 "ppy.y"
01666     { pp_do_include((yyvsp[(2) - (3)].cptr), 0); ;}
01667     break;
01668 
01669   case 6:
01670 
01671 /* Line 1464 of yacc.c  */
01672 #line 188 "ppy.y"
01673     { pp_next_if_state(boolean(&(yyvsp[(2) - (3)].cval))); ;}
01674     break;
01675 
01676   case 7:
01677 
01678 /* Line 1464 of yacc.c  */
01679 #line 189 "ppy.y"
01680     { pp_next_if_state(pplookup((yyvsp[(2) - (3)].cptr)) != NULL); free((yyvsp[(2) - (3)].cptr)); ;}
01681     break;
01682 
01683   case 8:
01684 
01685 /* Line 1464 of yacc.c  */
01686 #line 190 "ppy.y"
01687     {
01688         int t = pplookup((yyvsp[(2) - (3)].cptr)) == NULL;
01689         if(pp_incl_state.state == 0 && t && !pp_incl_state.seen_junk)
01690         {
01691             pp_incl_state.state = 1;
01692             pp_incl_state.ppp   = (yyvsp[(2) - (3)].cptr);
01693             pp_incl_state.ifdepth   = pp_get_if_depth();
01694         }
01695         else if(pp_incl_state.state != 1)
01696         {
01697             pp_incl_state.state = -1;
01698             free((yyvsp[(2) - (3)].cptr));
01699         }
01700         else
01701             free((yyvsp[(2) - (3)].cptr));
01702         pp_next_if_state(t);
01703         if(pp_status.debug)
01704             fprintf(stderr, "tIFNDEF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
01705                                 pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
01706         ;}
01707     break;
01708 
01709   case 9:
01710 
01711 /* Line 1464 of yacc.c  */
01712 #line 210 "ppy.y"
01713     {
01714         pp_if_state_t s = pp_pop_if();
01715         switch(s)
01716         {
01717         case if_true:
01718         case if_elif:
01719             pp_push_if(if_elif);
01720             break;
01721         case if_false:
01722             pp_push_if(boolean(&(yyvsp[(2) - (3)].cval)) ? if_true : if_false);
01723             break;
01724         case if_ignore:
01725             pp_push_if(if_ignore);
01726             break;
01727         case if_elsetrue:
01728         case if_elsefalse:
01729             ppy_error("#elif cannot follow #else");
01730             break;
01731         case if_error:
01732             break;
01733         default:
01734             pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #elif directive", s);
01735         }
01736         ;}
01737     break;
01738 
01739   case 10:
01740 
01741 /* Line 1464 of yacc.c  */
01742 #line 234 "ppy.y"
01743     {
01744         pp_if_state_t s = pp_pop_if();
01745         switch(s)
01746         {
01747         case if_true:
01748             pp_push_if(if_elsefalse);
01749             break;
01750         case if_elif:
01751             pp_push_if(if_elif);
01752             break;
01753         case if_false:
01754             pp_push_if(if_elsetrue);
01755             break;
01756         case if_ignore:
01757             pp_push_if(if_ignore);
01758             break;
01759         case if_elsetrue:
01760         case if_elsefalse:
01761             ppy_error("#else clause already defined");
01762             break;
01763         case if_error:
01764             break;
01765         default:
01766             pp_internal_error(__FILE__, __LINE__, "Invalid pp_if_state (%d) in #else directive", s);
01767         }
01768         ;}
01769     break;
01770 
01771   case 11:
01772 
01773 /* Line 1464 of yacc.c  */
01774 #line 260 "ppy.y"
01775     {
01776         if(pp_pop_if() != if_error)
01777         {
01778             if(pp_incl_state.ifdepth == pp_get_if_depth() && pp_incl_state.state == 1)
01779             {
01780                 pp_incl_state.state = 2;
01781                 pp_incl_state.seen_junk = 0;
01782             }
01783             else if(pp_incl_state.state != 1)
01784             {
01785                 pp_incl_state.state = -1;
01786             }
01787             if(pp_status.debug)
01788                 fprintf(stderr, "tENDIF: %s:%d: include_state=%d, include_ppp='%s', include_ifdepth=%d\n",
01789                     pp_status.input, pp_status.line_number, pp_incl_state.state, pp_incl_state.ppp, pp_incl_state.ifdepth);
01790         }
01791         ;}
01792     break;
01793 
01794   case 12:
01795 
01796 /* Line 1464 of yacc.c  */
01797 #line 277 "ppy.y"
01798     { pp_del_define((yyvsp[(2) - (3)].cptr)); free((yyvsp[(2) - (3)].cptr)); ;}
01799     break;
01800 
01801   case 13:
01802 
01803 /* Line 1464 of yacc.c  */
01804 #line 278 "ppy.y"
01805     { pp_add_define((yyvsp[(1) - (3)].cptr), (yyvsp[(2) - (3)].cptr)); free((yyvsp[(1) - (3)].cptr)); free((yyvsp[(2) - (3)].cptr)); ;}
01806     break;
01807 
01808   case 14:
01809 
01810 /* Line 1464 of yacc.c  */
01811 #line 279 "ppy.y"
01812     {
01813         pp_add_macro((yyvsp[(1) - (6)].cptr), macro_args, nmacro_args, (yyvsp[(5) - (6)].mtext));
01814         ;}
01815     break;
01816 
01817   case 15:
01818 
01819 /* Line 1464 of yacc.c  */
01820 #line 282 "ppy.y"
01821     { if((yyvsp[(3) - (4)].cptr)) pp_writestring("# %d %s\n", (yyvsp[(2) - (4)].sint) , (yyvsp[(3) - (4)].cptr)); free((yyvsp[(3) - (4)].cptr)); ;}
01822     break;
01823 
01824   case 16:
01825 
01826 /* Line 1464 of yacc.c  */
01827 #line 283 "ppy.y"
01828     { if((yyvsp[(3) - (4)].cptr)) pp_writestring("# %d %s\n", (yyvsp[(2) - (4)].sint) , (yyvsp[(3) - (4)].cptr)); free((yyvsp[(3) - (4)].cptr)); ;}
01829     break;
01830 
01831   case 17:
01832 
01833 /* Line 1464 of yacc.c  */
01834 #line 285 "ppy.y"
01835     { if((yyvsp[(3) - (5)].cptr)) pp_writestring("# %d %s %d\n", (yyvsp[(2) - (5)].sint), (yyvsp[(3) - (5)].cptr), (yyvsp[(4) - (5)].sint)); free((yyvsp[(3) - (5)].cptr)); ;}
01836     break;
01837 
01838   case 18:
01839 
01840 /* Line 1464 of yacc.c  */
01841 #line 287 "ppy.y"
01842     { if((yyvsp[(3) - (6)].cptr)) pp_writestring("# %d %s %d %d\n", (yyvsp[(2) - (6)].sint) ,(yyvsp[(3) - (6)].cptr), (yyvsp[(4) - (6)].sint), (yyvsp[(5) - (6)].sint)); free((yyvsp[(3) - (6)].cptr)); ;}
01843     break;
01844 
01845   case 19:
01846 
01847 /* Line 1464 of yacc.c  */
01848 #line 289 "ppy.y"
01849     { if((yyvsp[(3) - (7)].cptr)) pp_writestring("# %d %s %d %d %d\n", (yyvsp[(2) - (7)].sint) ,(yyvsp[(3) - (7)].cptr) ,(yyvsp[(4) - (7)].sint) ,(yyvsp[(5) - (7)].sint), (yyvsp[(6) - (7)].sint)); free((yyvsp[(3) - (7)].cptr)); ;}
01850     break;
01851 
01852   case 20:
01853 
01854 /* Line 1464 of yacc.c  */
01855 #line 291 "ppy.y"
01856     { if((yyvsp[(3) - (8)].cptr)) pp_writestring("# %d %s %d %d %d %d\n", (yyvsp[(2) - (8)].sint) ,(yyvsp[(3) - (8)].cptr) ,(yyvsp[(4) - (8)].sint) ,(yyvsp[(5) - (8)].sint), (yyvsp[(6) - (8)].sint), (yyvsp[(7) - (8)].sint)); free((yyvsp[(3) - (8)].cptr)); ;}
01857     break;
01858 
01859   case 22:
01860 
01861 /* Line 1464 of yacc.c  */
01862 #line 293 "ppy.y"
01863     { ppy_error("#error directive: '%s'", (yyvsp[(2) - (3)].cptr)); free((yyvsp[(2) - (3)].cptr)); ;}
01864     break;
01865 
01866   case 23:
01867 
01868 /* Line 1464 of yacc.c  */
01869 #line 294 "ppy.y"
01870     { ppy_warning("#warning directive: '%s'", (yyvsp[(2) - (3)].cptr)); free((yyvsp[(2) - (3)].cptr)); ;}
01871     break;
01872 
01873   case 24:
01874 
01875 /* Line 1464 of yacc.c  */
01876 #line 295 "ppy.y"
01877     { pp_writestring("#pragma %s\n", (yyvsp[(2) - (3)].cptr) ? (yyvsp[(2) - (3)].cptr) : ""); free((yyvsp[(2) - (3)].cptr)); ;}
01878     break;
01879 
01880   case 25:
01881 
01882 /* Line 1464 of yacc.c  */
01883 #line 296 "ppy.y"
01884     { if(pp_status.pedantic) ppy_warning("#ident ignored (arg: '%s')", (yyvsp[(2) - (3)].cptr)); free((yyvsp[(2) - (3)].cptr)); ;}
01885     break;
01886 
01887   case 26:
01888 
01889 /* Line 1464 of yacc.c  */
01890 #line 297 "ppy.y"
01891     {
01892                 if((yyvsp[(2) - (2)].cptr))
01893                 {
01894                         int nl=strlen((yyvsp[(2) - (2)].cptr)) +3;
01895                         char *fn=pp_xmalloc(nl);
01896                         if(fn)
01897                         {
01898                                 sprintf(fn,"\"%s\"",(yyvsp[(2) - (2)].cptr));
01899                                 pp_do_include(fn,1);
01900                         }
01901                         free((yyvsp[(2) - (2)].cptr));
01902                 }
01903     ;}
01904     break;
01905 
01906   case 27:
01907 
01908 /* Line 1464 of yacc.c  */
01909 #line 310 "ppy.y"
01910     {
01911         pp_do_include((yyvsp[(2) - (2)].cptr),1);
01912     ;}
01913     break;
01914 
01915   case 28:
01916 
01917 /* Line 1464 of yacc.c  */
01918 #line 316 "ppy.y"
01919     { (yyval.cptr) = NULL; ;}
01920     break;
01921 
01922   case 29:
01923 
01924 /* Line 1464 of yacc.c  */
01925 #line 317 "ppy.y"
01926     { (yyval.cptr) = (yyvsp[(1) - (1)].cptr); ;}
01927     break;
01928 
01929   case 30:
01930 
01931 /* Line 1464 of yacc.c  */
01932 #line 320 "ppy.y"
01933     { (yyval.cptr) = (yyvsp[(1) - (1)].cptr); ;}
01934     break;
01935 
01936   case 31:
01937 
01938 /* Line 1464 of yacc.c  */
01939 #line 321 "ppy.y"
01940     { (yyval.cptr) = (yyvsp[(1) - (1)].cptr); ;}
01941     break;
01942 
01943   case 32:
01944 
01945 /* Line 1464 of yacc.c  */
01946 #line 322 "ppy.y"
01947     { (yyval.cptr) = (yyvsp[(1) - (1)].cptr); ;}
01948     break;
01949 
01950   case 33:
01951 
01952 /* Line 1464 of yacc.c  */
01953 #line 323 "ppy.y"
01954     { (yyval.cptr) = merge_text((yyvsp[(1) - (2)].cptr), (yyvsp[(2) - (2)].cptr)); ;}
01955     break;
01956 
01957   case 34:
01958 
01959 /* Line 1464 of yacc.c  */
01960 #line 324 "ppy.y"
01961     { (yyval.cptr) = merge_text((yyvsp[(1) - (2)].cptr), (yyvsp[(2) - (2)].cptr)); ;}
01962     break;
01963 
01964   case 35:
01965 
01966 /* Line 1464 of yacc.c  */
01967 #line 325 "ppy.y"
01968     { (yyval.cptr) = merge_text((yyvsp[(1) - (2)].cptr), (yyvsp[(2) - (2)].cptr)); ;}
01969     break;
01970 
01971   case 36:
01972 
01973 /* Line 1464 of yacc.c  */
01974 #line 328 "ppy.y"
01975     { macro_args = NULL; nmacro_args = 0; ;}
01976     break;
01977 
01978   case 37:
01979 
01980 /* Line 1464 of yacc.c  */
01981 #line 331 "ppy.y"
01982     { (yyval.sint) = 0; macro_args = NULL; nmacro_args = 0; ;}
01983     break;
01984 
01985   case 38:
01986 
01987 /* Line 1464 of yacc.c  */
01988 #line 332 "ppy.y"
01989     { (yyval.sint) = nmacro_args; ;}
01990     break;
01991 
01992   case 39:
01993 
01994 /* Line 1464 of yacc.c  */
01995 #line 335 "ppy.y"
01996     { (yyval.marg) = (yyvsp[(1) - (1)].marg); ;}
01997     break;
01998 
01999   case 40:
02000 
02001 /* Line 1464 of yacc.c  */
02002 #line 336 "ppy.y"
02003     { (yyval.marg) = add_new_marg(NULL, arg_list); nmacro_args *= -1; ;}
02004     break;
02005 
02006   case 41:
02007 
02008 /* Line 1464 of yacc.c  */
02009 #line 339 "ppy.y"
02010     { (yyval.marg) = add_new_marg((yyvsp[(3) - (3)].cptr), arg_single); ;}
02011     break;
02012 
02013   case 42:
02014 
02015 /* Line 1464 of yacc.c  */
02016 #line 340 "ppy.y"
02017     { (yyval.marg) = add_new_marg((yyvsp[(1) - (1)].cptr), arg_single); ;}
02018     break;
02019 
02020   case 43:
02021 
02022 /* Line 1464 of yacc.c  */
02023 #line 344 "ppy.y"
02024     { (yyval.mtext) = NULL; ;}
02025     break;
02026 
02027   case 44:
02028 
02029 /* Line 1464 of yacc.c  */
02030 #line 345 "ppy.y"
02031     {
02032         for((yyval.mtext) = (yyvsp[(1) - (1)].mtext); (yyval.mtext) && (yyval.mtext)->prev; (yyval.mtext) = (yyval.mtext)->prev)
02033             ;
02034         ;}
02035     break;
02036 
02037   case 45:
02038 
02039 /* Line 1464 of yacc.c  */
02040 #line 351 "ppy.y"
02041     { (yyval.mtext) = (yyvsp[(1) - (1)].mtext); ;}
02042     break;
02043 
02044   case 46:
02045 
02046 /* Line 1464 of yacc.c  */
02047 #line 352 "ppy.y"
02048     { (yyval.mtext) = combine_mtext((yyvsp[(1) - (2)].mtext), (yyvsp[(2) - (2)].mtext)); ;}
02049     break;
02050 
02051   case 47:
02052 
02053 /* Line 1464 of yacc.c  */
02054 #line 355 "ppy.y"
02055     { (yyval.mtext) = new_mtext((yyvsp[(1) - (1)].cptr), 0, exp_text); ;}
02056     break;
02057 
02058   case 48:
02059 
02060 /* Line 1464 of yacc.c  */
02061 #line 356 "ppy.y"
02062     { (yyval.mtext) = new_mtext((yyvsp[(1) - (1)].cptr), 0, exp_text); ;}
02063     break;
02064 
02065   case 49:
02066 
02067 /* Line 1464 of yacc.c  */
02068 #line 357 "ppy.y"
02069     { (yyval.mtext) = new_mtext((yyvsp[(1) - (1)].cptr), 0, exp_text); ;}
02070     break;
02071 
02072   case 50:
02073 
02074 /* Line 1464 of yacc.c  */
02075 #line 358 "ppy.y"
02076     { (yyval.mtext) = new_mtext(NULL, 0, exp_concat); ;}
02077     break;
02078 
02079   case 51:
02080 
02081 /* Line 1464 of yacc.c  */
02082 #line 359 "ppy.y"
02083     {
02084         int mat = marg_index((yyvsp[(2) - (2)].cptr));
02085         if(mat < 0)
02086             ppy_error("Stringification identifier must be an argument parameter");
02087         else
02088             (yyval.mtext) = new_mtext(NULL, mat, exp_stringize);
02089         ;}
02090     break;
02091 
02092   case 52:
02093 
02094 /* Line 1464 of yacc.c  */
02095 #line 366 "ppy.y"
02096     {
02097         int mat = marg_index((yyvsp[(1) - (1)].cptr));
02098         if(mat >= 0)
02099             (yyval.mtext) = new_mtext(NULL, mat, exp_subst);
02100         else if((yyvsp[(1) - (1)].cptr))
02101             (yyval.mtext) = new_mtext((yyvsp[(1) - (1)].cptr), 0, exp_text);
02102         ;}
02103     break;
02104 
02105   case 53:
02106 
02107 /* Line 1464 of yacc.c  */
02108 #line 375 "ppy.y"
02109     { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = (yyvsp[(1) - (1)].sint); ;}
02110     break;
02111 
02112   case 54:
02113 
02114 /* Line 1464 of yacc.c  */
02115 #line 376 "ppy.y"
02116     { (yyval.cval).type = cv_uint;  (yyval.cval).val.ui = (yyvsp[(1) - (1)].uint); ;}
02117     break;
02118 
02119   case 55:
02120 
02121 /* Line 1464 of yacc.c  */
02122 #line 377 "ppy.y"
02123     { (yyval.cval).type = cv_slong; (yyval.cval).val.sl = (yyvsp[(1) - (1)].slong); ;}
02124     break;
02125 
02126   case 56:
02127 
02128 /* Line 1464 of yacc.c  */
02129 #line 378 "ppy.y"
02130     { (yyval.cval).type = cv_ulong; (yyval.cval).val.ul = (yyvsp[(1) - (1)].ulong); ;}
02131     break;
02132 
02133   case 57:
02134 
02135 /* Line 1464 of yacc.c  */
02136 #line 379 "ppy.y"
02137     { (yyval.cval).type = cv_sll;   (yyval.cval).val.sll = (yyvsp[(1) - (1)].sll); ;}
02138     break;
02139 
02140   case 58:
02141 
02142 /* Line 1464 of yacc.c  */
02143 #line 380 "ppy.y"
02144     { (yyval.cval).type = cv_ull;   (yyval.cval).val.ull = (yyvsp[(1) - (1)].ull); ;}
02145     break;
02146 
02147   case 59:
02148 
02149 /* Line 1464 of yacc.c  */
02150 #line 381 "ppy.y"
02151     { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[(2) - (2)].cptr)) != NULL; ;}
02152     break;
02153 
02154   case 60:
02155 
02156 /* Line 1464 of yacc.c  */
02157 #line 382 "ppy.y"
02158     { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = pplookup((yyvsp[(3) - (4)].cptr)) != NULL; ;}
02159     break;
02160 
02161   case 61:
02162 
02163 /* Line 1464 of yacc.c  */
02164 #line 383 "ppy.y"
02165     { (yyval.cval).type = cv_sint;  (yyval.cval).val.si = 0; ;}
02166     break;
02167 
02168   case 62:
02169 
02170 /* Line 1464 of yacc.c  */
02171 #line 384 "ppy.y"
02172     { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[(1) - (3)].cval)) || boolean(&(yyvsp[(3) - (3)].cval)); ;}
02173     break;
02174 
02175   case 63:
02176 
02177 /* Line 1464 of yacc.c  */
02178 #line 385 "ppy.y"
02179     { (yyval.cval).type = cv_sint; (yyval.cval).val.si = boolean(&(yyvsp[(1) - (3)].cval)) && boolean(&(yyvsp[(3) - (3)].cval)); ;}
02180     break;
02181 
02182   case 64:
02183 
02184 /* Line 1464 of yacc.c  */
02185 #line 386 "ppy.y"
02186     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), ==) ;}
02187     break;
02188 
02189   case 65:
02190 
02191 /* Line 1464 of yacc.c  */
02192 #line 387 "ppy.y"
02193     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), !=) ;}
02194     break;
02195 
02196   case 66:
02197 
02198 /* Line 1464 of yacc.c  */
02199 #line 388 "ppy.y"
02200     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  <) ;}
02201     break;
02202 
02203   case 67:
02204 
02205 /* Line 1464 of yacc.c  */
02206 #line 389 "ppy.y"
02207     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  >) ;}
02208     break;
02209 
02210   case 68:
02211 
02212 /* Line 1464 of yacc.c  */
02213 #line 390 "ppy.y"
02214     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), <=) ;}
02215     break;
02216 
02217   case 69:
02218 
02219 /* Line 1464 of yacc.c  */
02220 #line 391 "ppy.y"
02221     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), >=) ;}
02222     break;
02223 
02224   case 70:
02225 
02226 /* Line 1464 of yacc.c  */
02227 #line 392 "ppy.y"
02228     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  +) ;}
02229     break;
02230 
02231   case 71:
02232 
02233 /* Line 1464 of yacc.c  */
02234 #line 393 "ppy.y"
02235     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  -) ;}
02236     break;
02237 
02238   case 72:
02239 
02240 /* Line 1464 of yacc.c  */
02241 #line 394 "ppy.y"
02242     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  ^) ;}
02243     break;
02244 
02245   case 73:
02246 
02247 /* Line 1464 of yacc.c  */
02248 #line 395 "ppy.y"
02249     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  &) ;}
02250     break;
02251 
02252   case 74:
02253 
02254 /* Line 1464 of yacc.c  */
02255 #line 396 "ppy.y"
02256     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  |) ;}
02257     break;
02258 
02259   case 75:
02260 
02261 /* Line 1464 of yacc.c  */
02262 #line 397 "ppy.y"
02263     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  *) ;}
02264     break;
02265 
02266   case 76:
02267 
02268 /* Line 1464 of yacc.c  */
02269 #line 398 "ppy.y"
02270     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval),  /) ;}
02271     break;
02272 
02273   case 77:
02274 
02275 /* Line 1464 of yacc.c  */
02276 #line 399 "ppy.y"
02277     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), <<) ;}
02278     break;
02279 
02280   case 78:
02281 
02282 /* Line 1464 of yacc.c  */
02283 #line 400 "ppy.y"
02284     { promote_equal_size(&(yyvsp[(1) - (3)].cval), &(yyvsp[(3) - (3)].cval)); BIN_OP((yyval.cval), (yyvsp[(1) - (3)].cval), (yyvsp[(3) - (3)].cval), >>) ;}
02285     break;
02286 
02287   case 79:
02288 
02289 /* Line 1464 of yacc.c  */
02290 #line 401 "ppy.y"
02291     { (yyval.cval) =  (yyvsp[(2) - (2)].cval); ;}
02292     break;
02293 
02294   case 80:
02295 
02296 /* Line 1464 of yacc.c  */
02297 #line 402 "ppy.y"
02298     { UNARY_OP((yyval.cval), (yyvsp[(2) - (2)].cval), -) ;}
02299     break;
02300 
02301   case 81:
02302 
02303 /* Line 1464 of yacc.c  */
02304 #line 403 "ppy.y"
02305     { UNARY_OP((yyval.cval), (yyvsp[(2) - (2)].cval), ~) ;}
02306     break;
02307 
02308   case 82:
02309 
02310 /* Line 1464 of yacc.c  */
02311 #line 404 "ppy.y"
02312     { (yyval.cval).type = cv_sint; (yyval.cval).val.si = !boolean(&(yyvsp[(2) - (2)].cval)); ;}
02313     break;
02314 
02315   case 83:
02316 
02317 /* Line 1464 of yacc.c  */
02318 #line 405 "ppy.y"
02319     { (yyval.cval) =  (yyvsp[(2) - (3)].cval); ;}
02320     break;
02321 
02322   case 84:
02323 
02324 /* Line 1464 of yacc.c  */
02325 #line 406 "ppy.y"
02326     { (yyval.cval) = boolean(&(yyvsp[(1) - (5)].cval)) ? (yyvsp[(3) - (5)].cval) : (yyvsp[(5) - (5)].cval); ;}
02327     break;
02328 
02329 
02330 
02331 /* Line 1464 of yacc.c  */
02332 #line 2333 "ppy.tab.c"
02333       default: break;
02334     }
02335   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
02336 
02337   YYPOPSTACK (yylen);
02338   yylen = 0;
02339   YY_STACK_PRINT (yyss, yyssp);
02340 
02341   *++yyvsp = yyval;
02342 
02343   /* Now `shift' the result of the reduction.  Determine what state
02344      that goes to, based on the state we popped back to and the rule
02345      number reduced by.  */
02346 
02347   yyn = yyr1[yyn];
02348 
02349   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
02350   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
02351     yystate = yytable[yystate];
02352   else
02353     yystate = yydefgoto[yyn - YYNTOKENS];
02354 
02355   goto yynewstate;
02356 
02357 
02358 /*------------------------------------.
02359 | yyerrlab -- here on detecting error |
02360 `------------------------------------*/
02361 yyerrlab:
02362   /* If not already recovering from an error, report this error.  */
02363   if (!yyerrstatus)
02364     {
02365       ++yynerrs;
02366 #if ! YYERROR_VERBOSE
02367       yyerror (YY_("syntax error"));
02368 #else
02369       {
02370     YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
02371     if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
02372       {
02373         YYSIZE_T yyalloc = 2 * yysize;
02374         if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
02375           yyalloc = YYSTACK_ALLOC_MAXIMUM;
02376         if (yymsg != yymsgbuf)
02377           YYSTACK_FREE (yymsg);
02378         yymsg = (char *) YYSTACK_ALLOC (yyalloc);
02379         if (yymsg)
02380           yymsg_alloc = yyalloc;
02381         else
02382           {
02383         yymsg = yymsgbuf;
02384         yymsg_alloc = sizeof yymsgbuf;
02385           }
02386       }
02387 
02388     if (0 < yysize && yysize <= yymsg_alloc)
02389       {
02390         (void) yysyntax_error (yymsg, yystate, yychar);
02391         yyerror (yymsg);
02392       }
02393     else
02394       {
02395         yyerror (YY_("syntax error"));
02396         if (yysize != 0)
02397           goto yyexhaustedlab;
02398       }
02399       }
02400 #endif
02401     }
02402 
02403 
02404 
02405   if (yyerrstatus == 3)
02406     {
02407       /* If just tried and failed to reuse lookahead token after an
02408      error, discard it.  */
02409 
02410       if (yychar <= YYEOF)
02411     {
02412       /* Return failure if at end of input.  */
02413       if (yychar == YYEOF)
02414         YYABORT;
02415     }
02416       else
02417     {
02418       yydestruct ("Error: discarding",
02419               yytoken, &yylval);
02420       yychar = YYEMPTY;
02421     }
02422     }
02423 
02424   /* Else will try to reuse lookahead token after shifting the error
02425      token.  */
02426   goto yyerrlab1;
02427 
02428 
02429 /*---------------------------------------------------.
02430 | yyerrorlab -- error raised explicitly by YYERROR.  |
02431 `---------------------------------------------------*/
02432 yyerrorlab:
02433 
02434   /* Pacify compilers like GCC when the user code never invokes
02435      YYERROR and the label yyerrorlab therefore never appears in user
02436      code.  */
02437   if (/*CONSTCOND*/ 0)
02438      goto yyerrorlab;
02439 
02440   /* Do not reclaim the symbols of the rule which action triggered
02441      this YYERROR.  */
02442   YYPOPSTACK (yylen);
02443   yylen = 0;
02444   YY_STACK_PRINT (yyss, yyssp);
02445   yystate = *yyssp;
02446   goto yyerrlab1;
02447 
02448 
02449 /*-------------------------------------------------------------.
02450 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
02451 `-------------------------------------------------------------*/
02452 yyerrlab1:
02453   yyerrstatus = 3;  /* Each real token shifted decrements this.  */
02454 
02455   for (;;)
02456     {
02457       yyn = yypact[yystate];
02458       if (yyn != YYPACT_NINF)
02459     {
02460       yyn += YYTERROR;
02461       if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
02462         {
02463           yyn = yytable[yyn];
02464           if (0 < yyn)
02465         break;
02466         }
02467     }
02468 
02469       /* Pop the current state because it cannot handle the error token.  */
02470       if (yyssp == yyss)
02471     YYABORT;
02472 
02473 
02474       yydestruct ("Error: popping",
02475           yystos[yystate], yyvsp);
02476       YYPOPSTACK (1);
02477       yystate = *yyssp;
02478       YY_STACK_PRINT (yyss, yyssp);
02479     }
02480 
02481   *++yyvsp = yylval;
02482 
02483 
02484   /* Shift the error token.  */
02485   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
02486 
02487   yystate = yyn;
02488   goto yynewstate;
02489 
02490 
02491 /*-------------------------------------.
02492 | yyacceptlab -- YYACCEPT comes here.  |
02493 `-------------------------------------*/
02494 yyacceptlab:
02495   yyresult = 0;
02496   goto yyreturn;
02497 
02498 /*-----------------------------------.
02499 | yyabortlab -- YYABORT comes here.  |
02500 `-----------------------------------*/
02501 yyabortlab:
02502   yyresult = 1;
02503   goto yyreturn;
02504 
02505 #if !defined(yyoverflow) || YYERROR_VERBOSE
02506 /*-------------------------------------------------.
02507 | yyexhaustedlab -- memory exhaustion comes here.  |
02508 `-------------------------------------------------*/
02509 yyexhaustedlab:
02510   yyerror (YY_("memory exhausted"));
02511   yyresult = 2;
02512   /* Fall through.  */
02513 #endif
02514 
02515 yyreturn:
02516   if (yychar != YYEMPTY)
02517      yydestruct ("Cleanup: discarding lookahead",
02518          yytoken, &yylval);
02519   /* Do not reclaim the symbols of the rule which action triggered
02520      this YYABORT or YYACCEPT.  */
02521   YYPOPSTACK (yylen);
02522   YY_STACK_PRINT (yyss, yyssp);
02523   while (yyssp != yyss)
02524     {
02525       yydestruct ("Cleanup: popping",
02526           yystos[*yyssp], yyvsp);
02527       YYPOPSTACK (1);
02528     }
02529 #ifndef yyoverflow
02530   if (yyss != yyssa)
02531     YYSTACK_FREE (yyss);
02532 #endif
02533 #if YYERROR_VERBOSE
02534   if (yymsg != yymsgbuf)
02535     YYSTACK_FREE (yymsg);
02536 #endif
02537   /* Make sure YYID is used.  */
02538   return YYID (yyresult);
02539 }
02540 
02541 
02542 
02543 /* Line 1684 of yacc.c  */
02544 #line 409 "ppy.y"
02545 
02546 
02547 /*
02548  **************************************************************************
02549  * Support functions
02550  **************************************************************************
02551  */
02552 
02553 static void cast_to_sint(cval_t *v)
02554 {
02555     switch(v->type)
02556     {
02557     case cv_sint:   break;
02558     case cv_uint:   break;
02559     case cv_slong:  v->val.si = v->val.sl;  break;
02560     case cv_ulong:  v->val.si = v->val.ul;  break;
02561     case cv_sll:    v->val.si = v->val.sll; break;
02562     case cv_ull:    v->val.si = v->val.ull; break;
02563     }
02564     v->type = cv_sint;
02565 }
02566 
02567 static void cast_to_uint(cval_t *v)
02568 {
02569     switch(v->type)
02570     {
02571     case cv_sint:   break;
02572     case cv_uint:   break;
02573     case cv_slong:  v->val.ui = v->val.sl;  break;
02574     case cv_ulong:  v->val.ui = v->val.ul;  break;
02575     case cv_sll:    v->val.ui = v->val.sll; break;
02576     case cv_ull:    v->val.ui = v->val.ull; break;
02577     }
02578     v->type = cv_uint;
02579 }
02580 
02581 static void cast_to_slong(cval_t *v)
02582 {
02583     switch(v->type)
02584     {
02585     case cv_sint:   v->val.sl = v->val.si;  break;
02586     case cv_uint:   v->val.sl = v->val.ui;  break;
02587     case cv_slong:  break;
02588     case cv_ulong:  break;
02589     case cv_sll:    v->val.sl = v->val.sll; break;
02590     case cv_ull:    v->val.sl = v->val.ull; break;
02591     }
02592     v->type = cv_slong;
02593 }
02594 
02595 static void cast_to_ulong(cval_t *v)
02596 {
02597     switch(v->type)
02598     {
02599     case cv_sint:   v->val.ul = v->val.si;  break;
02600     case cv_uint:   v->val.ul = v->val.ui;  break;
02601     case cv_slong:  break;
02602     case cv_ulong:  break;
02603     case cv_sll:    v->val.ul = v->val.sll; break;
02604     case cv_ull:    v->val.ul = v->val.ull; break;
02605     }
02606     v->type = cv_ulong;
02607 }
02608 
02609 static void cast_to_sll(cval_t *v)
02610 {
02611     switch(v->type)
02612     {
02613     case cv_sint:   v->val.sll = v->val.si; break;
02614     case cv_uint:   v->val.sll = v->val.ui; break;
02615     case cv_slong:  v->val.sll = v->val.sl; break;
02616     case cv_ulong:  v->val.sll = v->val.ul; break;
02617     case cv_sll:    break;
02618     case cv_ull:    break;
02619     }
02620     v->type = cv_sll;
02621 }
02622 
02623 static void cast_to_ull(cval_t *v)
02624 {
02625     switch(v->type)
02626     {
02627     case cv_sint:   v->val.ull = v->val.si; break;
02628     case cv_uint:   v->val.ull = v->val.ui; break;
02629     case cv_slong:  v->val.ull = v->val.sl; break;
02630     case cv_ulong:  v->val.ull = v->val.ul; break;
02631     case cv_sll:    break;
02632     case cv_ull:    break;
02633     }
02634     v->type = cv_ull;
02635 }
02636 
02637 
02638 static void promote_equal_size(cval_t *v1, cval_t *v2)
02639 {
02640 #define cv_sizeof(v)    ((int)(v->type & SIZE_MASK))
02641     int s1 = cv_sizeof(v1);
02642     int s2 = cv_sizeof(v2);
02643 #undef cv_sizeof
02644 
02645     if(s1 == s2)
02646         return;
02647     else if(s1 > s2)
02648     {
02649         switch(v1->type)
02650         {
02651         case cv_sint:   cast_to_sint(v2); break;
02652         case cv_uint:   cast_to_uint(v2); break;
02653         case cv_slong:  cast_to_slong(v2); break;
02654         case cv_ulong:  cast_to_ulong(v2); break;
02655         case cv_sll:    cast_to_sll(v2); break;
02656         case cv_ull:    cast_to_ull(v2); break;
02657         }
02658     }
02659     else
02660     {
02661         switch(v2->type)
02662         {
02663         case cv_sint:   cast_to_sint(v1); break;
02664         case cv_uint:   cast_to_uint(v1); break;
02665         case cv_slong:  cast_to_slong(v1); break;
02666         case cv_ulong:  cast_to_ulong(v1); break;
02667         case cv_sll:    cast_to_sll(v1); break;
02668         case cv_ull:    cast_to_ull(v1); break;
02669         }
02670     }
02671 }
02672 
02673 
02674 static int boolean(cval_t *v)
02675 {
02676     switch(v->type)
02677     {
02678     case cv_sint:   return v->val.si != (int)0;
02679     case cv_uint:   return v->val.ui != (unsigned int)0;
02680     case cv_slong:  return v->val.sl != (long)0;
02681     case cv_ulong:  return v->val.ul != (unsigned long)0;
02682     case cv_sll:    return v->val.sll != (wrc_sll_t)0;
02683     case cv_ull:    return v->val.ull != (wrc_ull_t)0;
02684     }
02685     return 0;
02686 }
02687 
02688 static marg_t *new_marg(char *str, def_arg_t type)
02689 {
02690     marg_t *ma = pp_xmalloc(sizeof(marg_t));
02691     if(!ma)
02692         return NULL;
02693     ma->arg = str;
02694     ma->type = type;
02695     ma->nnl = 0;
02696     return ma;
02697 }
02698 
02699 static marg_t *add_new_marg(char *str, def_arg_t type)
02700 {
02701     marg_t **new_macro_args;
02702     marg_t *ma;
02703     if(!str)
02704         return NULL;
02705     new_macro_args = pp_xrealloc(macro_args, (nmacro_args+1) * sizeof(macro_args[0]));
02706     if(!new_macro_args)
02707         return NULL;
02708     macro_args = new_macro_args;
02709     ma = new_marg(str, type);
02710     if(!ma)
02711         return NULL;
02712     macro_args[nmacro_args] = ma;
02713     nmacro_args++;
02714     return ma;
02715 }
02716 
02717 static int marg_index(char *id)
02718 {
02719     int t;
02720     if(!id)
02721         return -1;
02722     for(t = 0; t < nmacro_args; t++)
02723     {
02724         if(!strcmp(id, macro_args[t]->arg))
02725             break;
02726     }
02727     return t < nmacro_args ? t : -1;
02728 }
02729 
02730 static mtext_t *new_mtext(char *str, int idx, def_exp_t type)
02731 {
02732     mtext_t *mt = pp_xmalloc(sizeof(mtext_t));
02733     if(!mt)
02734         return NULL;
02735     if(str == NULL)
02736         mt->subst.argidx = idx;
02737     else
02738         mt->subst.text = str;
02739     mt->type = type;
02740     mt->next = mt->prev = NULL;
02741     return mt;
02742 }
02743 
02744 static mtext_t *combine_mtext(mtext_t *tail, mtext_t *mtp)
02745 {
02746     if(!tail)
02747         return mtp;
02748 
02749     if(!mtp)
02750         return tail;
02751 
02752     if(tail->type == exp_text && mtp->type == exp_text)
02753     {
02754         char *new_text;
02755         new_text = pp_xrealloc(tail->subst.text, strlen(tail->subst.text)+strlen(mtp->subst.text)+1);
02756         if(!new_text)
02757             return mtp;
02758         tail->subst.text = new_text;
02759         strcat(tail->subst.text, mtp->subst.text);
02760         free(mtp->subst.text);
02761         free(mtp);
02762         return tail;
02763     }
02764 
02765     if(tail->type == exp_concat && mtp->type == exp_concat)
02766     {
02767         free(mtp);
02768         return tail;
02769     }
02770 
02771     if(tail->type == exp_concat && mtp->type == exp_text)
02772     {
02773         int len = strlen(mtp->subst.text);
02774         while(len)
02775         {
02776 /* FIXME: should delete space from head of string */
02777             if(isspace(mtp->subst.text[len-1] & 0xff))
02778                 mtp->subst.text[--len] = '\0';
02779             else
02780                 break;
02781         }
02782 
02783         if(!len)
02784         {
02785             free(mtp->subst.text);
02786             free(mtp);
02787             return tail;
02788         }
02789     }
02790 
02791     if(tail->type == exp_text && mtp->type == exp_concat)
02792     {
02793         int len = strlen(tail->subst.text);
02794         while(len)
02795         {
02796             if(isspace(tail->subst.text[len-1] & 0xff))
02797                 tail->subst.text[--len] = '\0';
02798             else
02799                 break;
02800         }
02801 
02802         if(!len)
02803         {
02804             mtp->prev = tail->prev;
02805             mtp->next = tail->next;
02806             if(tail->prev)
02807                 tail->prev->next = mtp;
02808             free(tail->subst.text);
02809             free(tail);
02810             return mtp;
02811         }
02812     }
02813 
02814     tail->next = mtp;
02815     mtp->prev = tail;
02816 
02817     return mtp;
02818 }
02819 
02820 static char *merge_text(char *s1, char *s2)
02821 {
02822     int l1;
02823     int l2;
02824     char *snew;
02825     if(!s1)
02826         return s2;
02827     if(!s2)
02828         return s1;
02829     l1 = strlen(s1);
02830     l2 = strlen(s2);
02831     snew = pp_xrealloc(s1, l1+l2+1);
02832     if(!snew)
02833     {
02834         free(s2);
02835         return s1;
02836     }
02837     s1 = snew;
02838     memcpy(s1+l1, s2, l2+1);
02839     free(s2);
02840     return s1;
02841 }
02842 

Generated on Mon May 28 2012 04:37:52 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.