1 /* YACC parser for Pascal expressions, for GDB. 2 Copyright (C) 2000-2023 Free Software Foundation, Inc. 3 4 This file is part of GDB. 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 3 of the License, or 9 (at your option) 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, see <http://www.gnu.org/licenses/>. */ 18 19 /* This file is derived from c-exp.y */ 20 21 /* Parse a Pascal expression from text in a string, 22 and return the result as a struct expression pointer. 23 That structure contains arithmetic operations in reverse polish, 24 with constants represented by operations that are followed by special data. 25 See expression.h for the details of the format. 26 What is important here is that it can be built up sequentially 27 during the process of parsing; the lower levels of the tree always 28 come first in the result. 29 30 Note that malloc's and realloc's in this file are transformed to 31 xmalloc and xrealloc respectively by the same sed command in the 32 makefile that remaps any other malloc/realloc inserted by the parser 33 generator. Doing this with #defines and trying to control the interaction 34 with include files (<malloc.h> and <stdlib.h> for example) just became 35 too messy, particularly when such includes can be inserted at random 36 times by the parser generator. */ 37 38 /* Known bugs or limitations: 39 - pascal string operations are not supported at all. 40 - there are some problems with boolean types. 41 - Pascal type hexadecimal constants are not supported 42 because they conflict with the internal variables format. 43 Probably also lots of other problems, less well defined PM. */ 44 %{ 45 46 #include "defs.h" 47 #include <ctype.h> 48 #include "expression.h" 49 #include "value.h" 50 #include "parser-defs.h" 51 #include "language.h" 52 #include "p-lang.h" 53 #include "bfd.h" /* Required by objfiles.h. */ 54 #include "symfile.h" /* Required by objfiles.h. */ 55 #include "objfiles.h" /* For have_full_symbols and have_partial_symbols. */ 56 #include "block.h" 57 #include "completer.h" 58 #include "expop.h" 59 60 #define parse_type(ps) builtin_type (ps->gdbarch ()) 61 62 /* Remap normal yacc parser interface names (yyparse, yylex, yyerror, 63 etc). */ 64 #define GDB_YY_REMAP_PREFIX pascal_ 65 #include "yy-remap.h" 66 67 /* The state of the parser, used internally when we are parsing the 68 expression. */ 69 70 static struct parser_state *pstate = NULL; 71 72 /* Depth of parentheses. */ 73 static int paren_depth; 74 75 int yyparse (void); 76 77 static int yylex (void); 78 79 static void yyerror (const char *); 80 81 static char *uptok (const char *, int); 82 83 using namespace expr; 84 %} 85 86 /* Although the yacc "value" of an expression is not used, 87 since the result is stored in the structure being created, 88 other node types do have values. */ 89 90 %union 91 { 92 LONGEST lval; 93 struct { 94 LONGEST val; 95 struct type *type; 96 } typed_val_int; 97 struct { 98 gdb_byte val[16]; 99 struct type *type; 100 } typed_val_float; 101 struct symbol *sym; 102 struct type *tval; 103 struct stoken sval; 104 struct ttype tsym; 105 struct symtoken ssym; 106 int voidval; 107 const struct block *bval; 108 enum exp_opcode opcode; 109 struct internalvar *ivar; 110 111 struct type **tvec; 112 int *ivec; 113 } 114 115 %{ 116 /* YYSTYPE gets defined by %union */ 117 static int parse_number (struct parser_state *, 118 const char *, int, int, YYSTYPE *); 119 120 static struct type *current_type; 121 static int leftdiv_is_integer; 122 static void push_current_type (void); 123 static void pop_current_type (void); 124 static int search_field; 125 %} 126 127 %type <voidval> exp exp1 type_exp start normal_start variable qualified_name 128 %type <tval> type typebase 129 /* %type <bval> block */ 130 131 /* Fancy type parsing. */ 132 %type <tval> ptype 133 134 %token <typed_val_int> INT 135 %token <typed_val_float> FLOAT 136 137 /* Both NAME and TYPENAME tokens represent symbols in the input, 138 and both convey their data as strings. 139 But a TYPENAME is a string that happens to be defined as a typedef 140 or builtin type name (such as int or char) 141 and a NAME is any other symbol. 142 Contexts where this distinction is not important can use the 143 nonterminal "name", which matches either NAME or TYPENAME. */ 144 145 %token <sval> STRING 146 %token <sval> FIELDNAME 147 %token <voidval> COMPLETE 148 %token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */ 149 %token <tsym> TYPENAME 150 %type <sval> name 151 %type <ssym> name_not_typename 152 153 /* A NAME_OR_INT is a symbol which is not known in the symbol table, 154 but which would parse as a valid number in the current input radix. 155 E.g. "c" when input_radix==16. Depending on the parse, it will be 156 turned into a name or into a number. */ 157 158 %token <ssym> NAME_OR_INT 159 160 %token STRUCT CLASS SIZEOF COLONCOLON 161 %token ERROR 162 163 /* Special type cases, put in to allow the parser to distinguish different 164 legal basetypes. */ 165 166 %token <sval> DOLLAR_VARIABLE 167 168 169 /* Object pascal */ 170 %token THIS 171 %token <lval> TRUEKEYWORD FALSEKEYWORD 172 173 %left ',' 174 %left ABOVE_COMMA 175 %right ASSIGN 176 %left NOT 177 %left OR 178 %left XOR 179 %left ANDAND 180 %left '=' NOTEQUAL 181 %left '<' '>' LEQ GEQ 182 %left LSH RSH DIV MOD 183 %left '@' 184 %left '+' '-' 185 %left '*' '/' 186 %right UNARY INCREMENT DECREMENT 187 %right ARROW '.' '[' '(' 188 %left '^' 189 %token <ssym> BLOCKNAME 190 %type <bval> block 191 %left COLONCOLON 192 193 194 %% 195 196 start : { current_type = NULL; 197 search_field = 0; 198 leftdiv_is_integer = 0; 199 } 200 normal_start {} 201 ; 202 203 normal_start : 204 exp1 205 | type_exp 206 ; 207 208 type_exp: type 209 { 210 pstate->push_new<type_operation> ($1); 211 current_type = $1; } ; 212 213 /* Expressions, including the comma operator. */ 214 exp1 : exp 215 | exp1 ',' exp 216 { pstate->wrap2<comma_operation> (); } 217 ; 218 219 /* Expressions, not including the comma operator. */ 220 exp : exp '^' %prec UNARY 221 { pstate->wrap<unop_ind_operation> (); 222 if (current_type) 223 current_type = current_type->target_type (); } 224 ; 225 226 exp : '@' exp %prec UNARY 227 { pstate->wrap<unop_addr_operation> (); 228 if (current_type) 229 current_type = TYPE_POINTER_TYPE (current_type); } 230 ; 231 232 exp : '-' exp %prec UNARY 233 { pstate->wrap<unary_neg_operation> (); } 234 ; 235 236 exp : NOT exp %prec UNARY 237 { pstate->wrap<unary_logical_not_operation> (); } 238 ; 239 240 exp : INCREMENT '(' exp ')' %prec UNARY 241 { pstate->wrap<preinc_operation> (); } 242 ; 243 244 exp : DECREMENT '(' exp ')' %prec UNARY 245 { pstate->wrap<predec_operation> (); } 246 ; 247 248 249 field_exp : exp '.' %prec UNARY 250 { search_field = 1; } 251 ; 252 253 exp : field_exp FIELDNAME 254 { 255 pstate->push_new<structop_operation> 256 (pstate->pop (), copy_name ($2)); 257 search_field = 0; 258 if (current_type) 259 { 260 while (current_type->code () 261 == TYPE_CODE_PTR) 262 current_type = 263 current_type->target_type (); 264 current_type = lookup_struct_elt_type ( 265 current_type, $2.ptr, 0); 266 } 267 } 268 ; 269 270 271 exp : field_exp name 272 { 273 pstate->push_new<structop_operation> 274 (pstate->pop (), copy_name ($2)); 275 search_field = 0; 276 if (current_type) 277 { 278 while (current_type->code () 279 == TYPE_CODE_PTR) 280 current_type = 281 current_type->target_type (); 282 current_type = lookup_struct_elt_type ( 283 current_type, $2.ptr, 0); 284 } 285 } 286 ; 287 exp : field_exp name COMPLETE 288 { 289 structop_base_operation *op 290 = new structop_ptr_operation (pstate->pop (), 291 copy_name ($2)); 292 pstate->mark_struct_expression (op); 293 pstate->push (operation_up (op)); 294 } 295 ; 296 exp : field_exp COMPLETE 297 { 298 structop_base_operation *op 299 = new structop_ptr_operation (pstate->pop (), ""); 300 pstate->mark_struct_expression (op); 301 pstate->push (operation_up (op)); 302 } 303 ; 304 305 exp : exp '[' 306 /* We need to save the current_type value. */ 307 { const char *arrayname; 308 int arrayfieldindex 309 = pascal_is_string_type (current_type, NULL, NULL, 310 NULL, NULL, &arrayname); 311 if (arrayfieldindex) 312 { 313 current_type 314 = (current_type 315 ->field (arrayfieldindex - 1).type ()); 316 pstate->push_new<structop_operation> 317 (pstate->pop (), arrayname); 318 } 319 push_current_type (); } 320 exp1 ']' 321 { pop_current_type (); 322 pstate->wrap2<subscript_operation> (); 323 if (current_type) 324 current_type = current_type->target_type (); } 325 ; 326 327 exp : exp '(' 328 /* This is to save the value of arglist_len 329 being accumulated by an outer function call. */ 330 { push_current_type (); 331 pstate->start_arglist (); } 332 arglist ')' %prec ARROW 333 { 334 std::vector<operation_up> args 335 = pstate->pop_vector (pstate->end_arglist ()); 336 pstate->push_new<funcall_operation> 337 (pstate->pop (), std::move (args)); 338 pop_current_type (); 339 if (current_type) 340 current_type = current_type->target_type (); 341 } 342 ; 343 344 arglist : 345 | exp 346 { pstate->arglist_len = 1; } 347 | arglist ',' exp %prec ABOVE_COMMA 348 { pstate->arglist_len++; } 349 ; 350 351 exp : type '(' exp ')' %prec UNARY 352 { if (current_type) 353 { 354 /* Allow automatic dereference of classes. */ 355 if ((current_type->code () == TYPE_CODE_PTR) 356 && (current_type->target_type ()->code () == TYPE_CODE_STRUCT) 357 && (($1)->code () == TYPE_CODE_STRUCT)) 358 pstate->wrap<unop_ind_operation> (); 359 } 360 pstate->push_new<unop_cast_operation> 361 (pstate->pop (), $1); 362 current_type = $1; } 363 ; 364 365 exp : '(' exp1 ')' 366 { } 367 ; 368 369 /* Binary operators in order of decreasing precedence. */ 370 371 exp : exp '*' exp 372 { pstate->wrap2<mul_operation> (); } 373 ; 374 375 exp : exp '/' { 376 if (current_type && is_integral_type (current_type)) 377 leftdiv_is_integer = 1; 378 } 379 exp 380 { 381 if (leftdiv_is_integer && current_type 382 && is_integral_type (current_type)) 383 { 384 pstate->push_new<unop_cast_operation> 385 (pstate->pop (), 386 parse_type (pstate)->builtin_long_double); 387 current_type 388 = parse_type (pstate)->builtin_long_double; 389 leftdiv_is_integer = 0; 390 } 391 392 pstate->wrap2<div_operation> (); 393 } 394 ; 395 396 exp : exp DIV exp 397 { pstate->wrap2<intdiv_operation> (); } 398 ; 399 400 exp : exp MOD exp 401 { pstate->wrap2<rem_operation> (); } 402 ; 403 404 exp : exp '+' exp 405 { pstate->wrap2<add_operation> (); } 406 ; 407 408 exp : exp '-' exp 409 { pstate->wrap2<sub_operation> (); } 410 ; 411 412 exp : exp LSH exp 413 { pstate->wrap2<lsh_operation> (); } 414 ; 415 416 exp : exp RSH exp 417 { pstate->wrap2<rsh_operation> (); } 418 ; 419 420 exp : exp '=' exp 421 { 422 pstate->wrap2<equal_operation> (); 423 current_type = parse_type (pstate)->builtin_bool; 424 } 425 ; 426 427 exp : exp NOTEQUAL exp 428 { 429 pstate->wrap2<notequal_operation> (); 430 current_type = parse_type (pstate)->builtin_bool; 431 } 432 ; 433 434 exp : exp LEQ exp 435 { 436 pstate->wrap2<leq_operation> (); 437 current_type = parse_type (pstate)->builtin_bool; 438 } 439 ; 440 441 exp : exp GEQ exp 442 { 443 pstate->wrap2<geq_operation> (); 444 current_type = parse_type (pstate)->builtin_bool; 445 } 446 ; 447 448 exp : exp '<' exp 449 { 450 pstate->wrap2<less_operation> (); 451 current_type = parse_type (pstate)->builtin_bool; 452 } 453 ; 454 455 exp : exp '>' exp 456 { 457 pstate->wrap2<gtr_operation> (); 458 current_type = parse_type (pstate)->builtin_bool; 459 } 460 ; 461 462 exp : exp ANDAND exp 463 { pstate->wrap2<bitwise_and_operation> (); } 464 ; 465 466 exp : exp XOR exp 467 { pstate->wrap2<bitwise_xor_operation> (); } 468 ; 469 470 exp : exp OR exp 471 { pstate->wrap2<bitwise_ior_operation> (); } 472 ; 473 474 exp : exp ASSIGN exp 475 { pstate->wrap2<assign_operation> (); } 476 ; 477 478 exp : TRUEKEYWORD 479 { 480 pstate->push_new<bool_operation> ($1); 481 current_type = parse_type (pstate)->builtin_bool; 482 } 483 ; 484 485 exp : FALSEKEYWORD 486 { 487 pstate->push_new<bool_operation> ($1); 488 current_type = parse_type (pstate)->builtin_bool; 489 } 490 ; 491 492 exp : INT 493 { 494 pstate->push_new<long_const_operation> 495 ($1.type, $1.val); 496 current_type = $1.type; 497 } 498 ; 499 500 exp : NAME_OR_INT 501 { YYSTYPE val; 502 parse_number (pstate, $1.stoken.ptr, 503 $1.stoken.length, 0, &val); 504 pstate->push_new<long_const_operation> 505 (val.typed_val_int.type, 506 val.typed_val_int.val); 507 current_type = val.typed_val_int.type; 508 } 509 ; 510 511 512 exp : FLOAT 513 { 514 float_data data; 515 std::copy (std::begin ($1.val), std::end ($1.val), 516 std::begin (data)); 517 pstate->push_new<float_const_operation> ($1.type, data); 518 } 519 ; 520 521 exp : variable 522 ; 523 524 exp : DOLLAR_VARIABLE 525 { 526 pstate->push_dollar ($1); 527 528 /* $ is the normal prefix for pascal 529 hexadecimal values but this conflicts 530 with the GDB use for debugger variables 531 so in expression to enter hexadecimal 532 values we still need to use C syntax with 533 0xff */ 534 std::string tmp ($1.ptr, $1.length); 535 /* Handle current_type. */ 536 struct internalvar *intvar 537 = lookup_only_internalvar (tmp.c_str () + 1); 538 if (intvar != nullptr) 539 { 540 scoped_value_mark mark; 541 542 value *val 543 = value_of_internalvar (pstate->gdbarch (), 544 intvar); 545 current_type = value_type (val); 546 } 547 } 548 ; 549 550 exp : SIZEOF '(' type ')' %prec UNARY 551 { 552 current_type = parse_type (pstate)->builtin_int; 553 $3 = check_typedef ($3); 554 pstate->push_new<long_const_operation> 555 (parse_type (pstate)->builtin_int, 556 $3->length ()); } 557 ; 558 559 exp : SIZEOF '(' exp ')' %prec UNARY 560 { pstate->wrap<unop_sizeof_operation> (); 561 current_type = parse_type (pstate)->builtin_int; } 562 563 exp : STRING 564 { /* C strings are converted into array constants with 565 an explicit null byte added at the end. Thus 566 the array upper bound is the string length. 567 There is no such thing in C as a completely empty 568 string. */ 569 const char *sp = $1.ptr; int count = $1.length; 570 571 std::vector<operation_up> args (count + 1); 572 for (int i = 0; i < count; ++i) 573 args[i] = (make_operation<long_const_operation> 574 (parse_type (pstate)->builtin_char, 575 *sp++)); 576 args[count] = (make_operation<long_const_operation> 577 (parse_type (pstate)->builtin_char, 578 '\0')); 579 pstate->push_new<array_operation> 580 (0, $1.length, std::move (args)); 581 } 582 ; 583 584 /* Object pascal */ 585 exp : THIS 586 { 587 struct value * this_val; 588 struct type * this_type; 589 pstate->push_new<op_this_operation> (); 590 /* We need type of this. */ 591 this_val 592 = value_of_this_silent (pstate->language ()); 593 if (this_val) 594 this_type = value_type (this_val); 595 else 596 this_type = NULL; 597 if (this_type) 598 { 599 if (this_type->code () == TYPE_CODE_PTR) 600 { 601 this_type = this_type->target_type (); 602 pstate->wrap<unop_ind_operation> (); 603 } 604 } 605 606 current_type = this_type; 607 } 608 ; 609 610 /* end of object pascal. */ 611 612 block : BLOCKNAME 613 { 614 if ($1.sym.symbol != 0) 615 $$ = $1.sym.symbol->value_block (); 616 else 617 { 618 std::string copy = copy_name ($1.stoken); 619 struct symtab *tem = 620 lookup_symtab (copy.c_str ()); 621 if (tem) 622 $$ = (tem->compunit ()->blockvector () 623 ->static_block ()); 624 else 625 error (_("No file or function \"%s\"."), 626 copy.c_str ()); 627 } 628 } 629 ; 630 631 block : block COLONCOLON name 632 { 633 std::string copy = copy_name ($3); 634 struct symbol *tem 635 = lookup_symbol (copy.c_str (), $1, 636 VAR_DOMAIN, NULL).symbol; 637 638 if (!tem || tem->aclass () != LOC_BLOCK) 639 error (_("No function \"%s\" in specified context."), 640 copy.c_str ()); 641 $$ = tem->value_block (); } 642 ; 643 644 variable: block COLONCOLON name 645 { struct block_symbol sym; 646 647 std::string copy = copy_name ($3); 648 sym = lookup_symbol (copy.c_str (), $1, 649 VAR_DOMAIN, NULL); 650 if (sym.symbol == 0) 651 error (_("No symbol \"%s\" in specified context."), 652 copy.c_str ()); 653 654 pstate->push_new<var_value_operation> (sym); 655 } 656 ; 657 658 qualified_name: typebase COLONCOLON name 659 { 660 struct type *type = $1; 661 662 if (type->code () != TYPE_CODE_STRUCT 663 && type->code () != TYPE_CODE_UNION) 664 error (_("`%s' is not defined as an aggregate type."), 665 type->name ()); 666 667 pstate->push_new<scope_operation> 668 (type, copy_name ($3)); 669 } 670 ; 671 672 variable: qualified_name 673 | COLONCOLON name 674 { 675 std::string name = copy_name ($2); 676 677 struct block_symbol sym 678 = lookup_symbol (name.c_str (), nullptr, 679 VAR_DOMAIN, nullptr); 680 pstate->push_symbol (name.c_str (), sym); 681 } 682 ; 683 684 variable: name_not_typename 685 { struct block_symbol sym = $1.sym; 686 687 if (sym.symbol) 688 { 689 if (symbol_read_needs_frame (sym.symbol)) 690 pstate->block_tracker->update (sym); 691 692 pstate->push_new<var_value_operation> (sym); 693 current_type = sym.symbol->type (); } 694 else if ($1.is_a_field_of_this) 695 { 696 struct value * this_val; 697 struct type * this_type; 698 /* Object pascal: it hangs off of `this'. Must 699 not inadvertently convert from a method call 700 to data ref. */ 701 pstate->block_tracker->update (sym); 702 operation_up thisop 703 = make_operation<op_this_operation> (); 704 pstate->push_new<structop_operation> 705 (std::move (thisop), copy_name ($1.stoken)); 706 /* We need type of this. */ 707 this_val 708 = value_of_this_silent (pstate->language ()); 709 if (this_val) 710 this_type = value_type (this_val); 711 else 712 this_type = NULL; 713 if (this_type) 714 current_type = lookup_struct_elt_type ( 715 this_type, 716 copy_name ($1.stoken).c_str (), 0); 717 else 718 current_type = NULL; 719 } 720 else 721 { 722 struct bound_minimal_symbol msymbol; 723 std::string arg = copy_name ($1.stoken); 724 725 msymbol = 726 lookup_bound_minimal_symbol (arg.c_str ()); 727 if (msymbol.minsym != NULL) 728 pstate->push_new<var_msym_value_operation> 729 (msymbol); 730 else if (!have_full_symbols () 731 && !have_partial_symbols ()) 732 error (_("No symbol table is loaded. " 733 "Use the \"file\" command.")); 734 else 735 error (_("No symbol \"%s\" in current context."), 736 arg.c_str ()); 737 } 738 } 739 ; 740 741 742 ptype : typebase 743 ; 744 745 /* We used to try to recognize more pointer to member types here, but 746 that didn't work (shift/reduce conflicts meant that these rules never 747 got executed). The problem is that 748 int (foo::bar::baz::bizzle) 749 is a function type but 750 int (foo::bar::baz::bizzle::*) 751 is a pointer to member type. Stroustrup loses again! */ 752 753 type : ptype 754 ; 755 756 typebase /* Implements (approximately): (type-qualifier)* type-specifier */ 757 : '^' typebase 758 { $$ = lookup_pointer_type ($2); } 759 | TYPENAME 760 { $$ = $1.type; } 761 | STRUCT name 762 { $$ 763 = lookup_struct (copy_name ($2).c_str (), 764 pstate->expression_context_block); 765 } 766 | CLASS name 767 { $$ 768 = lookup_struct (copy_name ($2).c_str (), 769 pstate->expression_context_block); 770 } 771 /* "const" and "volatile" are curently ignored. A type qualifier 772 after the type is handled in the ptype rule. I think these could 773 be too. */ 774 ; 775 776 name : NAME { $$ = $1.stoken; } 777 | BLOCKNAME { $$ = $1.stoken; } 778 | TYPENAME { $$ = $1.stoken; } 779 | NAME_OR_INT { $$ = $1.stoken; } 780 ; 781 782 name_not_typename : NAME 783 | BLOCKNAME 784 /* These would be useful if name_not_typename was useful, but it is just 785 a fake for "variable", so these cause reduce/reduce conflicts because 786 the parser can't tell whether NAME_OR_INT is a name_not_typename (=variable, 787 =exp) or just an exp. If name_not_typename was ever used in an lvalue 788 context where only a name could occur, this might be useful. 789 | NAME_OR_INT 790 */ 791 ; 792 793 %% 794 795 /* Take care of parsing a number (anything that starts with a digit). 796 Set yylval and return the token type; update lexptr. 797 LEN is the number of characters in it. */ 798 799 /*** Needs some error checking for the float case ***/ 800 801 static int 802 parse_number (struct parser_state *par_state, 803 const char *p, int len, int parsed_float, YYSTYPE *putithere) 804 { 805 ULONGEST n = 0; 806 ULONGEST prevn = 0; 807 808 int i = 0; 809 int c; 810 int base = input_radix; 811 int unsigned_p = 0; 812 813 /* Number of "L" suffixes encountered. */ 814 int long_p = 0; 815 816 /* We have found a "L" or "U" suffix. */ 817 int found_suffix = 0; 818 819 if (parsed_float) 820 { 821 /* Handle suffixes: 'f' for float, 'l' for long double. 822 FIXME: This appears to be an extension -- do we want this? */ 823 if (len >= 1 && tolower (p[len - 1]) == 'f') 824 { 825 putithere->typed_val_float.type 826 = parse_type (par_state)->builtin_float; 827 len--; 828 } 829 else if (len >= 1 && tolower (p[len - 1]) == 'l') 830 { 831 putithere->typed_val_float.type 832 = parse_type (par_state)->builtin_long_double; 833 len--; 834 } 835 /* Default type for floating-point literals is double. */ 836 else 837 { 838 putithere->typed_val_float.type 839 = parse_type (par_state)->builtin_double; 840 } 841 842 if (!parse_float (p, len, 843 putithere->typed_val_float.type, 844 putithere->typed_val_float.val)) 845 return ERROR; 846 return FLOAT; 847 } 848 849 /* Handle base-switching prefixes 0x, 0t, 0d, 0. */ 850 if (p[0] == '0' && len > 1) 851 switch (p[1]) 852 { 853 case 'x': 854 case 'X': 855 if (len >= 3) 856 { 857 p += 2; 858 base = 16; 859 len -= 2; 860 } 861 break; 862 863 case 't': 864 case 'T': 865 case 'd': 866 case 'D': 867 if (len >= 3) 868 { 869 p += 2; 870 base = 10; 871 len -= 2; 872 } 873 break; 874 875 default: 876 base = 8; 877 break; 878 } 879 880 while (len-- > 0) 881 { 882 c = *p++; 883 if (c >= 'A' && c <= 'Z') 884 c += 'a' - 'A'; 885 if (c != 'l' && c != 'u') 886 n *= base; 887 if (c >= '0' && c <= '9') 888 { 889 if (found_suffix) 890 return ERROR; 891 n += i = c - '0'; 892 } 893 else 894 { 895 if (base > 10 && c >= 'a' && c <= 'f') 896 { 897 if (found_suffix) 898 return ERROR; 899 n += i = c - 'a' + 10; 900 } 901 else if (c == 'l') 902 { 903 ++long_p; 904 found_suffix = 1; 905 } 906 else if (c == 'u') 907 { 908 unsigned_p = 1; 909 found_suffix = 1; 910 } 911 else 912 return ERROR; /* Char not a digit */ 913 } 914 if (i >= base) 915 return ERROR; /* Invalid digit in this base. */ 916 917 if (c != 'l' && c != 'u') 918 { 919 /* Test for overflow. */ 920 if (prevn == 0 && n == 0) 921 ; 922 else if (prevn >= n) 923 error (_("Numeric constant too large.")); 924 } 925 prevn = n; 926 } 927 928 /* An integer constant is an int, a long, or a long long. An L 929 suffix forces it to be long; an LL suffix forces it to be long 930 long. If not forced to a larger size, it gets the first type of 931 the above that it fits in. To figure out whether it fits, we 932 shift it right and see whether anything remains. Note that we 933 can't shift sizeof (LONGEST) * HOST_CHAR_BIT bits or more in one 934 operation, because many compilers will warn about such a shift 935 (which always produces a zero result). Sometimes gdbarch_int_bit 936 or gdbarch_long_bit will be that big, sometimes not. To deal with 937 the case where it is we just always shift the value more than 938 once, with fewer bits each time. */ 939 940 int int_bits = gdbarch_int_bit (par_state->gdbarch ()); 941 int long_bits = gdbarch_long_bit (par_state->gdbarch ()); 942 int long_long_bits = gdbarch_long_long_bit (par_state->gdbarch ()); 943 bool have_signed = !unsigned_p; 944 bool have_int = long_p == 0; 945 bool have_long = long_p <= 1; 946 if (have_int && have_signed && fits_in_type (1, n, int_bits, true)) 947 putithere->typed_val_int.type = parse_type (par_state)->builtin_int; 948 else if (have_int && fits_in_type (1, n, int_bits, false)) 949 putithere->typed_val_int.type 950 = parse_type (par_state)->builtin_unsigned_int; 951 else if (have_long && have_signed && fits_in_type (1, n, long_bits, true)) 952 putithere->typed_val_int.type = parse_type (par_state)->builtin_long; 953 else if (have_long && fits_in_type (1, n, long_bits, false)) 954 putithere->typed_val_int.type 955 = parse_type (par_state)->builtin_unsigned_long; 956 else if (have_signed && fits_in_type (1, n, long_long_bits, true)) 957 putithere->typed_val_int.type 958 = parse_type (par_state)->builtin_long_long; 959 else if (fits_in_type (1, n, long_long_bits, false)) 960 putithere->typed_val_int.type 961 = parse_type (par_state)->builtin_unsigned_long_long; 962 else 963 error (_("Numeric constant too large.")); 964 putithere->typed_val_int.val = n; 965 966 return INT; 967 } 968 969 970 struct type_push 971 { 972 struct type *stored; 973 struct type_push *next; 974 }; 975 976 static struct type_push *tp_top = NULL; 977 978 static void 979 push_current_type (void) 980 { 981 struct type_push *tpnew; 982 tpnew = (struct type_push *) malloc (sizeof (struct type_push)); 983 tpnew->next = tp_top; 984 tpnew->stored = current_type; 985 current_type = NULL; 986 tp_top = tpnew; 987 } 988 989 static void 990 pop_current_type (void) 991 { 992 struct type_push *tp = tp_top; 993 if (tp) 994 { 995 current_type = tp->stored; 996 tp_top = tp->next; 997 free (tp); 998 } 999 } 1000 1001 struct token 1002 { 1003 const char *oper; 1004 int token; 1005 enum exp_opcode opcode; 1006 }; 1007 1008 static const struct token tokentab3[] = 1009 { 1010 {"shr", RSH, OP_NULL}, 1011 {"shl", LSH, OP_NULL}, 1012 {"and", ANDAND, OP_NULL}, 1013 {"div", DIV, OP_NULL}, 1014 {"not", NOT, OP_NULL}, 1015 {"mod", MOD, OP_NULL}, 1016 {"inc", INCREMENT, OP_NULL}, 1017 {"dec", DECREMENT, OP_NULL}, 1018 {"xor", XOR, OP_NULL} 1019 }; 1020 1021 static const struct token tokentab2[] = 1022 { 1023 {"or", OR, OP_NULL}, 1024 {"<>", NOTEQUAL, OP_NULL}, 1025 {"<=", LEQ, OP_NULL}, 1026 {">=", GEQ, OP_NULL}, 1027 {":=", ASSIGN, OP_NULL}, 1028 {"::", COLONCOLON, OP_NULL} }; 1029 1030 /* Allocate uppercased var: */ 1031 /* make an uppercased copy of tokstart. */ 1032 static char * 1033 uptok (const char *tokstart, int namelen) 1034 { 1035 int i; 1036 char *uptokstart = (char *)malloc(namelen+1); 1037 for (i = 0;i <= namelen;i++) 1038 { 1039 if ((tokstart[i]>='a' && tokstart[i]<='z')) 1040 uptokstart[i] = tokstart[i]-('a'-'A'); 1041 else 1042 uptokstart[i] = tokstart[i]; 1043 } 1044 uptokstart[namelen]='\0'; 1045 return uptokstart; 1046 } 1047 1048 /* Read one token, getting characters through lexptr. */ 1049 1050 static int 1051 yylex (void) 1052 { 1053 int c; 1054 int namelen; 1055 const char *tokstart; 1056 char *uptokstart; 1057 const char *tokptr; 1058 int explen, tempbufindex; 1059 static char *tempbuf; 1060 static int tempbufsize; 1061 1062 retry: 1063 1064 pstate->prev_lexptr = pstate->lexptr; 1065 1066 tokstart = pstate->lexptr; 1067 explen = strlen (pstate->lexptr); 1068 1069 /* See if it is a special token of length 3. */ 1070 if (explen > 2) 1071 for (const auto &token : tokentab3) 1072 if (strncasecmp (tokstart, token.oper, 3) == 0 1073 && (!isalpha (token.oper[0]) || explen == 3 1074 || (!isalpha (tokstart[3]) 1075 && !isdigit (tokstart[3]) && tokstart[3] != '_'))) 1076 { 1077 pstate->lexptr += 3; 1078 yylval.opcode = token.opcode; 1079 return token.token; 1080 } 1081 1082 /* See if it is a special token of length 2. */ 1083 if (explen > 1) 1084 for (const auto &token : tokentab2) 1085 if (strncasecmp (tokstart, token.oper, 2) == 0 1086 && (!isalpha (token.oper[0]) || explen == 2 1087 || (!isalpha (tokstart[2]) 1088 && !isdigit (tokstart[2]) && tokstart[2] != '_'))) 1089 { 1090 pstate->lexptr += 2; 1091 yylval.opcode = token.opcode; 1092 return token.token; 1093 } 1094 1095 switch (c = *tokstart) 1096 { 1097 case 0: 1098 if (search_field && pstate->parse_completion) 1099 return COMPLETE; 1100 else 1101 return 0; 1102 1103 case ' ': 1104 case '\t': 1105 case '\n': 1106 pstate->lexptr++; 1107 goto retry; 1108 1109 case '\'': 1110 /* We either have a character constant ('0' or '\177' for example) 1111 or we have a quoted symbol reference ('foo(int,int)' in object pascal 1112 for example). */ 1113 pstate->lexptr++; 1114 c = *pstate->lexptr++; 1115 if (c == '\\') 1116 c = parse_escape (pstate->gdbarch (), &pstate->lexptr); 1117 else if (c == '\'') 1118 error (_("Empty character constant.")); 1119 1120 yylval.typed_val_int.val = c; 1121 yylval.typed_val_int.type = parse_type (pstate)->builtin_char; 1122 1123 c = *pstate->lexptr++; 1124 if (c != '\'') 1125 { 1126 namelen = skip_quoted (tokstart) - tokstart; 1127 if (namelen > 2) 1128 { 1129 pstate->lexptr = tokstart + namelen; 1130 if (pstate->lexptr[-1] != '\'') 1131 error (_("Unmatched single quote.")); 1132 namelen -= 2; 1133 tokstart++; 1134 uptokstart = uptok(tokstart,namelen); 1135 goto tryname; 1136 } 1137 error (_("Invalid character constant.")); 1138 } 1139 return INT; 1140 1141 case '(': 1142 paren_depth++; 1143 pstate->lexptr++; 1144 return c; 1145 1146 case ')': 1147 if (paren_depth == 0) 1148 return 0; 1149 paren_depth--; 1150 pstate->lexptr++; 1151 return c; 1152 1153 case ',': 1154 if (pstate->comma_terminates && paren_depth == 0) 1155 return 0; 1156 pstate->lexptr++; 1157 return c; 1158 1159 case '.': 1160 /* Might be a floating point number. */ 1161 if (pstate->lexptr[1] < '0' || pstate->lexptr[1] > '9') 1162 { 1163 goto symbol; /* Nope, must be a symbol. */ 1164 } 1165 1166 /* FALL THRU. */ 1167 1168 case '0': 1169 case '1': 1170 case '2': 1171 case '3': 1172 case '4': 1173 case '5': 1174 case '6': 1175 case '7': 1176 case '8': 1177 case '9': 1178 { 1179 /* It's a number. */ 1180 int got_dot = 0, got_e = 0, toktype; 1181 const char *p = tokstart; 1182 int hex = input_radix > 10; 1183 1184 if (c == '0' && (p[1] == 'x' || p[1] == 'X')) 1185 { 1186 p += 2; 1187 hex = 1; 1188 } 1189 else if (c == '0' && (p[1]=='t' || p[1]=='T' 1190 || p[1]=='d' || p[1]=='D')) 1191 { 1192 p += 2; 1193 hex = 0; 1194 } 1195 1196 for (;; ++p) 1197 { 1198 /* This test includes !hex because 'e' is a valid hex digit 1199 and thus does not indicate a floating point number when 1200 the radix is hex. */ 1201 if (!hex && !got_e && (*p == 'e' || *p == 'E')) 1202 got_dot = got_e = 1; 1203 /* This test does not include !hex, because a '.' always indicates 1204 a decimal floating point number regardless of the radix. */ 1205 else if (!got_dot && *p == '.') 1206 got_dot = 1; 1207 else if (got_e && (p[-1] == 'e' || p[-1] == 'E') 1208 && (*p == '-' || *p == '+')) 1209 /* This is the sign of the exponent, not the end of the 1210 number. */ 1211 continue; 1212 /* We will take any letters or digits. parse_number will 1213 complain if past the radix, or if L or U are not final. */ 1214 else if ((*p < '0' || *p > '9') 1215 && ((*p < 'a' || *p > 'z') 1216 && (*p < 'A' || *p > 'Z'))) 1217 break; 1218 } 1219 toktype = parse_number (pstate, tokstart, 1220 p - tokstart, got_dot | got_e, &yylval); 1221 if (toktype == ERROR) 1222 { 1223 char *err_copy = (char *) alloca (p - tokstart + 1); 1224 1225 memcpy (err_copy, tokstart, p - tokstart); 1226 err_copy[p - tokstart] = 0; 1227 error (_("Invalid number \"%s\"."), err_copy); 1228 } 1229 pstate->lexptr = p; 1230 return toktype; 1231 } 1232 1233 case '+': 1234 case '-': 1235 case '*': 1236 case '/': 1237 case '|': 1238 case '&': 1239 case '^': 1240 case '~': 1241 case '!': 1242 case '@': 1243 case '<': 1244 case '>': 1245 case '[': 1246 case ']': 1247 case '?': 1248 case ':': 1249 case '=': 1250 case '{': 1251 case '}': 1252 symbol: 1253 pstate->lexptr++; 1254 return c; 1255 1256 case '"': 1257 1258 /* Build the gdb internal form of the input string in tempbuf, 1259 translating any standard C escape forms seen. Note that the 1260 buffer is null byte terminated *only* for the convenience of 1261 debugging gdb itself and printing the buffer contents when 1262 the buffer contains no embedded nulls. Gdb does not depend 1263 upon the buffer being null byte terminated, it uses the length 1264 string instead. This allows gdb to handle C strings (as well 1265 as strings in other languages) with embedded null bytes. */ 1266 1267 tokptr = ++tokstart; 1268 tempbufindex = 0; 1269 1270 do { 1271 /* Grow the static temp buffer if necessary, including allocating 1272 the first one on demand. */ 1273 if (tempbufindex + 1 >= tempbufsize) 1274 { 1275 tempbuf = (char *) realloc (tempbuf, tempbufsize += 64); 1276 } 1277 1278 switch (*tokptr) 1279 { 1280 case '\0': 1281 case '"': 1282 /* Do nothing, loop will terminate. */ 1283 break; 1284 case '\\': 1285 ++tokptr; 1286 c = parse_escape (pstate->gdbarch (), &tokptr); 1287 if (c == -1) 1288 { 1289 continue; 1290 } 1291 tempbuf[tempbufindex++] = c; 1292 break; 1293 default: 1294 tempbuf[tempbufindex++] = *tokptr++; 1295 break; 1296 } 1297 } while ((*tokptr != '"') && (*tokptr != '\0')); 1298 if (*tokptr++ != '"') 1299 { 1300 error (_("Unterminated string in expression.")); 1301 } 1302 tempbuf[tempbufindex] = '\0'; /* See note above. */ 1303 yylval.sval.ptr = tempbuf; 1304 yylval.sval.length = tempbufindex; 1305 pstate->lexptr = tokptr; 1306 return (STRING); 1307 } 1308 1309 if (!(c == '_' || c == '$' 1310 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) 1311 /* We must have come across a bad character (e.g. ';'). */ 1312 error (_("Invalid character '%c' in expression."), c); 1313 1314 /* It's a name. See how long it is. */ 1315 namelen = 0; 1316 for (c = tokstart[namelen]; 1317 (c == '_' || c == '$' || (c >= '0' && c <= '9') 1318 || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '<');) 1319 { 1320 /* Template parameter lists are part of the name. 1321 FIXME: This mishandles `print $a<4&&$a>3'. */ 1322 if (c == '<') 1323 { 1324 int i = namelen; 1325 int nesting_level = 1; 1326 while (tokstart[++i]) 1327 { 1328 if (tokstart[i] == '<') 1329 nesting_level++; 1330 else if (tokstart[i] == '>') 1331 { 1332 if (--nesting_level == 0) 1333 break; 1334 } 1335 } 1336 if (tokstart[i] == '>') 1337 namelen = i; 1338 else 1339 break; 1340 } 1341 1342 /* do NOT uppercase internals because of registers !!! */ 1343 c = tokstart[++namelen]; 1344 } 1345 1346 uptokstart = uptok(tokstart,namelen); 1347 1348 /* The token "if" terminates the expression and is NOT 1349 removed from the input stream. */ 1350 if (namelen == 2 && uptokstart[0] == 'I' && uptokstart[1] == 'F') 1351 { 1352 free (uptokstart); 1353 return 0; 1354 } 1355 1356 pstate->lexptr += namelen; 1357 1358 tryname: 1359 1360 /* Catch specific keywords. Should be done with a data structure. */ 1361 switch (namelen) 1362 { 1363 case 6: 1364 if (strcmp (uptokstart, "OBJECT") == 0) 1365 { 1366 free (uptokstart); 1367 return CLASS; 1368 } 1369 if (strcmp (uptokstart, "RECORD") == 0) 1370 { 1371 free (uptokstart); 1372 return STRUCT; 1373 } 1374 if (strcmp (uptokstart, "SIZEOF") == 0) 1375 { 1376 free (uptokstart); 1377 return SIZEOF; 1378 } 1379 break; 1380 case 5: 1381 if (strcmp (uptokstart, "CLASS") == 0) 1382 { 1383 free (uptokstart); 1384 return CLASS; 1385 } 1386 if (strcmp (uptokstart, "FALSE") == 0) 1387 { 1388 yylval.lval = 0; 1389 free (uptokstart); 1390 return FALSEKEYWORD; 1391 } 1392 break; 1393 case 4: 1394 if (strcmp (uptokstart, "TRUE") == 0) 1395 { 1396 yylval.lval = 1; 1397 free (uptokstart); 1398 return TRUEKEYWORD; 1399 } 1400 if (strcmp (uptokstart, "SELF") == 0) 1401 { 1402 /* Here we search for 'this' like 1403 inserted in FPC stabs debug info. */ 1404 static const char this_name[] = "this"; 1405 1406 if (lookup_symbol (this_name, pstate->expression_context_block, 1407 VAR_DOMAIN, NULL).symbol) 1408 { 1409 free (uptokstart); 1410 return THIS; 1411 } 1412 } 1413 break; 1414 default: 1415 break; 1416 } 1417 1418 yylval.sval.ptr = tokstart; 1419 yylval.sval.length = namelen; 1420 1421 if (*tokstart == '$') 1422 { 1423 free (uptokstart); 1424 return DOLLAR_VARIABLE; 1425 } 1426 1427 /* Use token-type BLOCKNAME for symbols that happen to be defined as 1428 functions or symtabs. If this is not so, then ... 1429 Use token-type TYPENAME for symbols that happen to be defined 1430 currently as names of types; NAME for other symbols. 1431 The caller is not constrained to care about the distinction. */ 1432 { 1433 std::string tmp = copy_name (yylval.sval); 1434 struct symbol *sym; 1435 struct field_of_this_result is_a_field_of_this = { .type = NULL }; 1436 int is_a_field = 0; 1437 int hextype; 1438 1439 is_a_field_of_this.type = NULL; 1440 if (search_field && current_type) 1441 is_a_field = (lookup_struct_elt_type (current_type, 1442 tmp.c_str (), 1) != NULL); 1443 if (is_a_field) 1444 sym = NULL; 1445 else 1446 sym = lookup_symbol (tmp.c_str (), pstate->expression_context_block, 1447 VAR_DOMAIN, &is_a_field_of_this).symbol; 1448 /* second chance uppercased (as Free Pascal does). */ 1449 if (!sym && is_a_field_of_this.type == NULL && !is_a_field) 1450 { 1451 for (int i = 0; i <= namelen; i++) 1452 { 1453 if ((tmp[i] >= 'a' && tmp[i] <= 'z')) 1454 tmp[i] -= ('a'-'A'); 1455 } 1456 if (search_field && current_type) 1457 is_a_field = (lookup_struct_elt_type (current_type, 1458 tmp.c_str (), 1) != NULL); 1459 if (is_a_field) 1460 sym = NULL; 1461 else 1462 sym = lookup_symbol (tmp.c_str (), pstate->expression_context_block, 1463 VAR_DOMAIN, &is_a_field_of_this).symbol; 1464 } 1465 /* Third chance Capitalized (as GPC does). */ 1466 if (!sym && is_a_field_of_this.type == NULL && !is_a_field) 1467 { 1468 for (int i = 0; i <= namelen; i++) 1469 { 1470 if (i == 0) 1471 { 1472 if ((tmp[i] >= 'a' && tmp[i] <= 'z')) 1473 tmp[i] -= ('a'-'A'); 1474 } 1475 else 1476 if ((tmp[i] >= 'A' && tmp[i] <= 'Z')) 1477 tmp[i] -= ('A'-'a'); 1478 } 1479 if (search_field && current_type) 1480 is_a_field = (lookup_struct_elt_type (current_type, 1481 tmp.c_str (), 1) != NULL); 1482 if (is_a_field) 1483 sym = NULL; 1484 else 1485 sym = lookup_symbol (tmp.c_str (), pstate->expression_context_block, 1486 VAR_DOMAIN, &is_a_field_of_this).symbol; 1487 } 1488 1489 if (is_a_field || (is_a_field_of_this.type != NULL)) 1490 { 1491 tempbuf = (char *) realloc (tempbuf, namelen + 1); 1492 strncpy (tempbuf, tmp.c_str (), namelen); 1493 tempbuf [namelen] = 0; 1494 yylval.sval.ptr = tempbuf; 1495 yylval.sval.length = namelen; 1496 yylval.ssym.sym.symbol = NULL; 1497 yylval.ssym.sym.block = NULL; 1498 free (uptokstart); 1499 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL; 1500 if (is_a_field) 1501 return FIELDNAME; 1502 else 1503 return NAME; 1504 } 1505 /* Call lookup_symtab, not lookup_partial_symtab, in case there are 1506 no psymtabs (coff, xcoff, or some future change to blow away the 1507 psymtabs once once symbols are read). */ 1508 if ((sym && sym->aclass () == LOC_BLOCK) 1509 || lookup_symtab (tmp.c_str ())) 1510 { 1511 yylval.ssym.sym.symbol = sym; 1512 yylval.ssym.sym.block = NULL; 1513 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL; 1514 free (uptokstart); 1515 return BLOCKNAME; 1516 } 1517 if (sym && sym->aclass () == LOC_TYPEDEF) 1518 { 1519 #if 1 1520 /* Despite the following flaw, we need to keep this code enabled. 1521 Because we can get called from check_stub_method, if we don't 1522 handle nested types then it screws many operations in any 1523 program which uses nested types. */ 1524 /* In "A::x", if x is a member function of A and there happens 1525 to be a type (nested or not, since the stabs don't make that 1526 distinction) named x, then this code incorrectly thinks we 1527 are dealing with nested types rather than a member function. */ 1528 1529 const char *p; 1530 const char *namestart; 1531 struct symbol *best_sym; 1532 1533 /* Look ahead to detect nested types. This probably should be 1534 done in the grammar, but trying seemed to introduce a lot 1535 of shift/reduce and reduce/reduce conflicts. It's possible 1536 that it could be done, though. Or perhaps a non-grammar, but 1537 less ad hoc, approach would work well. */ 1538 1539 /* Since we do not currently have any way of distinguishing 1540 a nested type from a non-nested one (the stabs don't tell 1541 us whether a type is nested), we just ignore the 1542 containing type. */ 1543 1544 p = pstate->lexptr; 1545 best_sym = sym; 1546 while (1) 1547 { 1548 /* Skip whitespace. */ 1549 while (*p == ' ' || *p == '\t' || *p == '\n') 1550 ++p; 1551 if (*p == ':' && p[1] == ':') 1552 { 1553 /* Skip the `::'. */ 1554 p += 2; 1555 /* Skip whitespace. */ 1556 while (*p == ' ' || *p == '\t' || *p == '\n') 1557 ++p; 1558 namestart = p; 1559 while (*p == '_' || *p == '$' || (*p >= '0' && *p <= '9') 1560 || (*p >= 'a' && *p <= 'z') 1561 || (*p >= 'A' && *p <= 'Z')) 1562 ++p; 1563 if (p != namestart) 1564 { 1565 struct symbol *cur_sym; 1566 /* As big as the whole rest of the expression, which is 1567 at least big enough. */ 1568 char *ncopy 1569 = (char *) alloca (tmp.size () + strlen (namestart) 1570 + 3); 1571 char *tmp1; 1572 1573 tmp1 = ncopy; 1574 memcpy (tmp1, tmp.c_str (), tmp.size ()); 1575 tmp1 += tmp.size (); 1576 memcpy (tmp1, "::", 2); 1577 tmp1 += 2; 1578 memcpy (tmp1, namestart, p - namestart); 1579 tmp1[p - namestart] = '\0'; 1580 cur_sym 1581 = lookup_symbol (ncopy, 1582 pstate->expression_context_block, 1583 VAR_DOMAIN, NULL).symbol; 1584 if (cur_sym) 1585 { 1586 if (cur_sym->aclass () == LOC_TYPEDEF) 1587 { 1588 best_sym = cur_sym; 1589 pstate->lexptr = p; 1590 } 1591 else 1592 break; 1593 } 1594 else 1595 break; 1596 } 1597 else 1598 break; 1599 } 1600 else 1601 break; 1602 } 1603 1604 yylval.tsym.type = best_sym->type (); 1605 #else /* not 0 */ 1606 yylval.tsym.type = sym->type (); 1607 #endif /* not 0 */ 1608 free (uptokstart); 1609 return TYPENAME; 1610 } 1611 yylval.tsym.type 1612 = language_lookup_primitive_type (pstate->language (), 1613 pstate->gdbarch (), tmp.c_str ()); 1614 if (yylval.tsym.type != NULL) 1615 { 1616 free (uptokstart); 1617 return TYPENAME; 1618 } 1619 1620 /* Input names that aren't symbols but ARE valid hex numbers, 1621 when the input radix permits them, can be names or numbers 1622 depending on the parse. Note we support radixes > 16 here. */ 1623 if (!sym 1624 && ((tokstart[0] >= 'a' && tokstart[0] < 'a' + input_radix - 10) 1625 || (tokstart[0] >= 'A' && tokstart[0] < 'A' + input_radix - 10))) 1626 { 1627 YYSTYPE newlval; /* Its value is ignored. */ 1628 hextype = parse_number (pstate, tokstart, namelen, 0, &newlval); 1629 if (hextype == INT) 1630 { 1631 yylval.ssym.sym.symbol = sym; 1632 yylval.ssym.sym.block = NULL; 1633 yylval.ssym.is_a_field_of_this = is_a_field_of_this.type != NULL; 1634 free (uptokstart); 1635 return NAME_OR_INT; 1636 } 1637 } 1638 1639 free(uptokstart); 1640 /* Any other kind of symbol. */ 1641 yylval.ssym.sym.symbol = sym; 1642 yylval.ssym.sym.block = NULL; 1643 return NAME; 1644 } 1645 } 1646 1647 /* See language.h. */ 1648 1649 int 1650 pascal_language::parser (struct parser_state *par_state) const 1651 { 1652 /* Setting up the parser state. */ 1653 scoped_restore pstate_restore = make_scoped_restore (&pstate); 1654 gdb_assert (par_state != NULL); 1655 pstate = par_state; 1656 paren_depth = 0; 1657 1658 int result = yyparse (); 1659 if (!result) 1660 pstate->set_operation (pstate->pop ()); 1661 return result; 1662 } 1663 1664 static void 1665 yyerror (const char *msg) 1666 { 1667 if (pstate->prev_lexptr) 1668 pstate->lexptr = pstate->prev_lexptr; 1669 1670 error (_("A %s in expression, near `%s'."), msg, pstate->lexptr); 1671 } 1672