1 /* A Bison parser, made by GNU Bison 1.875c. */ 2 3 /* Skeleton parser for Yacc-like parsing with Bison, 4 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 2, or (at your option) 9 any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; if not, write to the Free Software 18 Foundation, Inc., 59 Temple Place - Suite 330, 19 Boston, MA 02111-1307, USA. */ 20 21 /* As a special exception, when this file is copied by Bison into a 22 Bison output file, you may use that output file without restriction. 23 This special exception was added by the Free Software Foundation 24 in version 1.24 of Bison. */ 25 26 /* Written by Richard Stallman by simplifying the original so called 27 ``semantic'' parser. */ 28 29 /* All symbols defined below should begin with yy or YY, to avoid 30 infringing on user name space. This should be done even for local 31 variables, as they might otherwise be expanded by user macros. 32 There are some unavoidable exceptions within include files to 33 define necessary library symbols; they are noted "INFRINGES ON 34 USER NAME SPACE" below. */ 35 36 /* Identify Bison output. */ 37 #define YYBISON 1 38 39 /* Skeleton name. */ 40 #define YYSKELETON_NAME "yacc.c" 41 42 /* Pure parsers. */ 43 #define YYPURE 0 44 45 /* Using locations. */ 46 #define YYLSP_NEEDED 0 47 48 49 50 /* Tokens. */ 51 #ifndef YYTOKENTYPE 52 # define YYTOKENTYPE 53 /* Put the tokens into the symbol table, so that GDB and other debuggers 54 know about them. */ 55 enum yytokentype { 56 INT = 258, 57 FLOAT = 259, 58 STRING = 260, 59 NAME = 261, 60 TYPENAME = 262, 61 NAME_OR_INT = 263, 62 STRUCT = 264, 63 CLASS = 265, 64 UNION = 266, 65 ENUM = 267, 66 SIZEOF = 268, 67 UNSIGNED = 269, 68 COLONCOLON = 270, 69 TEMPLATE = 271, 70 ERROR = 272, 71 SIGNED_KEYWORD = 273, 72 LONG = 274, 73 SHORT = 275, 74 INT_KEYWORD = 276, 75 CONST_KEYWORD = 277, 76 VOLATILE_KEYWORD = 278, 77 DOUBLE_KEYWORD = 279, 78 VARIABLE = 280, 79 ASSIGN_MODIFY = 281, 80 TRUEKEYWORD = 282, 81 FALSEKEYWORD = 283, 82 ABOVE_COMMA = 284, 83 OROR = 285, 84 ANDAND = 286, 85 NOTEQUAL = 287, 86 EQUAL = 288, 87 GEQ = 289, 88 LEQ = 290, 89 RSH = 291, 90 LSH = 292, 91 DECREMENT = 293, 92 INCREMENT = 294, 93 UNARY = 295, 94 ARROW = 296, 95 BLOCKNAME = 297, 96 FILENAME = 298 97 }; 98 #endif 99 #define INT 258 100 #define FLOAT 259 101 #define STRING 260 102 #define NAME 261 103 #define TYPENAME 262 104 #define NAME_OR_INT 263 105 #define STRUCT 264 106 #define CLASS 265 107 #define UNION 266 108 #define ENUM 267 109 #define SIZEOF 268 110 #define UNSIGNED 269 111 #define COLONCOLON 270 112 #define TEMPLATE 271 113 #define ERROR 272 114 #define SIGNED_KEYWORD 273 115 #define LONG 274 116 #define SHORT 275 117 #define INT_KEYWORD 276 118 #define CONST_KEYWORD 277 119 #define VOLATILE_KEYWORD 278 120 #define DOUBLE_KEYWORD 279 121 #define VARIABLE 280 122 #define ASSIGN_MODIFY 281 123 #define TRUEKEYWORD 282 124 #define FALSEKEYWORD 283 125 #define ABOVE_COMMA 284 126 #define OROR 285 127 #define ANDAND 286 128 #define NOTEQUAL 287 129 #define EQUAL 288 130 #define GEQ 289 131 #define LEQ 290 132 #define RSH 291 133 #define LSH 292 134 #define DECREMENT 293 135 #define INCREMENT 294 136 #define UNARY 295 137 #define ARROW 296 138 #define BLOCKNAME 297 139 #define FILENAME 298 140 141 142 143 144 /* Copy the first part of user declarations. */ 145 #line 39 "c-exp.y" 146 147 148 #include "defs.h" 149 #include "gdb_string.h" 150 #include <ctype.h> 151 #include "expression.h" 152 #include "value.h" 153 #include "parser-defs.h" 154 #include "language.h" 155 #include "c-lang.h" 156 #include "bfd.h" /* Required by objfiles.h. */ 157 #include "symfile.h" /* Required by objfiles.h. */ 158 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */ 159 #include "charset.h" 160 #include "block.h" 161 #include "cp-support.h" 162 163 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, etc), 164 as well as gratuitiously global symbol names, so we can have multiple 165 yacc generated parsers in gdb. Note that these are only the variables 166 produced by yacc. If other parser generators (bison, byacc, etc) produce 167 additional global names that conflict at link time, then those parser 168 generators need to be fixed instead of adding those names to this list. */ 169 170 #define yymaxdepth c_maxdepth 171 #define yyparse c_parse 172 #define yylex c_lex 173 #define yyerror c_error 174 #define yylval c_lval 175 #define yychar c_char 176 #define yydebug c_debug 177 #define yypact c_pact 178 #define yyr1 c_r1 179 #define yyr2 c_r2 180 #define yydef c_def 181 #define yychk c_chk 182 #define yypgo c_pgo 183 #define yyact c_act 184 #define yyexca c_exca 185 #define yyerrflag c_errflag 186 #define yynerrs c_nerrs 187 #define yyps c_ps 188 #define yypv c_pv 189 #define yys c_s 190 #define yy_yys c_yys 191 #define yystate c_state 192 #define yytmp c_tmp 193 #define yyv c_v 194 #define yy_yyv c_yyv 195 #define yyval c_val 196 #define yylloc c_lloc 197 #define yyreds c_reds /* With YYDEBUG defined */ 198 #define yytoks c_toks /* With YYDEBUG defined */ 199 #define yyname c_name /* With YYDEBUG defined */ 200 #define yyrule c_rule /* With YYDEBUG defined */ 201 #define yylhs c_yylhs 202 #define yylen c_yylen 203 #define yydefred c_yydefred 204 #define yydgoto c_yydgoto 205 #define yysindex c_yysindex 206 #define yyrindex c_yyrindex 207 #define yygindex c_yygindex 208 #define yytable c_yytable 209 #define yycheck c_yycheck 210 211 #ifndef YYDEBUG 212 #define YYDEBUG 1 /* Default to yydebug support */ 213 #endif 214 215 #define YYFPRINTF parser_fprintf 216 217 int yyparse (void); 218 219 static int yylex (void); 220 221 void yyerror (char *); 222 223 224 225 /* Enabling traces. */ 226 #ifndef YYDEBUG 227 # define YYDEBUG 0 228 #endif 229 230 /* Enabling verbose error messages. */ 231 #ifdef YYERROR_VERBOSE 232 # undef YYERROR_VERBOSE 233 # define YYERROR_VERBOSE 1 234 #else 235 # define YYERROR_VERBOSE 0 236 #endif 237 238 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED) 239 #line 123 "c-exp.y" 240 typedef union YYSTYPE { 241 LONGEST lval; 242 struct { 243 LONGEST val; 244 struct type *type; 245 } typed_val_int; 246 struct { 247 DOUBLEST dval; 248 struct type *type; 249 } typed_val_float; 250 struct symbol *sym; 251 struct type *tval; 252 struct stoken sval; 253 struct ttype tsym; 254 struct symtoken ssym; 255 int voidval; 256 struct block *bval; 257 enum exp_opcode opcode; 258 struct internalvar *ivar; 259 260 struct type **tvec; 261 int *ivec; 262 } YYSTYPE; 263 /* Line 191 of yacc.c. */ 264 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 265 # define YYSTYPE_IS_DECLARED 1 266 # define YYSTYPE_IS_TRIVIAL 1 267 #endif 268 269 270 271 /* Copy the second part of user declarations. */ 272 #line 147 "c-exp.y" 273 274 /* YYSTYPE gets defined by %union */ 275 static int parse_number (char *, int, int, YYSTYPE *); 276 277 278 /* Line 214 of yacc.c. */ 279 280 #if ! defined (yyoverflow) || YYERROR_VERBOSE 281 282 # ifndef YYFREE 283 # define YYFREE free 284 # endif 285 # ifndef YYMALLOC 286 # define YYMALLOC xmalloc 287 # endif 288 289 /* The parser invokes alloca or xmalloc; define the necessary symbols. */ 290 291 # ifdef YYSTACK_USE_ALLOCA 292 # if YYSTACK_USE_ALLOCA 293 # define YYSTACK_ALLOC alloca 294 # endif 295 # else 296 # if defined (alloca) || defined (_ALLOCA_H) 297 # define YYSTACK_ALLOC alloca 298 # else 299 # ifdef __GNUC__ 300 # define YYSTACK_ALLOC __builtin_alloca 301 # endif 302 # endif 303 # endif 304 305 # ifdef YYSTACK_ALLOC 306 /* Pacify GCC's `empty if-body' warning. */ 307 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) 308 # else 309 # if defined (__STDC__) || defined (__cplusplus) 310 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 311 # define YYSIZE_T size_t 312 # endif 313 # define YYSTACK_ALLOC YYMALLOC 314 # define YYSTACK_FREE YYFREE 315 # endif 316 #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */ 317 318 319 #if (! defined (yyoverflow) \ 320 && (! defined (__cplusplus) \ 321 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL))) 322 323 /* A type that is properly aligned for any stack member. */ 324 union yyalloc 325 { 326 short yyss; 327 YYSTYPE yyvs; 328 }; 329 330 /* The size of the maximum gap between one aligned stack and the next. */ 331 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 332 333 /* The size of an array large to enough to hold all stacks, each with 334 N elements. */ 335 # define YYSTACK_BYTES(N) \ 336 ((N) * (sizeof (short) + sizeof (YYSTYPE)) \ 337 + YYSTACK_GAP_MAXIMUM) 338 339 /* Copy COUNT objects from FROM to TO. The source and destination do 340 not overlap. */ 341 # ifndef YYCOPY 342 # if defined (__GNUC__) && 1 < __GNUC__ 343 # define YYCOPY(To, From, Count) \ 344 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 345 # else 346 # define YYCOPY(To, From, Count) \ 347 do \ 348 { \ 349 register YYSIZE_T yyi; \ 350 for (yyi = 0; yyi < (Count); yyi++) \ 351 (To)[yyi] = (From)[yyi]; \ 352 } \ 353 while (0) 354 # endif 355 # endif 356 357 /* Relocate STACK from its old location to the new one. The 358 local variables YYSIZE and YYSTACKSIZE give the old and new number of 359 elements in the stack, and YYPTR gives the new location of the 360 stack. Advance YYPTR to a properly aligned location for the next 361 stack. */ 362 # define YYSTACK_RELOCATE(Stack) \ 363 do \ 364 { \ 365 YYSIZE_T yynewbytes; \ 366 YYCOPY (&yyptr->Stack, Stack, yysize); \ 367 Stack = &yyptr->Stack; \ 368 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 369 yyptr += yynewbytes / sizeof (*yyptr); \ 370 } \ 371 while (0) 372 373 #endif 374 375 #if defined (__STDC__) || defined (__cplusplus) 376 typedef signed char yysigned_char; 377 #else 378 typedef short yysigned_char; 379 #endif 380 381 /* YYFINAL -- State number of the termination state. */ 382 #define YYFINAL 94 383 /* YYLAST -- Last index in YYTABLE. */ 384 #define YYLAST 804 385 386 /* YYNTOKENS -- Number of terminals. */ 387 #define YYNTOKENS 68 388 /* YYNNTS -- Number of nonterminals. */ 389 #define YYNNTS 31 390 /* YYNRULES -- Number of rules. */ 391 #define YYNRULES 159 392 /* YYNRULES -- Number of states. */ 393 #define YYNSTATES 242 394 395 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 396 #define YYUNDEFTOK 2 397 #define YYMAXUTOK 298 398 399 #define YYTRANSLATE(YYX) \ 400 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 401 402 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 403 static const unsigned char yytranslate[] = 404 { 405 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 406 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 407 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 408 2, 2, 2, 61, 2, 2, 2, 51, 37, 2, 409 57, 64, 49, 47, 29, 48, 55, 50, 2, 2, 410 2, 2, 2, 2, 2, 2, 2, 2, 67, 2, 411 40, 31, 41, 32, 46, 2, 2, 2, 2, 2, 412 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 413 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 414 2, 56, 2, 63, 36, 2, 2, 2, 2, 2, 415 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 416 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 417 2, 2, 2, 65, 35, 66, 62, 2, 2, 2, 418 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 419 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 420 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 421 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 422 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 423 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 424 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 425 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 426 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 427 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 428 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 429 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 430 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 431 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 432 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 433 25, 26, 27, 28, 30, 33, 34, 38, 39, 42, 434 43, 44, 45, 52, 53, 54, 58, 59, 60 435 }; 436 437 #if YYDEBUG 438 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 439 YYRHS. */ 440 static const unsigned short yyprhs[] = 441 { 442 0, 0, 3, 5, 7, 9, 11, 15, 18, 21, 443 24, 27, 30, 33, 36, 39, 42, 45, 49, 53, 444 58, 62, 66, 71, 76, 77, 83, 85, 86, 88, 445 92, 94, 98, 103, 108, 112, 116, 120, 124, 128, 446 132, 136, 140, 144, 148, 152, 156, 160, 164, 168, 447 172, 176, 180, 184, 188, 194, 198, 202, 204, 206, 448 208, 210, 212, 217, 219, 221, 223, 225, 227, 231, 449 235, 239, 244, 246, 249, 251, 254, 256, 257, 261, 450 263, 265, 267, 268, 270, 273, 275, 278, 280, 284, 451 287, 289, 292, 294, 297, 301, 304, 308, 310, 314, 452 316, 318, 320, 322, 325, 329, 332, 336, 340, 344, 453 347, 350, 354, 359, 363, 367, 372, 376, 381, 385, 454 390, 393, 397, 400, 404, 407, 411, 413, 416, 419, 455 422, 425, 428, 431, 433, 436, 438, 444, 447, 450, 456 452, 456, 458, 460, 462, 464, 466, 470, 472, 477, 457 480, 483, 485, 487, 489, 491, 493, 495, 497, 499 458 }; 459 460 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 461 static const yysigned_char yyrhs[] = 462 { 463 69, 0, -1, 71, -1, 70, -1, 89, -1, 72, 464 -1, 71, 29, 72, -1, 49, 72, -1, 37, 72, 465 -1, 48, 72, -1, 61, 72, -1, 62, 72, -1, 466 53, 72, -1, 52, 72, -1, 72, 53, -1, 72, 467 52, -1, 13, 72, -1, 72, 58, 97, -1, 72, 468 58, 79, -1, 72, 58, 49, 72, -1, 72, 55, 469 97, -1, 72, 55, 79, -1, 72, 55, 49, 72, 470 -1, 72, 56, 71, 63, -1, -1, 72, 57, 73, 471 75, 64, -1, 65, -1, -1, 72, -1, 75, 29, 472 72, -1, 66, -1, 74, 75, 76, -1, 74, 89, 473 76, 72, -1, 57, 89, 64, 72, -1, 57, 71, 474 64, -1, 72, 46, 72, -1, 72, 49, 72, -1, 475 72, 50, 72, -1, 72, 51, 72, -1, 72, 47, 476 72, -1, 72, 48, 72, -1, 72, 45, 72, -1, 477 72, 44, 72, -1, 72, 39, 72, -1, 72, 38, 478 72, -1, 72, 43, 72, -1, 72, 42, 72, -1, 479 72, 40, 72, -1, 72, 41, 72, -1, 72, 37, 480 72, -1, 72, 36, 72, -1, 72, 35, 72, -1, 481 72, 34, 72, -1, 72, 33, 72, -1, 72, 32, 482 72, 67, 72, -1, 72, 31, 72, -1, 72, 26, 483 72, -1, 3, -1, 8, -1, 4, -1, 78, -1, 484 25, -1, 13, 57, 89, 64, -1, 5, -1, 27, 485 -1, 28, -1, 59, -1, 60, -1, 77, 15, 97, 486 -1, 77, 15, 97, -1, 90, 15, 97, -1, 90, 487 15, 62, 97, -1, 79, -1, 15, 97, -1, 98, 488 -1, 46, 6, -1, 96, -1, -1, 81, 80, 81, 489 -1, 82, -1, 96, -1, 83, -1, -1, 49, -1, 490 49, 85, -1, 37, -1, 37, 85, -1, 86, -1, 491 57, 85, 64, -1, 86, 87, -1, 87, -1, 86, 492 88, -1, 88, -1, 56, 63, -1, 56, 3, 63, 493 -1, 57, 64, -1, 57, 93, 64, -1, 94, -1, 494 90, 15, 49, -1, 7, -1, 21, -1, 19, -1, 495 20, -1, 19, 21, -1, 19, 18, 21, -1, 19, 496 18, -1, 18, 19, 21, -1, 14, 19, 21, -1, 497 19, 14, 21, -1, 19, 14, -1, 19, 19, -1, 498 19, 19, 21, -1, 19, 19, 18, 21, -1, 19, 499 19, 18, -1, 18, 19, 19, -1, 18, 19, 19, 500 21, -1, 14, 19, 19, -1, 14, 19, 19, 21, 501 -1, 19, 19, 14, -1, 19, 19, 14, 21, -1, 502 20, 21, -1, 20, 18, 21, -1, 20, 18, -1, 503 14, 20, 21, -1, 20, 14, -1, 20, 14, 21, 504 -1, 24, -1, 19, 24, -1, 9, 97, -1, 10, 505 97, -1, 11, 97, -1, 12, 97, -1, 14, 92, 506 -1, 14, -1, 18, 92, -1, 18, -1, 16, 97, 507 40, 89, 41, -1, 83, 90, -1, 90, 83, -1, 508 91, -1, 90, 15, 97, -1, 7, -1, 21, -1, 509 19, -1, 20, -1, 89, -1, 93, 29, 89, -1, 510 90, -1, 94, 84, 85, 84, -1, 22, 23, -1, 511 23, 22, -1, 95, -1, 22, -1, 23, -1, 6, 512 -1, 59, -1, 7, -1, 8, -1, 6, -1, 59, 513 -1 514 }; 515 516 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 517 static const unsigned short yyrline[] = 518 { 519 0, 230, 230, 231, 234, 241, 242, 247, 251, 255, 520 259, 263, 267, 271, 275, 279, 283, 287, 293, 301, 521 305, 311, 319, 323, 330, 327, 337, 341, 344, 348, 522 352, 355, 362, 368, 374, 380, 384, 388, 392, 396, 523 400, 404, 408, 412, 416, 420, 424, 428, 432, 436, 524 440, 444, 448, 452, 456, 460, 464, 470, 477, 488, 525 495, 498, 502, 510, 535, 542, 551, 559, 565, 576, 526 592, 606, 631, 632, 666, 723, 729, 730, 733, 736, 527 737, 741, 742, 745, 747, 749, 751, 753, 756, 758, 528 763, 770, 772, 776, 778, 782, 784, 796, 797, 802, 529 804, 806, 808, 810, 812, 814, 816, 818, 820, 822, 530 824, 826, 828, 830, 832, 834, 836, 838, 840, 842, 531 844, 846, 848, 850, 852, 854, 856, 858, 860, 863, 532 866, 869, 872, 874, 876, 878, 883, 887, 889, 891, 533 939, 964, 965, 971, 977, 986, 991, 998, 999, 1003, 534 1004, 1007, 1011, 1013, 1017, 1018, 1019, 1020, 1023, 1024 535 }; 536 #endif 537 538 #if YYDEBUG || YYERROR_VERBOSE 539 /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 540 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 541 static const char *const yytname[] = 542 { 543 "$end", "error", "$undefined", "INT", "FLOAT", "STRING", "NAME", 544 "TYPENAME", "NAME_OR_INT", "STRUCT", "CLASS", "UNION", "ENUM", "SIZEOF", 545 "UNSIGNED", "COLONCOLON", "TEMPLATE", "ERROR", "SIGNED_KEYWORD", "LONG", 546 "SHORT", "INT_KEYWORD", "CONST_KEYWORD", "VOLATILE_KEYWORD", 547 "DOUBLE_KEYWORD", "VARIABLE", "ASSIGN_MODIFY", "TRUEKEYWORD", 548 "FALSEKEYWORD", "','", "ABOVE_COMMA", "'='", "'?'", "OROR", "ANDAND", 549 "'|'", "'^'", "'&'", "NOTEQUAL", "EQUAL", "'<'", "'>'", "GEQ", "LEQ", 550 "RSH", "LSH", "'@'", "'+'", "'-'", "'*'", "'/'", "'%'", "DECREMENT", 551 "INCREMENT", "UNARY", "'.'", "'['", "'('", "ARROW", "BLOCKNAME", 552 "FILENAME", "'!'", "'~'", "']'", "')'", "'{'", "'}'", "':'", "$accept", 553 "start", "type_exp", "exp1", "exp", "@1", "lcurly", "arglist", "rcurly", 554 "block", "variable", "qualified_name", "space_identifier", 555 "const_or_volatile", "cv_with_space_id", 556 "const_or_volatile_or_space_identifier_noopt", 557 "const_or_volatile_or_space_identifier", "abs_decl", "direct_abs_decl", 558 "array_mod", "func_mod", "type", "typebase", "qualified_type", 559 "typename", "nonempty_typelist", "ptype", "const_and_volatile", 560 "const_or_volatile_noopt", "name", "name_not_typename", 0 561 }; 562 #endif 563 564 # ifdef YYPRINT 565 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 566 token YYLEX-NUM. */ 567 static const unsigned short yytoknum[] = 568 { 569 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 570 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 571 275, 276, 277, 278, 279, 280, 281, 282, 283, 44, 572 284, 61, 63, 285, 286, 124, 94, 38, 287, 288, 573 60, 62, 289, 290, 291, 292, 64, 43, 45, 42, 574 47, 37, 293, 294, 295, 46, 91, 40, 296, 297, 575 298, 33, 126, 93, 41, 123, 125, 58 576 }; 577 # endif 578 579 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 580 static const unsigned char yyr1[] = 581 { 582 0, 68, 69, 69, 70, 71, 71, 72, 72, 72, 583 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 584 72, 72, 72, 72, 73, 72, 74, 75, 75, 75, 585 76, 72, 72, 72, 72, 72, 72, 72, 72, 72, 586 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 587 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 588 72, 72, 72, 72, 72, 72, 77, 77, 77, 78, 589 79, 79, 78, 78, 78, 80, 81, 81, 82, 83, 590 83, 84, 84, 85, 85, 85, 85, 85, 86, 86, 591 86, 86, 86, 87, 87, 88, 88, 89, 89, 90, 592 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 593 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 594 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 595 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 596 91, 92, 92, 92, 92, 93, 93, 94, 94, 95, 597 95, 96, 96, 96, 97, 97, 97, 97, 98, 98 598 }; 599 600 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 601 static const unsigned char yyr2[] = 602 { 603 0, 2, 1, 1, 1, 1, 3, 2, 2, 2, 604 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 605 3, 3, 4, 4, 0, 5, 1, 0, 1, 3, 606 1, 3, 4, 4, 3, 3, 3, 3, 3, 3, 607 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 608 3, 3, 3, 3, 5, 3, 3, 1, 1, 1, 609 1, 1, 4, 1, 1, 1, 1, 1, 3, 3, 610 3, 4, 1, 2, 1, 2, 1, 0, 3, 1, 611 1, 1, 0, 1, 2, 1, 2, 1, 3, 2, 612 1, 2, 1, 2, 3, 2, 3, 1, 3, 1, 613 1, 1, 1, 2, 3, 2, 3, 3, 3, 2, 614 2, 3, 4, 3, 3, 4, 3, 4, 3, 4, 615 2, 3, 2, 3, 2, 3, 1, 2, 2, 2, 616 2, 2, 2, 1, 2, 1, 5, 2, 2, 1, 617 3, 1, 1, 1, 1, 1, 3, 1, 4, 2, 618 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 619 }; 620 621 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 622 STATE-NUM when YYTABLE doesn't specify something else to do. Zero 623 means the default is an error. */ 624 static const unsigned char yydefact[] = 625 { 626 77, 57, 59, 63, 158, 99, 58, 0, 0, 0, 627 0, 77, 133, 0, 0, 135, 101, 102, 100, 152, 628 153, 126, 61, 64, 65, 77, 77, 77, 77, 77, 629 77, 159, 67, 77, 77, 26, 0, 3, 2, 5, 630 27, 0, 60, 72, 0, 79, 77, 4, 147, 139, 631 97, 151, 80, 74, 154, 156, 157, 155, 128, 129, 632 130, 131, 77, 16, 77, 141, 143, 144, 142, 132, 633 73, 0, 143, 144, 134, 109, 105, 110, 103, 127, 634 124, 122, 120, 149, 150, 8, 9, 7, 13, 12, 635 0, 0, 10, 11, 1, 77, 77, 77, 77, 77, 636 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 637 77, 77, 77, 77, 77, 77, 77, 77, 15, 14, 638 77, 77, 24, 77, 28, 0, 0, 0, 0, 77, 639 137, 0, 138, 81, 0, 0, 0, 116, 107, 123, 640 77, 114, 106, 108, 104, 118, 113, 111, 125, 121, 641 34, 77, 6, 56, 55, 0, 53, 52, 51, 50, 642 49, 44, 43, 47, 48, 46, 45, 42, 41, 35, 643 39, 40, 36, 37, 38, 156, 77, 21, 20, 0, 644 27, 77, 18, 17, 77, 30, 31, 77, 69, 75, 645 78, 76, 0, 98, 0, 70, 85, 83, 0, 77, 646 82, 87, 90, 92, 62, 117, 0, 147, 115, 119, 647 112, 33, 77, 22, 23, 0, 19, 29, 32, 140, 648 71, 86, 84, 0, 93, 95, 0, 145, 0, 148, 649 77, 89, 91, 136, 0, 54, 25, 94, 88, 77, 650 96, 146 651 }; 652 653 /* YYDEFGOTO[NTERM-NUM]. */ 654 static const short yydefgoto[] = 655 { 656 -1, 36, 37, 90, 39, 180, 40, 125, 186, 41, 657 42, 43, 129, 44, 45, 46, 134, 200, 201, 202, 658 203, 227, 64, 49, 69, 228, 50, 51, 52, 195, 659 53 660 }; 661 662 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 663 STATE-NUM. */ 664 #define YYPACT_NINF -101 665 static const short yypact[] = 666 { 667 320, -101, -101, -101, -101, -101, -101, 30, 30, 30, 668 30, 383, 45, 30, 30, 200, 152, 36, -101, -11, 669 17, -101, -101, -101, -101, 320, 320, 320, 320, 320, 670 320, 29, -101, 320, 320, -101, 84, -101, 39, 597, 671 257, 56, -101, -101, 57, -101, 172, -101, 68, -101, 672 55, -101, 67, -101, -101, -101, -101, -101, -101, -101, 673 -101, -101, 320, 460, 87, -101, 40, 95, -101, -101, 674 -101, 99, 190, -101, -101, 156, 159, 223, -101, -101, 675 164, 176, -101, -101, -101, 460, 460, 460, 460, 460, 676 -15, 158, 460, 460, -101, 320, 320, 320, 320, 320, 677 320, 320, 320, 320, 320, 320, 320, 320, 320, 320, 678 320, 320, 320, 320, 320, 320, 320, 320, -101, -101, 679 194, 320, -101, 531, 597, -19, 160, 30, 218, -1, 680 71, 20, -101, -101, -14, 171, 26, 215, -101, -101, 681 172, 217, -101, -101, -101, 221, 224, -101, -101, -101, 682 -101, 320, 597, 597, 597, 560, 622, 646, 669, 691, 683 712, 731, 731, 746, 746, 746, 746, 240, 240, 303, 684 366, 366, 460, 460, 460, 83, 320, -101, -101, -18, 685 257, 320, -101, -101, 320, -101, -101, 320, 231, -101, 686 -101, -101, 30, -101, 30, 210, 118, 63, 4, 472, 687 2, 112, -101, -101, 446, -101, 206, 85, -101, -101, 688 -101, 460, 320, 460, -101, -13, 460, 597, 460, -101, 689 -101, -101, -101, 185, -101, -101, 186, -101, -9, -101, 690 114, -101, -101, -101, 11, 526, -101, -101, -101, 172, 691 -101, -101 692 }; 693 694 /* YYPGOTO[NTERM-NUM]. */ 695 static const short yypgoto[] = 696 { 697 -101, -101, -101, 6, 47, -101, -101, 69, 126, -101, 698 -101, -67, -101, 125, -101, -35, 58, -100, -101, 54, 699 73, 1, 0, -101, 241, -101, -101, -101, 128, -5, 700 -101 701 }; 702 703 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 704 positive, shift that token. If negative, reduce the rule which 705 number is the opposite. If zero, do what YYDEFACT says. 706 If YYTABLE_NINF, syntax error. */ 707 #define YYTABLE_NINF -141 708 static const short yytable[] = 709 { 710 48, 47, 58, 59, 60, 61, 38, 223, 70, 71, 711 184, 95, 83, 132, 95, 133, 184, 54, 55, 56, 712 239, 19, 20, 196, 19, 20, 54, 55, 56, 132, 713 48, 91, 54, 55, 56, 197, 54, 55, 56, 84, 714 48, 126, 198, 199, -66, 214, 130, 185, -77, 150, 715 80, 236, 65, 177, 81, 240, 182, 82, 63, 137, 716 193, 138, 48, 135, 66, 67, 68, 224, 95, 193, 717 57, 127, 85, 86, 87, 88, 89, 19, 20, 57, 718 92, 93, 194, 131, 94, 57, 192, 124, 194, 57, 719 19, 20, -82, 19, 20, 132, 221, 222, -99, 226, 720 234, -77, 136, 128, -82, -99, -99, 19, 20, 19, 721 20, -82, -82, -76, -77, 178, 139, -77, 183, 198, 722 199, 5, 188, 7, 8, 9, 10, 179, 12, -99, 723 14, -77, 15, 16, 17, 18, 19, 20, 21, 140, 724 207, 206, 152, 153, 154, 155, 156, 157, 158, 159, 725 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 726 170, 171, 172, 173, 174, 133, 75, 197, 198, 230, 727 76, 77, 132, 78, 198, 199, 79, 143, 225, 5, 728 144, 7, 8, 9, 10, 148, 12, 219, 14, 220, 729 15, 16, 17, 18, 19, 20, 21, 149, 211, 207, 730 54, 175, 56, 7, 8, 9, 10, 65, 12, 141, 731 14, 142, 15, 16, 17, 18, 19, 20, 21, 72, 732 73, 68, 151, 213, 189, -140, 185, 124, 216, 219, 733 207, 217, -140, -140, 218, 204, 205, 145, 208, 207, 734 241, 146, 209, 176, 147, 210, -68, 233, 237, 215, 735 238, 211, 187, 57, 190, 231, 74, 191, 229, 235, 736 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 737 11, 12, 13, 14, 232, 15, 16, 17, 18, 19, 738 20, 21, 22, 0, 23, 24, 112, 113, 114, 115, 739 116, 117, 118, 119, 25, 120, 121, 122, 123, 0, 740 0, 0, 0, -77, 0, 26, 27, 0, 0, 28, 741 29, 0, 0, 0, 30, 0, 31, 32, 33, 34, 742 0, 0, 35, 1, 2, 3, 4, 5, 6, 7, 743 8, 9, 10, 11, 12, 13, 14, 0, 15, 16, 744 17, 18, 19, 20, 21, 22, 0, 23, 24, 0, 745 113, 114, 115, 116, 117, 118, 119, 25, 120, 121, 746 122, 123, 0, 0, 0, 0, 0, 0, 26, 27, 747 0, 0, 28, 29, 0, 0, 0, 30, 0, 31, 748 32, 33, 34, 0, 0, 35, 1, 2, 3, 4, 749 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 750 0, 15, 16, 17, 18, 19, 20, 21, 22, 0, 751 23, 24, 0, 0, 0, 115, 116, 117, 118, 119, 752 25, 120, 121, 122, 123, 0, 0, 0, 0, 0, 753 0, 26, 27, 0, 0, 28, 29, 0, 0, 0, 754 62, 0, 31, 32, 33, 34, 0, 0, 35, 1, 755 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 756 12, 13, 14, 0, 15, 16, 17, 18, 19, 20, 757 21, 22, 0, 23, 24, 0, 0, 0, 0, 5, 758 0, 7, 8, 9, 10, 0, 12, 0, 14, 0, 759 15, 16, 17, 18, 19, 20, 21, 0, 28, 29, 760 0, 0, 0, 30, 0, 31, 32, 33, 34, 196, 761 0, 35, 118, 119, 0, 120, 121, 122, 123, 0, 762 0, 197, 0, 0, 0, 0, 0, 0, 198, 199, 763 0, 0, 0, 0, 0, 0, 225, 54, 175, 56, 764 7, 8, 9, 10, 0, 12, 0, 14, 0, 15, 765 16, 17, 18, 19, 20, 21, 0, 0, 98, 99, 766 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 767 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 768 181, 120, 121, 122, 123, 0, 96, 0, 0, 0, 769 57, 97, 98, 99, 100, 101, 102, 103, 104, 105, 770 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 771 116, 117, 118, 119, 0, 120, 121, 122, 123, 0, 772 0, 0, 0, 96, 0, 0, 0, 212, 97, 98, 773 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 774 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 775 119, 0, 120, 121, 122, 123, 100, 101, 102, 103, 776 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 777 114, 115, 116, 117, 118, 119, 0, 120, 121, 122, 778 123, 101, 102, 103, 104, 105, 106, 107, 108, 109, 779 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 780 0, 120, 121, 122, 123, 102, 103, 104, 105, 106, 781 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 782 117, 118, 119, 0, 120, 121, 122, 123, 103, 104, 783 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 784 115, 116, 117, 118, 119, 0, 120, 121, 122, 123, 785 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 786 114, 115, 116, 117, 118, 119, 0, 120, 121, 122, 787 123, 106, 107, 108, 109, 110, 111, 112, 113, 114, 788 115, 116, 117, 118, 119, 0, 120, 121, 122, 123, 789 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 790 0, 120, 121, 122, 123 791 }; 792 793 static const short yycheck[] = 794 { 795 0, 0, 7, 8, 9, 10, 0, 3, 13, 14, 796 29, 29, 23, 48, 29, 50, 29, 6, 7, 8, 797 29, 22, 23, 37, 22, 23, 6, 7, 8, 64, 798 30, 30, 6, 7, 8, 49, 6, 7, 8, 22, 799 40, 40, 56, 57, 15, 63, 46, 66, 46, 64, 800 14, 64, 7, 120, 18, 64, 123, 21, 11, 19, 801 49, 21, 62, 62, 19, 20, 21, 63, 29, 49, 802 59, 15, 25, 26, 27, 28, 29, 22, 23, 59, 803 33, 34, 62, 15, 0, 59, 15, 40, 62, 59, 804 22, 23, 37, 22, 23, 130, 196, 197, 15, 199, 805 15, 46, 15, 46, 49, 22, 23, 22, 23, 22, 806 23, 56, 57, 46, 46, 120, 21, 46, 123, 56, 807 57, 7, 127, 9, 10, 11, 12, 121, 14, 46, 808 16, 46, 18, 19, 20, 21, 22, 23, 24, 40, 809 140, 140, 95, 96, 97, 98, 99, 100, 101, 102, 810 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 811 113, 114, 115, 116, 117, 200, 14, 49, 56, 57, 812 18, 19, 207, 21, 56, 57, 24, 21, 64, 7, 813 21, 9, 10, 11, 12, 21, 14, 192, 16, 194, 814 18, 19, 20, 21, 22, 23, 24, 21, 151, 199, 815 6, 7, 8, 9, 10, 11, 12, 7, 14, 19, 816 16, 21, 18, 19, 20, 21, 22, 23, 24, 19, 817 20, 21, 64, 176, 6, 15, 66, 180, 181, 234, 818 230, 184, 22, 23, 187, 64, 21, 14, 21, 239, 819 239, 18, 21, 49, 21, 21, 15, 41, 63, 180, 820 64, 204, 126, 59, 129, 201, 15, 129, 200, 212, 821 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 822 13, 14, 15, 16, 201, 18, 19, 20, 21, 22, 823 23, 24, 25, -1, 27, 28, 46, 47, 48, 49, 824 50, 51, 52, 53, 37, 55, 56, 57, 58, -1, 825 -1, -1, -1, 46, -1, 48, 49, -1, -1, 52, 826 53, -1, -1, -1, 57, -1, 59, 60, 61, 62, 827 -1, -1, 65, 3, 4, 5, 6, 7, 8, 9, 828 10, 11, 12, 13, 14, 15, 16, -1, 18, 19, 829 20, 21, 22, 23, 24, 25, -1, 27, 28, -1, 830 47, 48, 49, 50, 51, 52, 53, 37, 55, 56, 831 57, 58, -1, -1, -1, -1, -1, -1, 48, 49, 832 -1, -1, 52, 53, -1, -1, -1, 57, -1, 59, 833 60, 61, 62, -1, -1, 65, 3, 4, 5, 6, 834 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 835 -1, 18, 19, 20, 21, 22, 23, 24, 25, -1, 836 27, 28, -1, -1, -1, 49, 50, 51, 52, 53, 837 37, 55, 56, 57, 58, -1, -1, -1, -1, -1, 838 -1, 48, 49, -1, -1, 52, 53, -1, -1, -1, 839 57, -1, 59, 60, 61, 62, -1, -1, 65, 3, 840 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 841 14, 15, 16, -1, 18, 19, 20, 21, 22, 23, 842 24, 25, -1, 27, 28, -1, -1, -1, -1, 7, 843 -1, 9, 10, 11, 12, -1, 14, -1, 16, -1, 844 18, 19, 20, 21, 22, 23, 24, -1, 52, 53, 845 -1, -1, -1, 57, -1, 59, 60, 61, 62, 37, 846 -1, 65, 52, 53, -1, 55, 56, 57, 58, -1, 847 -1, 49, -1, -1, -1, -1, -1, -1, 56, 57, 848 -1, -1, -1, -1, -1, -1, 64, 6, 7, 8, 849 9, 10, 11, 12, -1, 14, -1, 16, -1, 18, 850 19, 20, 21, 22, 23, 24, -1, -1, 32, 33, 851 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 852 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 853 49, 55, 56, 57, 58, -1, 26, -1, -1, -1, 854 59, 31, 32, 33, 34, 35, 36, 37, 38, 39, 855 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 856 50, 51, 52, 53, -1, 55, 56, 57, 58, -1, 857 -1, -1, -1, 26, -1, -1, -1, 67, 31, 32, 858 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 859 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 860 53, -1, 55, 56, 57, 58, 34, 35, 36, 37, 861 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 862 48, 49, 50, 51, 52, 53, -1, 55, 56, 57, 863 58, 35, 36, 37, 38, 39, 40, 41, 42, 43, 864 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 865 -1, 55, 56, 57, 58, 36, 37, 38, 39, 40, 866 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 867 51, 52, 53, -1, 55, 56, 57, 58, 37, 38, 868 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 869 49, 50, 51, 52, 53, -1, 55, 56, 57, 58, 870 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 871 48, 49, 50, 51, 52, 53, -1, 55, 56, 57, 872 58, 40, 41, 42, 43, 44, 45, 46, 47, 48, 873 49, 50, 51, 52, 53, -1, 55, 56, 57, 58, 874 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 875 -1, 55, 56, 57, 58 876 }; 877 878 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 879 symbol of state STATE-NUM. */ 880 static const unsigned char yystos[] = 881 { 882 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 883 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 884 23, 24, 25, 27, 28, 37, 48, 49, 52, 53, 885 57, 59, 60, 61, 62, 65, 69, 70, 71, 72, 886 74, 77, 78, 79, 81, 82, 83, 89, 90, 91, 887 94, 95, 96, 98, 6, 7, 8, 59, 97, 97, 888 97, 97, 57, 72, 90, 7, 19, 20, 21, 92, 889 97, 97, 19, 20, 92, 14, 18, 19, 21, 24, 890 14, 18, 21, 23, 22, 72, 72, 72, 72, 72, 891 71, 89, 72, 72, 0, 29, 26, 31, 32, 33, 892 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 893 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 894 55, 56, 57, 58, 72, 75, 89, 15, 46, 80, 895 90, 15, 83, 83, 84, 89, 15, 19, 21, 21, 896 40, 19, 21, 21, 21, 14, 18, 21, 21, 21, 897 64, 64, 72, 72, 72, 72, 72, 72, 72, 72, 898 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 899 72, 72, 72, 72, 72, 7, 49, 79, 97, 71, 900 73, 49, 79, 97, 29, 66, 76, 76, 97, 6, 901 81, 96, 15, 49, 62, 97, 37, 49, 56, 57, 902 85, 86, 87, 88, 64, 21, 89, 90, 21, 21, 903 21, 72, 67, 72, 63, 75, 72, 72, 72, 97, 904 97, 85, 85, 3, 63, 64, 85, 89, 93, 84, 905 57, 87, 88, 41, 15, 72, 64, 63, 64, 29, 906 64, 89 907 }; 908 909 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__) 910 # define YYSIZE_T __SIZE_TYPE__ 911 #endif 912 #if ! defined (YYSIZE_T) && defined (size_t) 913 # define YYSIZE_T size_t 914 #endif 915 #if ! defined (YYSIZE_T) 916 # if defined (__STDC__) || defined (__cplusplus) 917 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 918 # define YYSIZE_T size_t 919 # endif 920 #endif 921 #if ! defined (YYSIZE_T) 922 # define YYSIZE_T unsigned int 923 #endif 924 925 #define yyerrok (yyerrstatus = 0) 926 #define yyclearin (yychar = YYEMPTY) 927 #define YYEMPTY (-2) 928 #define YYEOF 0 929 930 #define YYACCEPT goto yyacceptlab 931 #define YYABORT goto yyabortlab 932 #define YYERROR goto yyerrorlab 933 934 935 /* Like YYERROR except do call yyerror. This remains here temporarily 936 to ease the transition to the new meaning of YYERROR, for GCC. 937 Once GCC version 2 has supplanted version 1, this can go. */ 938 939 #define YYFAIL goto yyerrlab 940 941 #define YYRECOVERING() (!!yyerrstatus) 942 943 #define YYBACKUP(Token, Value) \ 944 do \ 945 if (yychar == YYEMPTY && yylen == 1) \ 946 { \ 947 yychar = (Token); \ 948 yylval = (Value); \ 949 yytoken = YYTRANSLATE (yychar); \ 950 YYPOPSTACK; \ 951 goto yybackup; \ 952 } \ 953 else \ 954 { \ 955 yyerror ("syntax error: cannot back up");\ 956 YYERROR; \ 957 } \ 958 while (0) 959 960 #define YYTERROR 1 961 #define YYERRCODE 256 962 963 /* YYLLOC_DEFAULT -- Compute the default location (before the actions 964 are run). */ 965 966 #ifndef YYLLOC_DEFAULT 967 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 968 ((Current).first_line = (Rhs)[1].first_line, \ 969 (Current).first_column = (Rhs)[1].first_column, \ 970 (Current).last_line = (Rhs)[N].last_line, \ 971 (Current).last_column = (Rhs)[N].last_column) 972 #endif 973 974 /* YYLEX -- calling `yylex' with the right arguments. */ 975 976 #ifdef YYLEX_PARAM 977 # define YYLEX yylex (YYLEX_PARAM) 978 #else 979 # define YYLEX yylex () 980 #endif 981 982 /* Enable debugging if requested. */ 983 #if YYDEBUG 984 985 # ifndef YYFPRINTF 986 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 987 # define YYFPRINTF fprintf 988 # endif 989 990 # define YYDPRINTF(Args) \ 991 do { \ 992 if (yydebug) \ 993 YYFPRINTF Args; \ 994 } while (0) 995 996 # define YYDSYMPRINT(Args) \ 997 do { \ 998 if (yydebug) \ 999 yysymprint Args; \ 1000 } while (0) 1001 1002 # define YYDSYMPRINTF(Title, Token, Value, Location) \ 1003 do { \ 1004 if (yydebug) \ 1005 { \ 1006 YYFPRINTF (stderr, "%s ", Title); \ 1007 yysymprint (stderr, \ 1008 Token, Value); \ 1009 YYFPRINTF (stderr, "\n"); \ 1010 } \ 1011 } while (0) 1012 1013 /*------------------------------------------------------------------. 1014 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 1015 | TOP (included). | 1016 `------------------------------------------------------------------*/ 1017 1018 #if defined (__STDC__) || defined (__cplusplus) 1019 static void 1020 yy_stack_print (short *bottom, short *top) 1021 #else 1022 static void 1023 yy_stack_print (bottom, top) 1024 short *bottom; 1025 short *top; 1026 #endif 1027 { 1028 YYFPRINTF (stderr, "Stack now"); 1029 for (/* Nothing. */; bottom <= top; ++bottom) 1030 YYFPRINTF (stderr, " %d", *bottom); 1031 YYFPRINTF (stderr, "\n"); 1032 } 1033 1034 # define YY_STACK_PRINT(Bottom, Top) \ 1035 do { \ 1036 if (yydebug) \ 1037 yy_stack_print ((Bottom), (Top)); \ 1038 } while (0) 1039 1040 1041 /*------------------------------------------------. 1042 | Report that the YYRULE is going to be reduced. | 1043 `------------------------------------------------*/ 1044 1045 #if defined (__STDC__) || defined (__cplusplus) 1046 static void 1047 yy_reduce_print (int yyrule) 1048 #else 1049 static void 1050 yy_reduce_print (yyrule) 1051 int yyrule; 1052 #endif 1053 { 1054 int yyi; 1055 unsigned int yylno = yyrline[yyrule]; 1056 YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ", 1057 yyrule - 1, yylno); 1058 /* Print the symbols being reduced, and their result. */ 1059 for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++) 1060 YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]); 1061 YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]); 1062 } 1063 1064 # define YY_REDUCE_PRINT(Rule) \ 1065 do { \ 1066 if (yydebug) \ 1067 yy_reduce_print (Rule); \ 1068 } while (0) 1069 1070 /* Nonzero means print parse trace. It is left uninitialized so that 1071 multiple parsers can coexist. */ 1072 int yydebug; 1073 #else /* !YYDEBUG */ 1074 # define YYDPRINTF(Args) 1075 # define YYDSYMPRINT(Args) 1076 # define YYDSYMPRINTF(Title, Token, Value, Location) 1077 # define YY_STACK_PRINT(Bottom, Top) 1078 # define YY_REDUCE_PRINT(Rule) 1079 #endif /* !YYDEBUG */ 1080 1081 1082 /* YYINITDEPTH -- initial size of the parser's stacks. */ 1083 #ifndef YYINITDEPTH 1084 # define YYINITDEPTH 200 1085 #endif 1086 1087 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 1088 if the built-in stack extension method is used). 1089 1090 Do not make this value too large; the results are undefined if 1091 SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH) 1092 evaluated with infinite-precision integer arithmetic. */ 1093 1094 #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0 1095 # undef YYMAXDEPTH 1096 #endif 1097 1098 #ifndef YYMAXDEPTH 1099 # define YYMAXDEPTH 10000 1100 #endif 1101 1102 1103 1104 #if YYERROR_VERBOSE 1105 1106 # ifndef yystrlen 1107 # if defined (__GLIBC__) && defined (_STRING_H) 1108 # define yystrlen strlen 1109 # else 1110 /* Return the length of YYSTR. */ 1111 static YYSIZE_T 1112 # if defined (__STDC__) || defined (__cplusplus) 1113 yystrlen (const char *yystr) 1114 # else 1115 yystrlen (yystr) 1116 const char *yystr; 1117 # endif 1118 { 1119 register const char *yys = yystr; 1120 1121 while (*yys++ != '\0') 1122 continue; 1123 1124 return yys - yystr - 1; 1125 } 1126 # endif 1127 # endif 1128 1129 # ifndef yystpcpy 1130 # if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE) 1131 # define yystpcpy stpcpy 1132 # else 1133 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 1134 YYDEST. */ 1135 static char * 1136 # if defined (__STDC__) || defined (__cplusplus) 1137 yystpcpy (char *yydest, const char *yysrc) 1138 # else 1139 yystpcpy (yydest, yysrc) 1140 char *yydest; 1141 const char *yysrc; 1142 # endif 1143 { 1144 register char *yyd = yydest; 1145 register const char *yys = yysrc; 1146 1147 while ((*yyd++ = *yys++) != '\0') 1148 continue; 1149 1150 return yyd - 1; 1151 } 1152 # endif 1153 # endif 1154 1155 #endif /* !YYERROR_VERBOSE */ 1156 1157 1158 1159 #if YYDEBUG 1160 /*--------------------------------. 1161 | Print this symbol on YYOUTPUT. | 1162 `--------------------------------*/ 1163 1164 #if defined (__STDC__) || defined (__cplusplus) 1165 static void 1166 yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep) 1167 #else 1168 static void 1169 yysymprint (yyoutput, yytype, yyvaluep) 1170 FILE *yyoutput; 1171 int yytype; 1172 YYSTYPE *yyvaluep; 1173 #endif 1174 { 1175 /* Pacify ``unused variable'' warnings. */ 1176 (void) yyvaluep; 1177 1178 if (yytype < YYNTOKENS) 1179 { 1180 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 1181 # ifdef YYPRINT 1182 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 1183 # endif 1184 } 1185 else 1186 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 1187 1188 switch (yytype) 1189 { 1190 default: 1191 break; 1192 } 1193 YYFPRINTF (yyoutput, ")"); 1194 } 1195 1196 #endif /* ! YYDEBUG */ 1197 /*-----------------------------------------------. 1198 | Release the memory associated to this symbol. | 1199 `-----------------------------------------------*/ 1200 1201 #if defined (__STDC__) || defined (__cplusplus) 1202 static void 1203 yydestruct (int yytype, YYSTYPE *yyvaluep) 1204 #else 1205 static void 1206 yydestruct (yytype, yyvaluep) 1207 int yytype; 1208 YYSTYPE *yyvaluep; 1209 #endif 1210 { 1211 /* Pacify ``unused variable'' warnings. */ 1212 (void) yyvaluep; 1213 1214 switch (yytype) 1215 { 1216 1217 default: 1218 break; 1219 } 1220 } 1221 1222 1223 /* Prevent warnings from -Wmissing-prototypes. */ 1224 1225 #ifdef YYPARSE_PARAM 1226 # if defined (__STDC__) || defined (__cplusplus) 1227 int yyparse (void *YYPARSE_PARAM); 1228 # else 1229 int yyparse (); 1230 # endif 1231 #else /* ! YYPARSE_PARAM */ 1232 #if defined (__STDC__) || defined (__cplusplus) 1233 int yyparse (void); 1234 #else 1235 int yyparse (); 1236 #endif 1237 #endif /* ! YYPARSE_PARAM */ 1238 1239 1240 1241 /* The lookahead symbol. */ 1242 int yychar; 1243 1244 /* The semantic value of the lookahead symbol. */ 1245 YYSTYPE yylval; 1246 1247 /* Number of syntax errors so far. */ 1248 int yynerrs; 1249 1250 1251 1252 /*----------. 1253 | yyparse. | 1254 `----------*/ 1255 1256 #ifdef YYPARSE_PARAM 1257 # if defined (__STDC__) || defined (__cplusplus) 1258 int yyparse (void *YYPARSE_PARAM) 1259 # else 1260 int yyparse (YYPARSE_PARAM) 1261 void *YYPARSE_PARAM; 1262 # endif 1263 #else /* ! YYPARSE_PARAM */ 1264 #if defined (__STDC__) || defined (__cplusplus) 1265 int 1266 yyparse (void) 1267 #else 1268 int 1269 yyparse () 1270 1271 #endif 1272 #endif 1273 { 1274 1275 register int yystate; 1276 register int yyn; 1277 int yyresult; 1278 /* Number of tokens to shift before error messages enabled. */ 1279 int yyerrstatus; 1280 /* Lookahead token as an internal (translated) token number. */ 1281 int yytoken = 0; 1282 1283 /* Three stacks and their tools: 1284 `yyss': related to states, 1285 `yyvs': related to semantic values, 1286 `yyls': related to locations. 1287 1288 Refer to the stacks thru separate pointers, to allow yyoverflow 1289 to xreallocate them elsewhere. */ 1290 1291 /* The state stack. */ 1292 short yyssa[YYINITDEPTH]; 1293 short *yyss = yyssa; 1294 register short *yyssp; 1295 1296 /* The semantic value stack. */ 1297 YYSTYPE yyvsa[YYINITDEPTH]; 1298 YYSTYPE *yyvs = yyvsa; 1299 register YYSTYPE *yyvsp; 1300 1301 1302 1303 #define YYPOPSTACK (yyvsp--, yyssp--) 1304 1305 YYSIZE_T yystacksize = YYINITDEPTH; 1306 1307 /* The variables used to return semantic value and location from the 1308 action routines. */ 1309 YYSTYPE yyval; 1310 1311 1312 /* When reducing, the number of symbols on the RHS of the reduced 1313 rule. */ 1314 int yylen; 1315 1316 YYDPRINTF ((stderr, "Starting parse\n")); 1317 1318 yystate = 0; 1319 yyerrstatus = 0; 1320 yynerrs = 0; 1321 yychar = YYEMPTY; /* Cause a token to be read. */ 1322 1323 /* Initialize stack pointers. 1324 Waste one element of value and location stack 1325 so that they stay on the same level as the state stack. 1326 The wasted elements are never initialized. */ 1327 1328 yyssp = yyss; 1329 yyvsp = yyvs; 1330 1331 goto yysetstate; 1332 1333 /*------------------------------------------------------------. 1334 | yynewstate -- Push a new state, which is found in yystate. | 1335 `------------------------------------------------------------*/ 1336 yynewstate: 1337 /* In all cases, when you get here, the value and location stacks 1338 have just been pushed. so pushing a state here evens the stacks. 1339 */ 1340 yyssp++; 1341 1342 yysetstate: 1343 *yyssp = yystate; 1344 1345 if (yyss + yystacksize - 1 <= yyssp) 1346 { 1347 /* Get the current used size of the three stacks, in elements. */ 1348 YYSIZE_T yysize = yyssp - yyss + 1; 1349 1350 #ifdef yyoverflow 1351 { 1352 /* Give user a chance to xreallocate the stack. Use copies of 1353 these so that the &'s don't force the real ones into 1354 memory. */ 1355 YYSTYPE *yyvs1 = yyvs; 1356 short *yyss1 = yyss; 1357 1358 1359 /* Each stack pointer address is followed by the size of the 1360 data in use in that stack, in bytes. This used to be a 1361 conditional around just the two extra args, but that might 1362 be undefined if yyoverflow is a macro. */ 1363 yyoverflow ("parser stack overflow", 1364 &yyss1, yysize * sizeof (*yyssp), 1365 &yyvs1, yysize * sizeof (*yyvsp), 1366 1367 &yystacksize); 1368 1369 yyss = yyss1; 1370 yyvs = yyvs1; 1371 } 1372 #else /* no yyoverflow */ 1373 # ifndef YYSTACK_RELOCATE 1374 goto yyoverflowlab; 1375 # else 1376 /* Extend the stack our own way. */ 1377 if (YYMAXDEPTH <= yystacksize) 1378 goto yyoverflowlab; 1379 yystacksize *= 2; 1380 if (YYMAXDEPTH < yystacksize) 1381 yystacksize = YYMAXDEPTH; 1382 1383 { 1384 short *yyss1 = yyss; 1385 union yyalloc *yyptr = 1386 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 1387 if (! yyptr) 1388 goto yyoverflowlab; 1389 YYSTACK_RELOCATE (yyss); 1390 YYSTACK_RELOCATE (yyvs); 1391 1392 # undef YYSTACK_RELOCATE 1393 if (yyss1 != yyssa) 1394 YYSTACK_FREE (yyss1); 1395 } 1396 # endif 1397 #endif /* no yyoverflow */ 1398 1399 yyssp = yyss + yysize - 1; 1400 yyvsp = yyvs + yysize - 1; 1401 1402 1403 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 1404 (unsigned long int) yystacksize)); 1405 1406 if (yyss + yystacksize - 1 <= yyssp) 1407 YYABORT; 1408 } 1409 1410 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 1411 1412 goto yybackup; 1413 1414 /*-----------. 1415 | yybackup. | 1416 `-----------*/ 1417 yybackup: 1418 1419 /* Do appropriate processing given the current state. */ 1420 /* Read a lookahead token if we need one and don't already have one. */ 1421 /* yyresume: */ 1422 1423 /* First try to decide what to do without reference to lookahead token. */ 1424 1425 yyn = yypact[yystate]; 1426 if (yyn == YYPACT_NINF) 1427 goto yydefault; 1428 1429 /* Not known => get a lookahead token if don't already have one. */ 1430 1431 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 1432 if (yychar == YYEMPTY) 1433 { 1434 YYDPRINTF ((stderr, "Reading a token: ")); 1435 yychar = YYLEX; 1436 } 1437 1438 if (yychar <= YYEOF) 1439 { 1440 yychar = yytoken = YYEOF; 1441 YYDPRINTF ((stderr, "Now at end of input.\n")); 1442 } 1443 else 1444 { 1445 yytoken = YYTRANSLATE (yychar); 1446 YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc); 1447 } 1448 1449 /* If the proper action on seeing token YYTOKEN is to reduce or to 1450 detect an error, take that action. */ 1451 yyn += yytoken; 1452 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 1453 goto yydefault; 1454 yyn = yytable[yyn]; 1455 if (yyn <= 0) 1456 { 1457 if (yyn == 0 || yyn == YYTABLE_NINF) 1458 goto yyerrlab; 1459 yyn = -yyn; 1460 goto yyreduce; 1461 } 1462 1463 if (yyn == YYFINAL) 1464 YYACCEPT; 1465 1466 /* Shift the lookahead token. */ 1467 YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken])); 1468 1469 /* Discard the token being shifted unless it is eof. */ 1470 if (yychar != YYEOF) 1471 yychar = YYEMPTY; 1472 1473 *++yyvsp = yylval; 1474 1475 1476 /* Count tokens shifted since error; after three, turn off error 1477 status. */ 1478 if (yyerrstatus) 1479 yyerrstatus--; 1480 1481 yystate = yyn; 1482 goto yynewstate; 1483 1484 1485 /*-----------------------------------------------------------. 1486 | yydefault -- do the default action for the current state. | 1487 `-----------------------------------------------------------*/ 1488 yydefault: 1489 yyn = yydefact[yystate]; 1490 if (yyn == 0) 1491 goto yyerrlab; 1492 goto yyreduce; 1493 1494 1495 /*-----------------------------. 1496 | yyreduce -- Do a reduction. | 1497 `-----------------------------*/ 1498 yyreduce: 1499 /* yyn is the number of a rule to reduce with. */ 1500 yylen = yyr2[yyn]; 1501 1502 /* If YYLEN is nonzero, implement the default value of the action: 1503 `$$ = $1'. 1504 1505 Otherwise, the following line sets YYVAL to garbage. 1506 This behavior is undocumented and Bison 1507 users should not rely upon it. Assigning to YYVAL 1508 unconditionally makes the parser a bit smaller, and it avoids a 1509 GCC warning that YYVAL may be used uninitialized. */ 1510 yyval = yyvsp[1-yylen]; 1511 1512 1513 YY_REDUCE_PRINT (yyn); 1514 switch (yyn) 1515 { 1516 case 4: 1517 #line 235 "c-exp.y" 1518 { write_exp_elt_opcode(OP_TYPE); 1519 write_exp_elt_type(yyvsp[0].tval); 1520 write_exp_elt_opcode(OP_TYPE);} 1521 break; 1522 1523 case 6: 1524 #line 243 "c-exp.y" 1525 { write_exp_elt_opcode (BINOP_COMMA); } 1526 break; 1527 1528 case 7: 1529 #line 248 "c-exp.y" 1530 { write_exp_elt_opcode (UNOP_IND); } 1531 break; 1532 1533 case 8: 1534 #line 252 "c-exp.y" 1535 { write_exp_elt_opcode (UNOP_ADDR); } 1536 break; 1537 1538 case 9: 1539 #line 256 "c-exp.y" 1540 { write_exp_elt_opcode (UNOP_NEG); } 1541 break; 1542 1543 case 10: 1544 #line 260 "c-exp.y" 1545 { write_exp_elt_opcode (UNOP_LOGICAL_NOT); } 1546 break; 1547 1548 case 11: 1549 #line 264 "c-exp.y" 1550 { write_exp_elt_opcode (UNOP_COMPLEMENT); } 1551 break; 1552 1553 case 12: 1554 #line 268 "c-exp.y" 1555 { write_exp_elt_opcode (UNOP_PREINCREMENT); } 1556 break; 1557 1558 case 13: 1559 #line 272 "c-exp.y" 1560 { write_exp_elt_opcode (UNOP_PREDECREMENT); } 1561 break; 1562 1563 case 14: 1564 #line 276 "c-exp.y" 1565 { write_exp_elt_opcode (UNOP_POSTINCREMENT); } 1566 break; 1567 1568 case 15: 1569 #line 280 "c-exp.y" 1570 { write_exp_elt_opcode (UNOP_POSTDECREMENT); } 1571 break; 1572 1573 case 16: 1574 #line 284 "c-exp.y" 1575 { write_exp_elt_opcode (UNOP_SIZEOF); } 1576 break; 1577 1578 case 17: 1579 #line 288 "c-exp.y" 1580 { write_exp_elt_opcode (STRUCTOP_PTR); 1581 write_exp_string (yyvsp[0].sval); 1582 write_exp_elt_opcode (STRUCTOP_PTR); } 1583 break; 1584 1585 case 18: 1586 #line 294 "c-exp.y" 1587 { /* exp->type::name becomes exp->*(&type::name) */ 1588 /* Note: this doesn't work if name is a 1589 static member! FIXME */ 1590 write_exp_elt_opcode (UNOP_ADDR); 1591 write_exp_elt_opcode (STRUCTOP_MPTR); } 1592 break; 1593 1594 case 19: 1595 #line 302 "c-exp.y" 1596 { write_exp_elt_opcode (STRUCTOP_MPTR); } 1597 break; 1598 1599 case 20: 1600 #line 306 "c-exp.y" 1601 { write_exp_elt_opcode (STRUCTOP_STRUCT); 1602 write_exp_string (yyvsp[0].sval); 1603 write_exp_elt_opcode (STRUCTOP_STRUCT); } 1604 break; 1605 1606 case 21: 1607 #line 312 "c-exp.y" 1608 { /* exp.type::name becomes exp.*(&type::name) */ 1609 /* Note: this doesn't work if name is a 1610 static member! FIXME */ 1611 write_exp_elt_opcode (UNOP_ADDR); 1612 write_exp_elt_opcode (STRUCTOP_MEMBER); } 1613 break; 1614 1615 case 22: 1616 #line 320 "c-exp.y" 1617 { write_exp_elt_opcode (STRUCTOP_MEMBER); } 1618 break; 1619 1620 case 23: 1621 #line 324 "c-exp.y" 1622 { write_exp_elt_opcode (BINOP_SUBSCRIPT); } 1623 break; 1624 1625 case 24: 1626 #line 330 "c-exp.y" 1627 { start_arglist (); } 1628 break; 1629 1630 case 25: 1631 #line 332 "c-exp.y" 1632 { write_exp_elt_opcode (OP_FUNCALL); 1633 write_exp_elt_longcst ((LONGEST) end_arglist ()); 1634 write_exp_elt_opcode (OP_FUNCALL); } 1635 break; 1636 1637 case 26: 1638 #line 338 "c-exp.y" 1639 { start_arglist (); } 1640 break; 1641 1642 case 28: 1643 #line 345 "c-exp.y" 1644 { arglist_len = 1; } 1645 break; 1646 1647 case 29: 1648 #line 349 "c-exp.y" 1649 { arglist_len++; } 1650 break; 1651 1652 case 30: 1653 #line 353 "c-exp.y" 1654 { yyval.lval = end_arglist () - 1; } 1655 break; 1656 1657 case 31: 1658 #line 356 "c-exp.y" 1659 { write_exp_elt_opcode (OP_ARRAY); 1660 write_exp_elt_longcst ((LONGEST) 0); 1661 write_exp_elt_longcst ((LONGEST) yyvsp[0].lval); 1662 write_exp_elt_opcode (OP_ARRAY); } 1663 break; 1664 1665 case 32: 1666 #line 363 "c-exp.y" 1667 { write_exp_elt_opcode (UNOP_MEMVAL); 1668 write_exp_elt_type (yyvsp[-2].tval); 1669 write_exp_elt_opcode (UNOP_MEMVAL); } 1670 break; 1671 1672 case 33: 1673 #line 369 "c-exp.y" 1674 { write_exp_elt_opcode (UNOP_CAST); 1675 write_exp_elt_type (yyvsp[-2].tval); 1676 write_exp_elt_opcode (UNOP_CAST); } 1677 break; 1678 1679 case 34: 1680 #line 375 "c-exp.y" 1681 { } 1682 break; 1683 1684 case 35: 1685 #line 381 "c-exp.y" 1686 { write_exp_elt_opcode (BINOP_REPEAT); } 1687 break; 1688 1689 case 36: 1690 #line 385 "c-exp.y" 1691 { write_exp_elt_opcode (BINOP_MUL); } 1692 break; 1693 1694 case 37: 1695 #line 389 "c-exp.y" 1696 { write_exp_elt_opcode (BINOP_DIV); } 1697 break; 1698 1699 case 38: 1700 #line 393 "c-exp.y" 1701 { write_exp_elt_opcode (BINOP_REM); } 1702 break; 1703 1704 case 39: 1705 #line 397 "c-exp.y" 1706 { write_exp_elt_opcode (BINOP_ADD); } 1707 break; 1708 1709 case 40: 1710 #line 401 "c-exp.y" 1711 { write_exp_elt_opcode (BINOP_SUB); } 1712 break; 1713 1714 case 41: 1715 #line 405 "c-exp.y" 1716 { write_exp_elt_opcode (BINOP_LSH); } 1717 break; 1718 1719 case 42: 1720 #line 409 "c-exp.y" 1721 { write_exp_elt_opcode (BINOP_RSH); } 1722 break; 1723 1724 case 43: 1725 #line 413 "c-exp.y" 1726 { write_exp_elt_opcode (BINOP_EQUAL); } 1727 break; 1728 1729 case 44: 1730 #line 417 "c-exp.y" 1731 { write_exp_elt_opcode (BINOP_NOTEQUAL); } 1732 break; 1733 1734 case 45: 1735 #line 421 "c-exp.y" 1736 { write_exp_elt_opcode (BINOP_LEQ); } 1737 break; 1738 1739 case 46: 1740 #line 425 "c-exp.y" 1741 { write_exp_elt_opcode (BINOP_GEQ); } 1742 break; 1743 1744 case 47: 1745 #line 429 "c-exp.y" 1746 { write_exp_elt_opcode (BINOP_LESS); } 1747 break; 1748 1749 case 48: 1750 #line 433 "c-exp.y" 1751 { write_exp_elt_opcode (BINOP_GTR); } 1752 break; 1753 1754 case 49: 1755 #line 437 "c-exp.y" 1756 { write_exp_elt_opcode (BINOP_BITWISE_AND); } 1757 break; 1758 1759 case 50: 1760 #line 441 "c-exp.y" 1761 { write_exp_elt_opcode (BINOP_BITWISE_XOR); } 1762 break; 1763 1764 case 51: 1765 #line 445 "c-exp.y" 1766 { write_exp_elt_opcode (BINOP_BITWISE_IOR); } 1767 break; 1768 1769 case 52: 1770 #line 449 "c-exp.y" 1771 { write_exp_elt_opcode (BINOP_LOGICAL_AND); } 1772 break; 1773 1774 case 53: 1775 #line 453 "c-exp.y" 1776 { write_exp_elt_opcode (BINOP_LOGICAL_OR); } 1777 break; 1778 1779 case 54: 1780 #line 457 "c-exp.y" 1781 { write_exp_elt_opcode (TERNOP_COND); } 1782 break; 1783 1784 case 55: 1785 #line 461 "c-exp.y" 1786 { write_exp_elt_opcode (BINOP_ASSIGN); } 1787 break; 1788 1789 case 56: 1790 #line 465 "c-exp.y" 1791 { write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); 1792 write_exp_elt_opcode (yyvsp[-1].opcode); 1793 write_exp_elt_opcode (BINOP_ASSIGN_MODIFY); } 1794 break; 1795 1796 case 57: 1797 #line 471 "c-exp.y" 1798 { write_exp_elt_opcode (OP_LONG); 1799 write_exp_elt_type (yyvsp[0].typed_val_int.type); 1800 write_exp_elt_longcst ((LONGEST)(yyvsp[0].typed_val_int.val)); 1801 write_exp_elt_opcode (OP_LONG); } 1802 break; 1803 1804 case 58: 1805 #line 478 "c-exp.y" 1806 { YYSTYPE val; 1807 parse_number (yyvsp[0].ssym.stoken.ptr, yyvsp[0].ssym.stoken.length, 0, &val); 1808 write_exp_elt_opcode (OP_LONG); 1809 write_exp_elt_type (val.typed_val_int.type); 1810 write_exp_elt_longcst ((LONGEST)val.typed_val_int.val); 1811 write_exp_elt_opcode (OP_LONG); 1812 } 1813 break; 1814 1815 case 59: 1816 #line 489 "c-exp.y" 1817 { write_exp_elt_opcode (OP_DOUBLE); 1818 write_exp_elt_type (yyvsp[0].typed_val_float.type); 1819 write_exp_elt_dblcst (yyvsp[0].typed_val_float.dval); 1820 write_exp_elt_opcode (OP_DOUBLE); } 1821 break; 1822 1823 case 62: 1824 #line 503 "c-exp.y" 1825 { write_exp_elt_opcode (OP_LONG); 1826 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_int); 1827 CHECK_TYPEDEF (yyvsp[-1].tval); 1828 write_exp_elt_longcst ((LONGEST) TYPE_LENGTH (yyvsp[-1].tval)); 1829 write_exp_elt_opcode (OP_LONG); } 1830 break; 1831 1832 case 63: 1833 #line 511 "c-exp.y" 1834 { /* C strings are converted into array constants with 1835 an explicit null byte added at the end. Thus 1836 the array upper bound is the string length. 1837 There is no such thing in C as a completely empty 1838 string. */ 1839 char *sp = yyvsp[0].sval.ptr; int count = yyvsp[0].sval.length; 1840 while (count-- > 0) 1841 { 1842 write_exp_elt_opcode (OP_LONG); 1843 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char); 1844 write_exp_elt_longcst ((LONGEST)(*sp++)); 1845 write_exp_elt_opcode (OP_LONG); 1846 } 1847 write_exp_elt_opcode (OP_LONG); 1848 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_char); 1849 write_exp_elt_longcst ((LONGEST)'\0'); 1850 write_exp_elt_opcode (OP_LONG); 1851 write_exp_elt_opcode (OP_ARRAY); 1852 write_exp_elt_longcst ((LONGEST) 0); 1853 write_exp_elt_longcst ((LONGEST) (yyvsp[0].sval.length)); 1854 write_exp_elt_opcode (OP_ARRAY); } 1855 break; 1856 1857 case 64: 1858 #line 536 "c-exp.y" 1859 { write_exp_elt_opcode (OP_LONG); 1860 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool); 1861 write_exp_elt_longcst ((LONGEST) 1); 1862 write_exp_elt_opcode (OP_LONG); } 1863 break; 1864 1865 case 65: 1866 #line 543 "c-exp.y" 1867 { write_exp_elt_opcode (OP_LONG); 1868 write_exp_elt_type (builtin_type (current_gdbarch)->builtin_bool); 1869 write_exp_elt_longcst ((LONGEST) 0); 1870 write_exp_elt_opcode (OP_LONG); } 1871 break; 1872 1873 case 66: 1874 #line 552 "c-exp.y" 1875 { 1876 if (yyvsp[0].ssym.sym) 1877 yyval.bval = SYMBOL_BLOCK_VALUE (yyvsp[0].ssym.sym); 1878 else 1879 error ("No file or function \"%s\".", 1880 copy_name (yyvsp[0].ssym.stoken)); 1881 } 1882 break; 1883 1884 case 67: 1885 #line 560 "c-exp.y" 1886 { 1887 yyval.bval = yyvsp[0].bval; 1888 } 1889 break; 1890 1891 case 68: 1892 #line 566 "c-exp.y" 1893 { struct symbol *tem 1894 = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval, 1895 VAR_DOMAIN, (int *) NULL, 1896 (struct symtab **) NULL); 1897 if (!tem || SYMBOL_CLASS (tem) != LOC_BLOCK) 1898 error ("No function \"%s\" in specified context.", 1899 copy_name (yyvsp[0].sval)); 1900 yyval.bval = SYMBOL_BLOCK_VALUE (tem); } 1901 break; 1902 1903 case 69: 1904 #line 577 "c-exp.y" 1905 { struct symbol *sym; 1906 sym = lookup_symbol (copy_name (yyvsp[0].sval), yyvsp[-2].bval, 1907 VAR_DOMAIN, (int *) NULL, 1908 (struct symtab **) NULL); 1909 if (sym == 0) 1910 error ("No symbol \"%s\" in specified context.", 1911 copy_name (yyvsp[0].sval)); 1912 1913 write_exp_elt_opcode (OP_VAR_VALUE); 1914 /* block_found is set by lookup_symbol. */ 1915 write_exp_elt_block (block_found); 1916 write_exp_elt_sym (sym); 1917 write_exp_elt_opcode (OP_VAR_VALUE); } 1918 break; 1919 1920 case 70: 1921 #line 593 "c-exp.y" 1922 { 1923 struct type *type = yyvsp[-2].tval; 1924 if (TYPE_CODE (type) != TYPE_CODE_STRUCT 1925 && TYPE_CODE (type) != TYPE_CODE_UNION 1926 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE) 1927 error ("`%s' is not defined as an aggregate type.", 1928 TYPE_NAME (type)); 1929 1930 write_exp_elt_opcode (OP_SCOPE); 1931 write_exp_elt_type (type); 1932 write_exp_string (yyvsp[0].sval); 1933 write_exp_elt_opcode (OP_SCOPE); 1934 } 1935 break; 1936 1937 case 71: 1938 #line 607 "c-exp.y" 1939 { 1940 struct type *type = yyvsp[-3].tval; 1941 struct stoken tmp_token; 1942 if (TYPE_CODE (type) != TYPE_CODE_STRUCT 1943 && TYPE_CODE (type) != TYPE_CODE_UNION 1944 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE) 1945 error ("`%s' is not defined as an aggregate type.", 1946 TYPE_NAME (type)); 1947 1948 tmp_token.ptr = (char*) alloca (yyvsp[0].sval.length + 2); 1949 tmp_token.length = yyvsp[0].sval.length + 1; 1950 tmp_token.ptr[0] = '~'; 1951 memcpy (tmp_token.ptr+1, yyvsp[0].sval.ptr, yyvsp[0].sval.length); 1952 tmp_token.ptr[tmp_token.length] = 0; 1953 1954 /* Check for valid destructor name. */ 1955 destructor_name_p (tmp_token.ptr, type); 1956 write_exp_elt_opcode (OP_SCOPE); 1957 write_exp_elt_type (type); 1958 write_exp_string (tmp_token); 1959 write_exp_elt_opcode (OP_SCOPE); 1960 } 1961 break; 1962 1963 case 73: 1964 #line 633 "c-exp.y" 1965 { 1966 char *name = copy_name (yyvsp[0].sval); 1967 struct symbol *sym; 1968 struct minimal_symbol *msymbol; 1969 1970 sym = 1971 lookup_symbol (name, (const struct block *) NULL, 1972 VAR_DOMAIN, (int *) NULL, 1973 (struct symtab **) NULL); 1974 if (sym) 1975 { 1976 write_exp_elt_opcode (OP_VAR_VALUE); 1977 write_exp_elt_block (NULL); 1978 write_exp_elt_sym (sym); 1979 write_exp_elt_opcode (OP_VAR_VALUE); 1980 break; 1981 } 1982 1983 msymbol = lookup_minimal_symbol (name, NULL, NULL); 1984 if (msymbol != NULL) 1985 { 1986 write_exp_msymbol (msymbol, 1987 lookup_function_type (builtin_type (current_gdbarch)->builtin_int), 1988 builtin_type (current_gdbarch)->builtin_int); 1989 } 1990 else 1991 if (!have_full_symbols () && !have_partial_symbols ()) 1992 error ("No symbol table is loaded. Use the \"file\" command."); 1993 else 1994 error ("No symbol \"%s\" in current context.", name); 1995 } 1996 break; 1997 1998 case 74: 1999 #line 667 "c-exp.y" 2000 { struct symbol *sym = yyvsp[0].ssym.sym; 2001 2002 if (sym) 2003 { 2004 if (symbol_read_needs_frame (sym)) 2005 { 2006 if (innermost_block == 0 || 2007 contained_in (block_found, 2008 innermost_block)) 2009 innermost_block = block_found; 2010 } 2011 2012 write_exp_elt_opcode (OP_VAR_VALUE); 2013 /* We want to use the selected frame, not 2014 another more inner frame which happens to 2015 be in the same block. */ 2016 write_exp_elt_block (NULL); 2017 write_exp_elt_sym (sym); 2018 write_exp_elt_opcode (OP_VAR_VALUE); 2019 } 2020 else if (yyvsp[0].ssym.is_a_field_of_this) 2021 { 2022 /* C++: it hangs off of `this'. Must 2023 not inadvertently convert from a method call 2024 to data ref. */ 2025 if (innermost_block == 0 || 2026 contained_in (block_found, innermost_block)) 2027 innermost_block = block_found; 2028 write_exp_elt_opcode (OP_THIS); 2029 write_exp_elt_opcode (OP_THIS); 2030 write_exp_elt_opcode (STRUCTOP_PTR); 2031 write_exp_string (yyvsp[0].ssym.stoken); 2032 write_exp_elt_opcode (STRUCTOP_PTR); 2033 } 2034 else 2035 { 2036 struct minimal_symbol *msymbol; 2037 char *arg = copy_name (yyvsp[0].ssym.stoken); 2038 2039 msymbol = 2040 lookup_minimal_symbol (arg, NULL, NULL); 2041 if (msymbol != NULL) 2042 { 2043 write_exp_msymbol (msymbol, 2044 lookup_function_type (builtin_type (current_gdbarch)->builtin_int), 2045 builtin_type (current_gdbarch)->builtin_int); 2046 } 2047 else if (!have_full_symbols () && !have_partial_symbols ()) 2048 error ("No symbol table is loaded. Use the \"file\" command."); 2049 else 2050 error ("No symbol \"%s\" in current context.", 2051 copy_name (yyvsp[0].ssym.stoken)); 2052 } 2053 } 2054 break; 2055 2056 case 75: 2057 #line 724 "c-exp.y" 2058 { push_type_address_space (copy_name (yyvsp[0].ssym.stoken)); 2059 push_type (tp_space_identifier); 2060 } 2061 break; 2062 2063 case 83: 2064 #line 746 "c-exp.y" 2065 { push_type (tp_pointer); yyval.voidval = 0; } 2066 break; 2067 2068 case 84: 2069 #line 748 "c-exp.y" 2070 { push_type (tp_pointer); yyval.voidval = yyvsp[0].voidval; } 2071 break; 2072 2073 case 85: 2074 #line 750 "c-exp.y" 2075 { push_type (tp_reference); yyval.voidval = 0; } 2076 break; 2077 2078 case 86: 2079 #line 752 "c-exp.y" 2080 { push_type (tp_reference); yyval.voidval = yyvsp[0].voidval; } 2081 break; 2082 2083 case 88: 2084 #line 757 "c-exp.y" 2085 { yyval.voidval = yyvsp[-1].voidval; } 2086 break; 2087 2088 case 89: 2089 #line 759 "c-exp.y" 2090 { 2091 push_type_int (yyvsp[0].lval); 2092 push_type (tp_array); 2093 } 2094 break; 2095 2096 case 90: 2097 #line 764 "c-exp.y" 2098 { 2099 push_type_int (yyvsp[0].lval); 2100 push_type (tp_array); 2101 yyval.voidval = 0; 2102 } 2103 break; 2104 2105 case 91: 2106 #line 771 "c-exp.y" 2107 { push_type (tp_function); } 2108 break; 2109 2110 case 92: 2111 #line 773 "c-exp.y" 2112 { push_type (tp_function); } 2113 break; 2114 2115 case 93: 2116 #line 777 "c-exp.y" 2117 { yyval.lval = -1; } 2118 break; 2119 2120 case 94: 2121 #line 779 "c-exp.y" 2122 { yyval.lval = yyvsp[-1].typed_val_int.val; } 2123 break; 2124 2125 case 95: 2126 #line 783 "c-exp.y" 2127 { yyval.voidval = 0; } 2128 break; 2129 2130 case 96: 2131 #line 785 "c-exp.y" 2132 { free (yyvsp[-1].tvec); yyval.voidval = 0; } 2133 break; 2134 2135 case 98: 2136 #line 798 "c-exp.y" 2137 { yyval.tval = lookup_member_type (builtin_type (current_gdbarch)->builtin_int, yyvsp[-2].tval); } 2138 break; 2139 2140 case 99: 2141 #line 803 "c-exp.y" 2142 { yyval.tval = yyvsp[0].tsym.type; } 2143 break; 2144 2145 case 100: 2146 #line 805 "c-exp.y" 2147 { yyval.tval = builtin_type (current_gdbarch)->builtin_int; } 2148 break; 2149 2150 case 101: 2151 #line 807 "c-exp.y" 2152 { yyval.tval = builtin_type (current_gdbarch)->builtin_long; } 2153 break; 2154 2155 case 102: 2156 #line 809 "c-exp.y" 2157 { yyval.tval = builtin_type (current_gdbarch)->builtin_short; } 2158 break; 2159 2160 case 103: 2161 #line 811 "c-exp.y" 2162 { yyval.tval = builtin_type (current_gdbarch)->builtin_long; } 2163 break; 2164 2165 case 104: 2166 #line 813 "c-exp.y" 2167 { yyval.tval = builtin_type (current_gdbarch)->builtin_long; } 2168 break; 2169 2170 case 105: 2171 #line 815 "c-exp.y" 2172 { yyval.tval = builtin_type (current_gdbarch)->builtin_long; } 2173 break; 2174 2175 case 106: 2176 #line 817 "c-exp.y" 2177 { yyval.tval = builtin_type (current_gdbarch)->builtin_long; } 2178 break; 2179 2180 case 107: 2181 #line 819 "c-exp.y" 2182 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; } 2183 break; 2184 2185 case 108: 2186 #line 821 "c-exp.y" 2187 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; } 2188 break; 2189 2190 case 109: 2191 #line 823 "c-exp.y" 2192 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long; } 2193 break; 2194 2195 case 110: 2196 #line 825 "c-exp.y" 2197 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2198 break; 2199 2200 case 111: 2201 #line 827 "c-exp.y" 2202 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2203 break; 2204 2205 case 112: 2206 #line 829 "c-exp.y" 2207 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2208 break; 2209 2210 case 113: 2211 #line 831 "c-exp.y" 2212 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2213 break; 2214 2215 case 114: 2216 #line 833 "c-exp.y" 2217 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2218 break; 2219 2220 case 115: 2221 #line 835 "c-exp.y" 2222 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_long; } 2223 break; 2224 2225 case 116: 2226 #line 837 "c-exp.y" 2227 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; } 2228 break; 2229 2230 case 117: 2231 #line 839 "c-exp.y" 2232 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; } 2233 break; 2234 2235 case 118: 2236 #line 841 "c-exp.y" 2237 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; } 2238 break; 2239 2240 case 119: 2241 #line 843 "c-exp.y" 2242 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_long_long; } 2243 break; 2244 2245 case 120: 2246 #line 845 "c-exp.y" 2247 { yyval.tval = builtin_type (current_gdbarch)->builtin_short; } 2248 break; 2249 2250 case 121: 2251 #line 847 "c-exp.y" 2252 { yyval.tval = builtin_type (current_gdbarch)->builtin_short; } 2253 break; 2254 2255 case 122: 2256 #line 849 "c-exp.y" 2257 { yyval.tval = builtin_type (current_gdbarch)->builtin_short; } 2258 break; 2259 2260 case 123: 2261 #line 851 "c-exp.y" 2262 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; } 2263 break; 2264 2265 case 124: 2266 #line 853 "c-exp.y" 2267 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; } 2268 break; 2269 2270 case 125: 2271 #line 855 "c-exp.y" 2272 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_short; } 2273 break; 2274 2275 case 126: 2276 #line 857 "c-exp.y" 2277 { yyval.tval = builtin_type (current_gdbarch)->builtin_double; } 2278 break; 2279 2280 case 127: 2281 #line 859 "c-exp.y" 2282 { yyval.tval = builtin_type (current_gdbarch)->builtin_long_double; } 2283 break; 2284 2285 case 128: 2286 #line 861 "c-exp.y" 2287 { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval), 2288 expression_context_block); } 2289 break; 2290 2291 case 129: 2292 #line 864 "c-exp.y" 2293 { yyval.tval = lookup_struct (copy_name (yyvsp[0].sval), 2294 expression_context_block); } 2295 break; 2296 2297 case 130: 2298 #line 867 "c-exp.y" 2299 { yyval.tval = lookup_union (copy_name (yyvsp[0].sval), 2300 expression_context_block); } 2301 break; 2302 2303 case 131: 2304 #line 870 "c-exp.y" 2305 { yyval.tval = lookup_enum (copy_name (yyvsp[0].sval), 2306 expression_context_block); } 2307 break; 2308 2309 case 132: 2310 #line 873 "c-exp.y" 2311 { yyval.tval = lookup_unsigned_typename (TYPE_NAME(yyvsp[0].tsym.type)); } 2312 break; 2313 2314 case 133: 2315 #line 875 "c-exp.y" 2316 { yyval.tval = builtin_type (current_gdbarch)->builtin_unsigned_int; } 2317 break; 2318 2319 case 134: 2320 #line 877 "c-exp.y" 2321 { yyval.tval = lookup_signed_typename (TYPE_NAME(yyvsp[0].tsym.type)); } 2322 break; 2323 2324 case 135: 2325 #line 879 "c-exp.y" 2326 { yyval.tval = builtin_type (current_gdbarch)->builtin_int; } 2327 break; 2328 2329 case 136: 2330 #line 884 "c-exp.y" 2331 { yyval.tval = lookup_template_type(copy_name(yyvsp[-3].sval), yyvsp[-1].tval, 2332 expression_context_block); 2333 } 2334 break; 2335 2336 case 137: 2337 #line 888 "c-exp.y" 2338 { yyval.tval = follow_types (yyvsp[0].tval); } 2339 break; 2340 2341 case 138: 2342 #line 890 "c-exp.y" 2343 { yyval.tval = follow_types (yyvsp[-1].tval); } 2344 break; 2345 2346 case 140: 2347 #line 940 "c-exp.y" 2348 { 2349 struct type *type = yyvsp[-2].tval; 2350 struct type *new_type; 2351 char *ncopy = alloca (yyvsp[0].sval.length + 1); 2352 2353 memcpy (ncopy, yyvsp[0].sval.ptr, yyvsp[0].sval.length); 2354 ncopy[yyvsp[0].sval.length] = '\0'; 2355 2356 if (TYPE_CODE (type) != TYPE_CODE_STRUCT 2357 && TYPE_CODE (type) != TYPE_CODE_UNION 2358 && TYPE_CODE (type) != TYPE_CODE_NAMESPACE) 2359 error ("`%s' is not defined as an aggregate type.", 2360 TYPE_NAME (type)); 2361 2362 new_type = cp_lookup_nested_type (type, ncopy, 2363 expression_context_block); 2364 if (new_type == NULL) 2365 error ("No type \"%s\" within class or namespace \"%s\".", 2366 ncopy, TYPE_NAME (type)); 2367 2368 yyval.tval = new_type; 2369 } 2370 break; 2371 2372 case 142: 2373 #line 966 "c-exp.y" 2374 { 2375 yyval.tsym.stoken.ptr = "int"; 2376 yyval.tsym.stoken.length = 3; 2377 yyval.tsym.type = builtin_type (current_gdbarch)->builtin_int; 2378 } 2379 break; 2380 2381 case 143: 2382 #line 972 "c-exp.y" 2383 { 2384 yyval.tsym.stoken.ptr = "long"; 2385 yyval.tsym.stoken.length = 4; 2386 yyval.tsym.type = builtin_type (current_gdbarch)->builtin_long; 2387 } 2388 break; 2389 2390 case 144: 2391 #line 978 "c-exp.y" 2392 { 2393 yyval.tsym.stoken.ptr = "short"; 2394 yyval.tsym.stoken.length = 5; 2395 yyval.tsym.type = builtin_type (current_gdbarch)->builtin_short; 2396 } 2397 break; 2398 2399 case 145: 2400 #line 987 "c-exp.y" 2401 { yyval.tvec = (struct type **) xmalloc (sizeof (struct type *) * 2); 2402 yyval.ivec[0] = 1; /* Number of types in vector */ 2403 yyval.tvec[1] = yyvsp[0].tval; 2404 } 2405 break; 2406 2407 case 146: 2408 #line 992 "c-exp.y" 2409 { int len = sizeof (struct type *) * (++(yyvsp[-2].ivec[0]) + 1); 2410 yyval.tvec = (struct type **) xrealloc ((char *) yyvsp[-2].tvec, len); 2411 yyval.tvec[yyval.ivec[0]] = yyvsp[0].tval; 2412 } 2413 break; 2414 2415 case 148: 2416 #line 1000 "c-exp.y" 2417 { yyval.tval = follow_types (yyvsp[-3].tval); } 2418 break; 2419 2420 case 151: 2421 #line 1008 "c-exp.y" 2422 { push_type (tp_const); 2423 push_type (tp_volatile); 2424 } 2425 break; 2426 2427 case 152: 2428 #line 1012 "c-exp.y" 2429 { push_type (tp_const); } 2430 break; 2431 2432 case 153: 2433 #line 1014 "c-exp.y" 2434 { push_type (tp_volatile); } 2435 break; 2436 2437 case 154: 2438 #line 1017 "c-exp.y" 2439 { yyval.sval = yyvsp[0].ssym.stoken; } 2440 break; 2441 2442 case 155: 2443 #line 1018 "c-exp.y" 2444 { yyval.sval = yyvsp[0].ssym.stoken; } 2445 break; 2446 2447 case 156: 2448 #line 1019 "c-exp.y" 2449 { yyval.sval = yyvsp[0].tsym.stoken; } 2450 break; 2451 2452 case 157: 2453 #line 1020 "c-exp.y" 2454 { yyval.sval = yyvsp[0].ssym.stoken; } 2455 break; 2456 2457 2458 } 2459 2460 /* Line 1000 of yacc.c. */ 2461 2462 yyvsp -= yylen; 2463 yyssp -= yylen; 2464 2465 2466 YY_STACK_PRINT (yyss, yyssp); 2467 2468 *++yyvsp = yyval; 2469 2470 2471 /* Now `shift' the result of the reduction. Determine what state 2472 that goes to, based on the state we popped back to and the rule 2473 number reduced by. */ 2474 2475 yyn = yyr1[yyn]; 2476 2477 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 2478 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 2479 yystate = yytable[yystate]; 2480 else 2481 yystate = yydefgoto[yyn - YYNTOKENS]; 2482 2483 goto yynewstate; 2484 2485 2486 /*------------------------------------. 2487 | yyerrlab -- here on detecting error | 2488 `------------------------------------*/ 2489 yyerrlab: 2490 /* If not already recovering from an error, report this error. */ 2491 if (!yyerrstatus) 2492 { 2493 ++yynerrs; 2494 #if YYERROR_VERBOSE 2495 yyn = yypact[yystate]; 2496 2497 if (YYPACT_NINF < yyn && yyn < YYLAST) 2498 { 2499 YYSIZE_T yysize = 0; 2500 int yytype = YYTRANSLATE (yychar); 2501 const char* yyprefix; 2502 char *yymsg; 2503 int yyx; 2504 2505 /* Start YYX at -YYN if negative to avoid negative indexes in 2506 YYCHECK. */ 2507 int yyxbegin = yyn < 0 ? -yyn : 0; 2508 2509 /* Stay within bounds of both yycheck and yytname. */ 2510 int yychecklim = YYLAST - yyn; 2511 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 2512 int yycount = 0; 2513 2514 yyprefix = ", expecting "; 2515 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 2516 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 2517 { 2518 yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]); 2519 yycount += 1; 2520 if (yycount == 5) 2521 { 2522 yysize = 0; 2523 break; 2524 } 2525 } 2526 yysize += (sizeof ("syntax error, unexpected ") 2527 + yystrlen (yytname[yytype])); 2528 yymsg = (char *) YYSTACK_ALLOC (yysize); 2529 if (yymsg != 0) 2530 { 2531 char *yyp = yystpcpy (yymsg, "syntax error, unexpected "); 2532 yyp = yystpcpy (yyp, yytname[yytype]); 2533 2534 if (yycount < 5) 2535 { 2536 yyprefix = ", expecting "; 2537 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 2538 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 2539 { 2540 yyp = yystpcpy (yyp, yyprefix); 2541 yyp = yystpcpy (yyp, yytname[yyx]); 2542 yyprefix = " or "; 2543 } 2544 } 2545 yyerror (yymsg); 2546 YYSTACK_FREE (yymsg); 2547 } 2548 else 2549 yyerror ("syntax error; also virtual memory exhausted"); 2550 } 2551 else 2552 #endif /* YYERROR_VERBOSE */ 2553 yyerror ("syntax error"); 2554 } 2555 2556 2557 2558 if (yyerrstatus == 3) 2559 { 2560 /* If just tried and failed to reuse lookahead token after an 2561 error, discard it. */ 2562 2563 if (yychar <= YYEOF) 2564 { 2565 /* If at end of input, pop the error token, 2566 then the rest of the stack, then return failure. */ 2567 if (yychar == YYEOF) 2568 for (;;) 2569 { 2570 YYPOPSTACK; 2571 if (yyssp == yyss) 2572 YYABORT; 2573 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); 2574 yydestruct (yystos[*yyssp], yyvsp); 2575 } 2576 } 2577 else 2578 { 2579 YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc); 2580 yydestruct (yytoken, &yylval); 2581 yychar = YYEMPTY; 2582 2583 } 2584 } 2585 2586 /* Else will try to reuse lookahead token after shifting the error 2587 token. */ 2588 goto yyerrlab1; 2589 2590 2591 /*---------------------------------------------------. 2592 | yyerrorlab -- error raised explicitly by YYERROR. | 2593 `---------------------------------------------------*/ 2594 yyerrorlab: 2595 2596 #ifdef __GNUC__ 2597 /* Pacify GCC when the user code never invokes YYERROR and the label 2598 yyerrorlab therefore never appears in user code. */ 2599 if (0) 2600 goto yyerrorlab; 2601 #endif 2602 2603 yyvsp -= yylen; 2604 yyssp -= yylen; 2605 yystate = *yyssp; 2606 goto yyerrlab1; 2607 2608 2609 /*-------------------------------------------------------------. 2610 | yyerrlab1 -- common code for both syntax error and YYERROR. | 2611 `-------------------------------------------------------------*/ 2612 yyerrlab1: 2613 yyerrstatus = 3; /* Each real token shifted decrements this. */ 2614 2615 for (;;) 2616 { 2617 yyn = yypact[yystate]; 2618 if (yyn != YYPACT_NINF) 2619 { 2620 yyn += YYTERROR; 2621 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 2622 { 2623 yyn = yytable[yyn]; 2624 if (0 < yyn) 2625 break; 2626 } 2627 } 2628 2629 /* Pop the current state because it cannot handle the error token. */ 2630 if (yyssp == yyss) 2631 YYABORT; 2632 2633 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp); 2634 yydestruct (yystos[yystate], yyvsp); 2635 YYPOPSTACK; 2636 yystate = *yyssp; 2637 YY_STACK_PRINT (yyss, yyssp); 2638 } 2639 2640 if (yyn == YYFINAL) 2641 YYACCEPT; 2642 2643 YYDPRINTF ((stderr, "Shifting error token, ")); 2644 2645 *++yyvsp = yylval; 2646 2647 2648 yystate = yyn; 2649 goto yynewstate; 2650 2651 2652 /*-------------------------------------. 2653 | yyacceptlab -- YYACCEPT comes here. | 2654 `-------------------------------------*/ 2655 yyacceptlab: 2656 yyresult = 0; 2657 goto yyreturn; 2658 2659 /*-----------------------------------. 2660 | yyabortlab -- YYABORT comes here. | 2661 `-----------------------------------*/ 2662 yyabortlab: 2663 yyresult = 1; 2664 goto yyreturn; 2665 2666 #ifndef yyoverflow 2667 /*----------------------------------------------. 2668 | yyoverflowlab -- parser overflow comes here. | 2669 `----------------------------------------------*/ 2670 yyoverflowlab: 2671 yyerror ("parser stack overflow"); 2672 yyresult = 2; 2673 /* Fall through. */ 2674 #endif 2675 2676 yyreturn: 2677 #ifndef yyoverflow 2678 if (yyss != yyssa) 2679 YYSTACK_FREE (yyss); 2680 #endif 2681 return yyresult; 2682 } 2683 2684 2685 #line 1034 "c-exp.y" 2686 2687 2688 /* Take care of parsing a number (anything that starts with a digit). 2689 Set yylval and return the token type; update lexptr. 2690 LEN is the number of characters in it. */ 2691 2692 /*** Needs some error checking for the float case ***/ 2693 2694 static int 2695 parse_number (p, len, parsed_float, putithere) 2696 char *p; 2697 int len; 2698 int parsed_float; 2699 YYSTYPE *putithere; 2700 { 2701 /* FIXME: Shouldn't these be unsigned? We don't deal with negative values 2702 here, and we do kind of silly things like cast to unsigned. */ 2703 LONGEST n = 0; 2704 LONGEST prevn = 0; 2705 ULONGEST un; 2706 2707 int i = 0; 2708 int c; 2709 int base = input_radix; 2710 int unsigned_p = 0; 2711 2712 /* Number of "L" suffixes encountered. */ 2713 int long_p = 0; 2714 2715 /* We have found a "L" or "U" suffix. */ 2716 int found_suffix = 0; 2717 2718 ULONGEST high_bit; 2719 struct type *signed_type; 2720 struct type *unsigned_type; 2721 2722 if (parsed_float) 2723 { 2724 /* It's a float since it contains a point or an exponent. */ 2725 char c; 2726 int num = 0; /* number of tokens scanned by scanf */ 2727 char saved_char = p[len]; 2728 2729 p[len] = 0; /* null-terminate the token */ 2730 if (sizeof (putithere->typed_val_float.dval) <= sizeof (float)) 2731 num = sscanf (p, "%g%c", (float *) &putithere->typed_val_float.dval,&c); 2732 else if (sizeof (putithere->typed_val_float.dval) <= sizeof (double)) 2733 num = sscanf (p, "%lg%c", (double *) &putithere->typed_val_float.dval,&c); 2734 else 2735 { 2736 #ifdef SCANF_HAS_LONG_DOUBLE 2737 num = sscanf (p, "%Lg%c", &putithere->typed_val_float.dval,&c); 2738 #else 2739 /* Scan it into a double, then assign it to the long double. 2740 This at least wins with values representable in the range 2741 of doubles. */ 2742 double temp; 2743 num = sscanf (p, "%lg%c", &temp,&c); 2744 putithere->typed_val_float.dval = temp; 2745 #endif 2746 } 2747 p[len] = saved_char; /* restore the input stream */ 2748 if (num != 1) /* check scanf found ONLY a float ... */ 2749 return ERROR; 2750 /* See if it has `f' or `l' suffix (float or long double). */ 2751 2752 c = tolower (p[len - 1]); 2753 2754 if (c == 'f') 2755 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_float; 2756 else if (c == 'l') 2757 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_long_double; 2758 else if (isdigit (c) || c == '.') 2759 putithere->typed_val_float.type = builtin_type (current_gdbarch)->builtin_double; 2760 else 2761 return ERROR; 2762 2763 return FLOAT; 2764 } 2765 2766 /* Handle base-switching prefixes 0x, 0t, 0d, 0 */ 2767 if (p[0] == '0') 2768 switch (p[1]) 2769 { 2770 case 'x': 2771 case 'X': 2772 if (len >= 3) 2773 { 2774 p += 2; 2775 base = 16; 2776 len -= 2; 2777 } 2778 break; 2779 2780 case 't': 2781 case 'T': 2782 case 'd': 2783 case 'D': 2784 if (len >= 3) 2785 { 2786 p += 2; 2787 base = 10; 2788 len -= 2; 2789 } 2790 break; 2791 2792 default: 2793 base = 8; 2794 break; 2795 } 2796 2797 while (len-- > 0) 2798 { 2799 c = *p++; 2800 if (c >= 'A' && c <= 'Z') 2801 c += 'a' - 'A'; 2802 if (c != 'l' && c != 'u') 2803 n *= base; 2804 if (c >= '0' && c <= '9') 2805 { 2806 if (found_suffix) 2807 return ERROR; 2808 n += i = c - '0'; 2809 } 2810 else 2811 { 2812 if (base > 10 && c >= 'a' && c <= 'f') 2813 { 2814 if (found_suffix) 2815 return ERROR; 2816 n += i = c - 'a' + 10; 2817 } 2818 else if (c == 'l') 2819 { 2820 ++long_p; 2821 found_suffix = 1; 2822 } 2823 else if (c == 'u') 2824 { 2825 unsigned_p = 1; 2826 found_suffix = 1; 2827 } 2828 else 2829 return ERROR; /* Char not a digit */ 2830 } 2831 if (i >= base) 2832 return ERROR; /* Invalid digit in this base */ 2833 2834 /* Portably test for overflow (only works for nonzero values, so make 2835 a second check for zero). FIXME: Can't we just make n and prevn 2836 unsigned and avoid this? */ 2837 if (c != 'l' && c != 'u' && (prevn >= n) && n != 0) 2838 unsigned_p = 1; /* Try something unsigned */ 2839 2840 /* Portably test for unsigned overflow. 2841 FIXME: This check is wrong; for example it doesn't find overflow 2842 on 0x123456789 when LONGEST is 32 bits. */ 2843 if (c != 'l' && c != 'u' && n != 0) 2844 { 2845 if ((unsigned_p && (ULONGEST) prevn >= (ULONGEST) n)) 2846 error ("Numeric constant too large."); 2847 } 2848 prevn = n; 2849 } 2850 2851 /* An integer constant is an int, a long, or a long long. An L 2852 suffix forces it to be long; an LL suffix forces it to be long 2853 long. If not forced to a larger size, it gets the first type of 2854 the above that it fits in. To figure out whether it fits, we 2855 shift it right and see whether anything remains. Note that we 2856 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one 2857 operation, because many compilers will warn about such a shift 2858 (which always produces a zero result). Sometimes TARGET_INT_BIT 2859 or TARGET_LONG_BIT will be that big, sometimes not. To deal with 2860 the case where it is we just always shift the value more than 2861 once, with fewer bits each time. */ 2862 2863 un = (ULONGEST)n >> 2; 2864 if (long_p == 0 2865 && (un >> (TARGET_INT_BIT - 2)) == 0) 2866 { 2867 high_bit = ((ULONGEST)1) << (TARGET_INT_BIT-1); 2868 2869 /* A large decimal (not hex or octal) constant (between INT_MAX 2870 and UINT_MAX) is a long or unsigned long, according to ANSI, 2871 never an unsigned int, but this code treats it as unsigned 2872 int. This probably should be fixed. GCC gives a warning on 2873 such constants. */ 2874 2875 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_int; 2876 signed_type = builtin_type (current_gdbarch)->builtin_int; 2877 } 2878 else if (long_p <= 1 2879 && (un >> (TARGET_LONG_BIT - 2)) == 0) 2880 { 2881 high_bit = ((ULONGEST)1) << (TARGET_LONG_BIT-1); 2882 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long; 2883 signed_type = builtin_type (current_gdbarch)->builtin_long; 2884 } 2885 else 2886 { 2887 int shift; 2888 if (sizeof (ULONGEST) * HOST_CHAR_BIT < TARGET_LONG_LONG_BIT) 2889 /* A long long does not fit in a LONGEST. */ 2890 shift = (sizeof (ULONGEST) * HOST_CHAR_BIT - 1); 2891 else 2892 shift = (TARGET_LONG_LONG_BIT - 1); 2893 high_bit = (ULONGEST) 1 << shift; 2894 unsigned_type = builtin_type (current_gdbarch)->builtin_unsigned_long_long; 2895 signed_type = builtin_type (current_gdbarch)->builtin_long_long; 2896 } 2897 2898 putithere->typed_val_int.val = n; 2899 2900 /* If the high bit of the worked out type is set then this number 2901 has to be unsigned. */ 2902 2903 if (unsigned_p || (n & high_bit)) 2904 { 2905 putithere->typed_val_int.type = unsigned_type; 2906 } 2907 else 2908 { 2909 putithere->typed_val_int.type = signed_type; 2910 } 2911 2912 return INT; 2913 } 2914 2915 struct token 2916 { 2917 char *operator; 2918 int token; 2919 enum exp_opcode opcode; 2920 }; 2921 2922 static const struct token tokentab3[] = 2923 { 2924 {">>=", ASSIGN_MODIFY, BINOP_RSH}, 2925 {"<<=", ASSIGN_MODIFY, BINOP_LSH} 2926 }; 2927 2928 static const struct token tokentab2[] = 2929 { 2930 {"+=", ASSIGN_MODIFY, BINOP_ADD}, 2931 {"-=", ASSIGN_MODIFY, BINOP_SUB}, 2932 {"*=", ASSIGN_MODIFY, BINOP_MUL}, 2933 {"/=", ASSIGN_MODIFY, BINOP_DIV}, 2934 {"%=", ASSIGN_MODIFY, BINOP_REM}, 2935 {"|=", ASSIGN_MODIFY, BINOP_BITWISE_IOR}, 2936 {"&=", ASSIGN_MODIFY, BINOP_BITWISE_AND}, 2937 {"^=", ASSIGN_MODIFY, BINOP_BITWISE_XOR}, 2938 {"++", INCREMENT, BINOP_END}, 2939 {"--", DECREMENT, BINOP_END}, 2940 {"->", ARROW, BINOP_END}, 2941 {"&&", ANDAND, BINOP_END}, 2942 {"||", OROR, BINOP_END}, 2943 {"::", COLONCOLON, BINOP_END}, 2944 {"<<", LSH, BINOP_END}, 2945 {">>", RSH, BINOP_END}, 2946 {"==", EQUAL, BINOP_END}, 2947 {"!=", NOTEQUAL, BINOP_END}, 2948 {"<=", LEQ, BINOP_END}, 2949 {">=", GEQ, BINOP_END} 2950 }; 2951 2952 /* Read one token, getting characters through lexptr. */ 2953 2954 static int 2955 yylex () 2956 { 2957 int c; 2958 int namelen; 2959 unsigned int i; 2960 char *tokstart; 2961 char *tokptr; 2962 int tempbufindex; 2963 static char *tempbuf; 2964 static int tempbufsize; 2965 struct symbol * sym_class = NULL; 2966 char * token_string = NULL; 2967 int class_prefix = 0; 2968 int unquoted_expr; 2969 2970 retry: 2971 2972 /* Check if this is a macro invocation that we need to expand. */ 2973 if (! scanning_macro_expansion ()) 2974 { 2975 char *expanded = macro_expand_next (&lexptr, 2976 expression_macro_lookup_func, 2977 expression_macro_lookup_baton); 2978 2979 if (expanded) 2980 scan_macro_expansion (expanded); 2981 } 2982 2983 prev_lexptr = lexptr; 2984 unquoted_expr = 1; 2985 2986 tokstart = lexptr; 2987 /* See if it is a special token of length 3. */ 2988 for (i = 0; i < sizeof tokentab3 / sizeof tokentab3[0]; i++) 2989 if (strncmp (tokstart, tokentab3[i].operator, 3) == 0) 2990 { 2991 lexptr += 3; 2992 yylval.opcode = tokentab3[i].opcode; 2993 return tokentab3[i].token; 2994 } 2995 2996 /* See if it is a special token of length 2. */ 2997 for (i = 0; i < sizeof tokentab2 / sizeof tokentab2[0]; i++) 2998 if (strncmp (tokstart, tokentab2[i].operator, 2) == 0) 2999 { 3000 lexptr += 2; 3001 yylval.opcode = tokentab2[i].opcode; 3002 return tokentab2[i].token; 3003 } 3004 3005 switch (c = *tokstart) 3006 { 3007 case 0: 3008 /* If we were just scanning the result of a macro expansion, 3009 then we need to resume scanning the original text. 3010 Otherwise, we were already scanning the original text, and 3011 we're really done. */ 3012 if (scanning_macro_expansion ()) 3013 { 3014 finished_macro_expansion (); 3015 goto retry; 3016 } 3017 else 3018 return 0; 3019 3020 case ' ': 3021 case '\t': 3022 case '\n': 3023 lexptr++; 3024 goto retry; 3025 3026 case '\'': 3027 /* We either have a character constant ('0' or '\177' for example) 3028 or we have a quoted symbol reference ('foo(int,int)' in C++ 3029 for example). */ 3030 lexptr++; 3031 c = *lexptr++; 3032 if (c == '\\') 3033 c = parse_escape (&lexptr); 3034 else if (c == '\'') 3035 error ("Empty character constant."); 3036 else if (! host_char_to_target (c, &c)) 3037 { 3038 int toklen = lexptr - tokstart + 1; 3039 char *tok = alloca (toklen + 1); 3040 memcpy (tok, tokstart, toklen); 3041 tok[toklen] = '\0'; 3042 error ("There is no character corresponding to %s in the target " 3043 "character set `%s'.", tok, target_charset ()); 3044 } 3045 3046 yylval.typed_val_int.val = c; 3047 yylval.typed_val_int.type = builtin_type (current_gdbarch)->builtin_char; 3048 3049 c = *lexptr++; 3050 if (c != '\'') 3051 { 3052 namelen = skip_quoted (tokstart) - tokstart; 3053 if (namelen > 2) 3054 { 3055 lexptr = tokstart + namelen; 3056 unquoted_expr = 0; 3057 if (lexptr[-1] != '\'') 3058 error ("Unmatched single quote."); 3059 namelen -= 2; 3060 tokstart++; 3061 goto tryname; 3062 } 3063 error ("Invalid character constant."); 3064 } 3065 return INT; 3066 3067 case '(': 3068 paren_depth++; 3069 lexptr++; 3070 return c; 3071 3072 case ')': 3073 if (paren_depth == 0) 3074 return 0; 3075 paren_depth--; 3076 lexptr++; 3077 return c; 3078 3079 case ',': 3080 if (comma_terminates 3081 && paren_depth == 0 3082 && ! scanning_macro_expansion ()) 3083 return 0; 3084 lexptr++; 3085 return c; 3086 3087 case '.': 3088 /* Might be a floating point number. */ 3089 if (lexptr[1] < '0' || lexptr[1] > '9') 3090 goto symbol; /* Nope, must be a symbol. */ 3091 /* FALL THRU into number case. */ 3092 3093 case '0': 3094 case '1': 3095 case '2': 3096 case '3': 3097 case '4': 3098 case '5': 3099 case '6': 3100 case '7': 3101 case '8': 3102 case '9': 3103 { 3104 /* It's a number. */ 3105 int got_dot = 0, got_e = 0, toktype; 3106 char *p = tokstart; 3107 int hex = input_radix > 10; 3108 3109 if (c == '0' && (p[1] == 'x' || p[1] == 'X')) 3110 { 3111 p += 2; 3112 hex = 1; 3113 } 3114 else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D')) 3115 { 3116 p += 2; 3117 hex = 0; 3118 } 3119 3120 for (;; ++p) 3121 { 3122 /* This test includes !hex because 'e' is a valid hex digit 3123 and thus does not indicate a floating point number when 3124 the radix is hex. */ 3125 if (!hex && !got_e && (*p == 'e' || *p == 'E')) 3126 got_dot = got_e = 1; 3127 /* This test does not include !hex, because a '.' always indicates 3128 a decimal floating point number regardless of the radix. */ 3129 else if (!got_dot && *p == '.') 3130 got_dot = 1; 3131 else if (got_e && (p[-1] == 'e' || p[-1] == 'E') 3132 && (*p == '-' || *p == '+')) 3133 /* This is the sign of the exponent, not the end of the 3134 number. */ 3135 continue; 3136 /* We will take any letters or digits. parse_number will 3137 complain if past the radix, or if L or U are not final. */ 3138 else if ((*p < '0' || *p > '9') 3139 && ((*p < 'a' || *p > 'z') 3140 && (*p < 'A' || *p > 'Z'))) 3141 break; 3142 } 3143 toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval); 3144 if (toktype == ERROR) 3145 { 3146 char *err_copy = (char *) alloca (p - tokstart + 1); 3147 3148 memcpy (err_copy, tokstart, p - tokstart); 3149 err_copy[p - tokstart] = 0; 3150 error ("Invalid number \"%s\".", err_copy); 3151 } 3152 lexptr = p; 3153 return toktype; 3154 } 3155 3156 case '+': 3157 case '-': 3158 case '*': 3159 case '/': 3160 case '%': 3161 case '|': 3162 case '&': 3163 case '^': 3164 case '~': 3165 case '!': 3166 case '@': 3167 case '<': 3168 case '>': 3169 case '[': 3170 case ']': 3171 case '?': 3172 case ':': 3173 case '=': 3174 case '{': 3175 case '}': 3176 symbol: 3177 lexptr++; 3178 return c; 3179 3180 case '"': 3181 3182 /* Build the gdb internal form of the input string in tempbuf, 3183 translating any standard C escape forms seen. Note that the 3184 buffer is null byte terminated *only* for the convenience of 3185 debugging gdb itself and printing the buffer contents when 3186 the buffer contains no embedded nulls. Gdb does not depend 3187 upon the buffer being null byte terminated, it uses the length 3188 string instead. This allows gdb to handle C strings (as well 3189 as strings in other languages) with embedded null bytes */ 3190 3191 tokptr = ++tokstart; 3192 tempbufindex = 0; 3193 3194 do { 3195 char *char_start_pos = tokptr; 3196 3197 /* Grow the static temp buffer if necessary, including allocating 3198 the first one on demand. */ 3199 if (tempbufindex + 1 >= tempbufsize) 3200 { 3201 tempbuf = (char *) xrealloc (tempbuf, tempbufsize += 64); 3202 } 3203 switch (*tokptr) 3204 { 3205 case '\0': 3206 case '"': 3207 /* Do nothing, loop will terminate. */ 3208 break; 3209 case '\\': 3210 tokptr++; 3211 c = parse_escape (&tokptr); 3212 if (c == -1) 3213 { 3214 continue; 3215 } 3216 tempbuf[tempbufindex++] = c; 3217 break; 3218 default: 3219 c = *tokptr++; 3220 if (! host_char_to_target (c, &c)) 3221 { 3222 int len = tokptr - char_start_pos; 3223 char *copy = alloca (len + 1); 3224 memcpy (copy, char_start_pos, len); 3225 copy[len] = '\0'; 3226 3227 error ("There is no character corresponding to `%s' " 3228 "in the target character set `%s'.", 3229 copy, target_charset ()); 3230 } 3231 tempbuf[tempbufindex++] = c; 3232 break; 3233 } 3234 } while ((*tokptr != '"') && (*tokptr != '\0')); 3235 if (*tokptr++ != '"') 3236 { 3237 error ("Unterminated string in expression."); 3238 } 3239 tempbuf[tempbufindex] = '\0'; /* See note above */ 3240 yylval.sval.ptr = tempbuf; 3241 yylval.sval.length = tempbufindex; 3242 lexptr = tokptr; 3243 return (STRING); 3244 } 3245 3246 if (!(c == '_' || c == '$' 3247 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) 3248 /* We must have come across a bad character (e.g. ';'). */ 3249 error ("Invalid character '%c' in expression.", c); 3250 3251 /* It's a name. See how long it is. */ 3252 namelen = 0; 3253 for (c = tokstart[namelen]; 3254 (c == '_' || c == '$' || (c >= '0' && c <= '9') 3255 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');) 3256 { 3257 /* Template parameter lists are part of the name. 3258 FIXME: This mishandles `print $a<4&&$a>3'. */ 3259 3260 if (c == '<') 3261 { 3262 /* Scan ahead to get rest of the template specification. Note 3263 that we look ahead only when the '<' adjoins non-whitespace 3264 characters; for comparison expressions, e.g. "a < b > c", 3265 there must be spaces before the '<', etc. */ 3266 3267 char * p = find_template_name_end (tokstart + namelen); 3268 if (p) 3269 namelen = p - tokstart; 3270 break; 3271 } 3272 c = tokstart[++namelen]; 3273 } 3274 3275 /* The token "if" terminates the expression and is NOT removed from 3276 the input stream. It doesn't count if it appears in the 3277 expansion of a macro. */ 3278 if (namelen == 2 3279 && tokstart[0] == 'i' 3280 && tokstart[1] == 'f' 3281 && ! scanning_macro_expansion ()) 3282 { 3283 return 0; 3284 } 3285 3286 lexptr += namelen; 3287 3288 tryname: 3289 3290 /* Catch specific keywords. Should be done with a data structure. */ 3291 switch (namelen) 3292 { 3293 case 8: 3294 if (strncmp (tokstart, "unsigned", 8) == 0) 3295 return UNSIGNED; 3296 if (current_language->la_language == language_cplus 3297 && strncmp (tokstart, "template", 8) == 0) 3298 return TEMPLATE; 3299 if (strncmp (tokstart, "volatile", 8) == 0) 3300 return VOLATILE_KEYWORD; 3301 break; 3302 case 6: 3303 if (strncmp (tokstart, "struct", 6) == 0) 3304 return STRUCT; 3305 if (strncmp (tokstart, "signed", 6) == 0) 3306 return SIGNED_KEYWORD; 3307 if (strncmp (tokstart, "sizeof", 6) == 0) 3308 return SIZEOF; 3309 if (strncmp (tokstart, "double", 6) == 0) 3310 return DOUBLE_KEYWORD; 3311 break; 3312 case 5: 3313 if (current_language->la_language == language_cplus) 3314 { 3315 if (strncmp (tokstart, "false", 5) == 0) 3316 return FALSEKEYWORD; 3317 if (strncmp (tokstart, "class", 5) == 0) 3318 return CLASS; 3319 } 3320 if (strncmp (tokstart, "union", 5) == 0) 3321 return UNION; 3322 if (strncmp (tokstart, "short", 5) == 0) 3323 return SHORT; 3324 if (strncmp (tokstart, "const", 5) == 0) 3325 return CONST_KEYWORD; 3326 break; 3327 case 4: 3328 if (strncmp (tokstart, "enum", 4) == 0) 3329 return ENUM; 3330 if (strncmp (tokstart, "long", 4) == 0) 3331 return LONG; 3332 if (current_language->la_language == language_cplus) 3333 { 3334 if (strncmp (tokstart, "true", 4) == 0) 3335 return TRUEKEYWORD; 3336 } 3337 break; 3338 case 3: 3339 if (strncmp (tokstart, "int", 3) == 0) 3340 return INT_KEYWORD; 3341 break; 3342 default: 3343 break; 3344 } 3345 3346 yylval.sval.ptr = tokstart; 3347 yylval.sval.length = namelen; 3348 3349 if (*tokstart == '$') 3350 { 3351 write_dollar_variable (yylval.sval); 3352 return VARIABLE; 3353 } 3354 3355 /* Look ahead and see if we can consume more of the input 3356 string to get a reasonable class/namespace spec or a 3357 fully-qualified name. This is a kludge to get around the 3358 HP aCC compiler's generation of symbol names with embedded 3359 colons for namespace and nested classes. */ 3360 3361 /* NOTE: carlton/2003-09-24: I don't entirely understand the 3362 HP-specific code, either here or in linespec. Having said that, 3363 I suspect that we're actually moving towards their model: we want 3364 symbols whose names are fully qualified, which matches the 3365 description above. */ 3366 if (unquoted_expr) 3367 { 3368 /* Only do it if not inside single quotes */ 3369 sym_class = parse_nested_classes_for_hpacc (yylval.sval.ptr, yylval.sval.length, 3370 &token_string, &class_prefix, &lexptr); 3371 if (sym_class) 3372 { 3373 /* Replace the current token with the bigger one we found */ 3374 yylval.sval.ptr = token_string; 3375 yylval.sval.length = strlen (token_string); 3376 } 3377 } 3378 3379 /* Use token-type BLOCKNAME for symbols that happen to be defined as 3380 functions or symtabs. If this is not so, then ... 3381 Use token-type TYPENAME for symbols that happen to be defined 3382 currently as names of types; NAME for other symbols. 3383 The caller is not constrained to care about the distinction. */ 3384 { 3385 char *tmp = copy_name (yylval.sval); 3386 struct symbol *sym; 3387 int is_a_field_of_this = 0; 3388 int hextype; 3389 3390 sym = lookup_symbol (tmp, expression_context_block, 3391 VAR_DOMAIN, 3392 current_language->la_language == language_cplus 3393 ? &is_a_field_of_this : (int *) NULL, 3394 (struct symtab **) NULL); 3395 /* Call lookup_symtab, not lookup_partial_symtab, in case there are 3396 no psymtabs (coff, xcoff, or some future change to blow away the 3397 psymtabs once once symbols are read). */ 3398 if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK) 3399 { 3400 yylval.ssym.sym = sym; 3401 yylval.ssym.is_a_field_of_this = is_a_field_of_this; 3402 return BLOCKNAME; 3403 } 3404 else if (!sym) 3405 { /* See if it's a file name. */ 3406 struct symtab *symtab; 3407 3408 symtab = lookup_symtab (tmp); 3409 3410 if (symtab) 3411 { 3412 yylval.bval = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab), STATIC_BLOCK); 3413 return FILENAME; 3414 } 3415 } 3416 3417 if (sym && SYMBOL_CLASS (sym) == LOC_TYPEDEF) 3418 { 3419 /* NOTE: carlton/2003-09-25: There used to be code here to 3420 handle nested types. It didn't work very well. See the 3421 comment before qualified_type for more info. */ 3422 yylval.tsym.type = SYMBOL_TYPE (sym); 3423 return TYPENAME; 3424 } 3425 yylval.tsym.type 3426 = language_lookup_primitive_type_by_name (current_language, 3427 current_gdbarch, tmp); 3428 if (yylval.tsym.type != NULL) 3429 return TYPENAME; 3430 3431 /* Input names that aren't symbols but ARE valid hex numbers, 3432 when the input radix permits them, can be names or numbers 3433 depending on the parse. Note we support radixes > 16 here. */ 3434 if (!sym && 3435 ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) || 3436 (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10))) 3437 { 3438 YYSTYPE newlval; /* Its value is ignored. */ 3439 hextype = parse_number (tokstart, namelen, 0, &newlval); 3440 if (hextype == INT) 3441 { 3442 yylval.ssym.sym = sym; 3443 yylval.ssym.is_a_field_of_this = is_a_field_of_this; 3444 return NAME_OR_INT; 3445 } 3446 } 3447 3448 /* Any other kind of symbol */ 3449 yylval.ssym.sym = sym; 3450 yylval.ssym.is_a_field_of_this = is_a_field_of_this; 3451 return NAME; 3452 } 3453 } 3454 3455 void 3456 yyerror (msg) 3457 char *msg; 3458 { 3459 if (prev_lexptr) 3460 lexptr = prev_lexptr; 3461 3462 error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr); 3463 } 3464 3465 3466