Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenppy.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
1.7.6.1
|