1 /* Helper routines for C++ support in GDB. 2 Copyright (C) 2003-2017 Free Software Foundation, Inc. 3 4 Contributed by David Carlton and by Kealia, Inc. 5 6 This file is part of GDB. 7 8 This program is free software; you can redistribute it and/or modify 9 it under the terms of the GNU General Public License as published by 10 the Free Software Foundation; either version 3 of the License, or 11 (at your option) any later version. 12 13 This program is distributed in the hope that it will be useful, 14 but WITHOUT ANY WARRANTY; without even the implied warranty of 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 GNU General Public License for more details. 17 18 You should have received a copy of the GNU General Public License 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 20 21 #include "defs.h" 22 #include "cp-support.h" 23 #include "gdb_obstack.h" 24 #include "symtab.h" 25 #include "symfile.h" 26 #include "block.h" 27 #include "objfiles.h" 28 #include "gdbtypes.h" 29 #include "dictionary.h" 30 #include "command.h" 31 #include "frame.h" 32 #include "buildsym.h" 33 #include "language.h" 34 #include "namespace.h" 35 #include <string> 36 37 static struct block_symbol 38 cp_lookup_nested_symbol_1 (struct type *container_type, 39 const char *nested_name, 40 const char *concatenated_name, 41 const struct block *block, 42 const domain_enum domain, 43 int basic_lookup, int is_in_anonymous); 44 45 static struct type *cp_lookup_transparent_type_loop (const char *name, 46 const char *scope, 47 int scope_len); 48 49 /* Check to see if SYMBOL refers to an object contained within an 50 anonymous namespace; if so, add an appropriate using directive. */ 51 52 void 53 cp_scan_for_anonymous_namespaces (const struct symbol *const symbol, 54 struct objfile *const objfile) 55 { 56 if (SYMBOL_DEMANGLED_NAME (symbol) != NULL) 57 { 58 const char *name = SYMBOL_DEMANGLED_NAME (symbol); 59 unsigned int previous_component; 60 unsigned int next_component; 61 62 /* Start with a quick-and-dirty check for mention of "(anonymous 63 namespace)". */ 64 65 if (!cp_is_in_anonymous (name)) 66 return; 67 68 previous_component = 0; 69 next_component = cp_find_first_component (name + previous_component); 70 71 while (name[next_component] == ':') 72 { 73 if (((next_component - previous_component) 74 == CP_ANONYMOUS_NAMESPACE_LEN) 75 && strncmp (name + previous_component, 76 CP_ANONYMOUS_NAMESPACE_STR, 77 CP_ANONYMOUS_NAMESPACE_LEN) == 0) 78 { 79 int dest_len = (previous_component == 0 80 ? 0 : previous_component - 2); 81 int src_len = next_component; 82 83 char *dest = (char *) alloca (dest_len + 1); 84 char *src = (char *) alloca (src_len + 1); 85 86 memcpy (dest, name, dest_len); 87 memcpy (src, name, src_len); 88 89 dest[dest_len] = '\0'; 90 src[src_len] = '\0'; 91 92 /* We've found a component of the name that's an 93 anonymous namespace. So add symbols in it to the 94 namespace given by the previous component if there is 95 one, or to the global namespace if there isn't. */ 96 add_using_directive (&local_using_directives, 97 dest, src, NULL, NULL, NULL, 1, 98 &objfile->objfile_obstack); 99 } 100 /* The "+ 2" is for the "::". */ 101 previous_component = next_component + 2; 102 next_component = (previous_component 103 + cp_find_first_component (name 104 + previous_component)); 105 } 106 } 107 } 108 109 /* Test whether or not NAMESPACE looks like it mentions an anonymous 110 namespace; return nonzero if so. */ 111 112 int 113 cp_is_in_anonymous (const char *symbol_name) 114 { 115 return (strstr (symbol_name, CP_ANONYMOUS_NAMESPACE_STR) 116 != NULL); 117 } 118 119 /* Look up NAME in DOMAIN in BLOCK's static block and in global blocks. 120 If IS_IN_ANONYMOUS is nonzero, the symbol in question is located 121 within an anonymous namespace. */ 122 123 static struct block_symbol 124 cp_basic_lookup_symbol (const char *name, const struct block *block, 125 const domain_enum domain, int is_in_anonymous) 126 { 127 struct block_symbol sym; 128 129 sym = lookup_symbol_in_static_block (name, block, domain); 130 if (sym.symbol != NULL) 131 return sym; 132 133 if (is_in_anonymous) 134 { 135 /* Symbols defined in anonymous namespaces have external linkage 136 but should be treated as local to a single file nonetheless. 137 So we only search the current file's global block. */ 138 139 const struct block *global_block = block_global_block (block); 140 141 if (global_block != NULL) 142 { 143 sym.symbol = lookup_symbol_in_block (name, global_block, domain); 144 sym.block = global_block; 145 } 146 } 147 else 148 sym = lookup_global_symbol (name, block, domain); 149 150 return sym; 151 } 152 153 /* Search bare symbol NAME in DOMAIN in BLOCK. 154 NAME is guaranteed to not have any scope (no "::") in its name, though 155 if for example NAME is a template spec then "::" may appear in the 156 argument list. 157 If LANGDEF is non-NULL then try to lookup NAME as a primitive type in 158 that language. Normally we wouldn't need LANGDEF but fortran also uses 159 this code. 160 If SEARCH is non-zero then see if we can determine "this" from BLOCK, and 161 if so then also search for NAME in that class. */ 162 163 static struct block_symbol 164 cp_lookup_bare_symbol (const struct language_defn *langdef, 165 const char *name, const struct block *block, 166 const domain_enum domain, int search) 167 { 168 struct block_symbol sym; 169 170 /* Note: We can't do a simple assert for ':' not being in NAME because 171 ':' may be in the args of a template spec. This isn't intended to be 172 a complete test, just cheap and documentary. */ 173 if (strchr (name, '<') == NULL && strchr (name, '(') == NULL) 174 gdb_assert (strstr (name, "::") == NULL); 175 176 sym = lookup_symbol_in_static_block (name, block, domain); 177 if (sym.symbol != NULL) 178 return sym; 179 180 /* If we didn't find a definition for a builtin type in the static block, 181 search for it now. This is actually the right thing to do and can be 182 a massive performance win. E.g., when debugging a program with lots of 183 shared libraries we could search all of them only to find out the 184 builtin type isn't defined in any of them. This is common for types 185 like "void". */ 186 if (langdef != NULL && domain == VAR_DOMAIN) 187 { 188 struct gdbarch *gdbarch; 189 190 if (block == NULL) 191 gdbarch = target_gdbarch (); 192 else 193 gdbarch = block_gdbarch (block); 194 sym.symbol 195 = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name); 196 sym.block = NULL; 197 if (sym.symbol != NULL) 198 return sym; 199 } 200 201 sym = lookup_global_symbol (name, block, domain); 202 if (sym.symbol != NULL) 203 return sym; 204 205 if (search) 206 { 207 struct block_symbol lang_this; 208 struct type *type; 209 210 lang_this.symbol = NULL; 211 212 if (langdef != NULL) 213 lang_this = lookup_language_this (langdef, block); 214 215 if (lang_this.symbol == NULL) 216 return null_block_symbol; 217 218 219 type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (lang_this.symbol))); 220 /* If TYPE_NAME is NULL, abandon trying to find this symbol. 221 This can happen for lambda functions compiled with clang++, 222 which outputs no name for the container class. */ 223 if (TYPE_NAME (type) == NULL) 224 return null_block_symbol; 225 226 /* Look for symbol NAME in this class. */ 227 sym = cp_lookup_nested_symbol (type, name, block, domain); 228 } 229 230 return sym; 231 } 232 233 /* Search NAME in DOMAIN in all static blocks, and then in all baseclasses. 234 BLOCK specifies the context in which to perform the search. 235 NAME is guaranteed to have scope (contain "::") and PREFIX_LEN specifies 236 the length of the entire scope of NAME (up to, but not including, the last 237 "::". 238 239 Note: At least in the case of Fortran, which also uses this code, there 240 may be no text after the last "::". */ 241 242 static struct block_symbol 243 cp_search_static_and_baseclasses (const char *name, 244 const struct block *block, 245 const domain_enum domain, 246 unsigned int prefix_len, 247 int is_in_anonymous) 248 { 249 struct block_symbol sym; 250 struct block_symbol klass_sym; 251 struct type *klass_type; 252 253 /* Check for malformed input. */ 254 if (prefix_len + 2 > strlen (name) || name[prefix_len + 1] != ':') 255 return null_block_symbol; 256 257 /* Find the name of the class and the name of the method, variable, etc. */ 258 259 /* The class name is everything up to and including PREFIX_LEN. */ 260 std::string klass (name, prefix_len); 261 262 /* The rest of the name is everything else past the initial scope 263 operator. */ 264 std::string nested (name + prefix_len + 2); 265 266 /* Lookup a class named KLASS. If none is found, there is nothing 267 more that can be done. KLASS could be a namespace, so always look 268 in VAR_DOMAIN. This works for classes too because of 269 symbol_matches_domain (which should be replaced with something else, 270 but it's what we have today). */ 271 klass_sym = lookup_global_symbol (klass.c_str (), block, VAR_DOMAIN); 272 if (klass_sym.symbol == NULL) 273 return null_block_symbol; 274 klass_type = SYMBOL_TYPE (klass_sym.symbol); 275 276 /* Look for a symbol named NESTED in this class. 277 The caller is assumed to have already have done a basic lookup of NAME. 278 So we pass zero for BASIC_LOOKUP to cp_lookup_nested_symbol_1 here. */ 279 sym = cp_lookup_nested_symbol_1 (klass_type, nested.c_str (), name, 280 block, domain, 0, is_in_anonymous); 281 282 return sym; 283 } 284 285 /* Look up NAME in the C++ namespace NAMESPACE. Other arguments are 286 as in cp_lookup_symbol_nonlocal. If SEARCH is non-zero, search 287 through base classes for a matching symbol. 288 289 Note: Part of the complexity is because NAME may itself specify scope. 290 Part of the complexity is also because this handles the case where 291 there is no scoping in which case we also try looking in the class of 292 "this" if we can compute it. */ 293 294 static struct block_symbol 295 cp_lookup_symbol_in_namespace (const char *the_namespace, const char *name, 296 const struct block *block, 297 const domain_enum domain, int search) 298 { 299 char *concatenated_name = NULL; 300 int is_in_anonymous; 301 unsigned int prefix_len; 302 struct block_symbol sym; 303 304 if (the_namespace[0] != '\0') 305 { 306 concatenated_name 307 = (char *) alloca (strlen (the_namespace) + 2 + strlen (name) + 1); 308 strcpy (concatenated_name, the_namespace); 309 strcat (concatenated_name, "::"); 310 strcat (concatenated_name, name); 311 name = concatenated_name; 312 } 313 314 prefix_len = cp_entire_prefix_len (name); 315 if (prefix_len == 0) 316 return cp_lookup_bare_symbol (NULL, name, block, domain, search); 317 318 /* This would be simpler if we just called cp_lookup_nested_symbol 319 at this point. But that would require first looking up the containing 320 class/namespace. Since we're only searching static and global blocks 321 there's often no need to first do that lookup. */ 322 323 is_in_anonymous 324 = the_namespace[0] != '\0' && cp_is_in_anonymous (the_namespace); 325 sym = cp_basic_lookup_symbol (name, block, domain, is_in_anonymous); 326 if (sym.symbol != NULL) 327 return sym; 328 329 if (search) 330 sym = cp_search_static_and_baseclasses (name, block, domain, prefix_len, 331 is_in_anonymous); 332 333 return sym; 334 } 335 336 /* Used for cleanups to reset the "searched" flag in case of an error. */ 337 338 static void 339 reset_directive_searched (void *data) 340 { 341 struct using_direct *direct = (struct using_direct *) data; 342 direct->searched = 0; 343 } 344 345 /* Search for NAME by applying all import statements belonging to 346 BLOCK which are applicable in SCOPE. If DECLARATION_ONLY the 347 search is restricted to using declarations. 348 Example: 349 350 namespace A { 351 int x; 352 } 353 using A::x; 354 355 If SEARCH_PARENTS the search will include imports which are 356 applicable in parents of SCOPE. 357 Example: 358 359 namespace A { 360 using namespace X; 361 namespace B { 362 using namespace Y; 363 } 364 } 365 366 If SCOPE is "A::B" and SEARCH_PARENTS is true the imports of 367 namespaces X and Y will be considered. If SEARCH_PARENTS is false 368 only the import of Y is considered. 369 370 SEARCH_SCOPE_FIRST is an internal implementation detail: Callers must 371 pass 0 for it. Internally we pass 1 when recursing. */ 372 373 static struct block_symbol 374 cp_lookup_symbol_via_imports (const char *scope, 375 const char *name, 376 const struct block *block, 377 const domain_enum domain, 378 const int search_scope_first, 379 const int declaration_only, 380 const int search_parents) 381 { 382 struct using_direct *current; 383 struct block_symbol sym; 384 int len; 385 int directive_match; 386 struct cleanup *searched_cleanup; 387 388 sym.symbol = NULL; 389 sym.block = NULL; 390 391 /* First, try to find the symbol in the given namespace if requested. */ 392 if (search_scope_first) 393 sym = cp_lookup_symbol_in_namespace (scope, name, 394 block, domain, 1); 395 396 if (sym.symbol != NULL) 397 return sym; 398 399 /* Go through the using directives. If any of them add new names to 400 the namespace we're searching in, see if we can find a match by 401 applying them. */ 402 403 for (current = block_using (block); 404 current != NULL; 405 current = current->next) 406 { 407 const char **excludep; 408 409 len = strlen (current->import_dest); 410 directive_match = (search_parents 411 ? (startswith (scope, current->import_dest) 412 && (len == 0 413 || scope[len] == ':' 414 || scope[len] == '\0')) 415 : strcmp (scope, current->import_dest) == 0); 416 417 /* If the import destination is the current scope or one of its 418 ancestors then it is applicable. */ 419 if (directive_match && !current->searched) 420 { 421 /* Mark this import as searched so that the recursive call 422 does not search it again. */ 423 current->searched = 1; 424 searched_cleanup = make_cleanup (reset_directive_searched, 425 current); 426 427 /* If there is an import of a single declaration, compare the 428 imported declaration (after optional renaming by its alias) 429 with the sought out name. If there is a match pass 430 current->import_src as NAMESPACE to direct the search 431 towards the imported namespace. */ 432 if (current->declaration 433 && strcmp (name, current->alias 434 ? current->alias : current->declaration) == 0) 435 sym = cp_lookup_symbol_in_namespace (current->import_src, 436 current->declaration, 437 block, domain, 1); 438 439 /* If this is a DECLARATION_ONLY search or a symbol was found 440 or this import statement was an import declaration, the 441 search of this import is complete. */ 442 if (declaration_only || sym.symbol != NULL || current->declaration) 443 { 444 current->searched = 0; 445 discard_cleanups (searched_cleanup); 446 447 if (sym.symbol != NULL) 448 return sym; 449 450 continue; 451 } 452 453 /* Do not follow CURRENT if NAME matches its EXCLUDES. */ 454 for (excludep = current->excludes; *excludep; excludep++) 455 if (strcmp (name, *excludep) == 0) 456 break; 457 if (*excludep) 458 { 459 discard_cleanups (searched_cleanup); 460 continue; 461 } 462 463 if (current->alias != NULL 464 && strcmp (name, current->alias) == 0) 465 /* If the import is creating an alias and the alias matches 466 the sought name. Pass current->import_src as the NAME to 467 direct the search towards the aliased namespace. */ 468 { 469 sym = cp_lookup_symbol_in_namespace (scope, 470 current->import_src, 471 block, domain, 1); 472 } 473 else if (current->alias == NULL) 474 { 475 /* If this import statement creates no alias, pass 476 current->inner as NAMESPACE to direct the search 477 towards the imported namespace. */ 478 sym = cp_lookup_symbol_via_imports (current->import_src, 479 name, block, 480 domain, 1, 0, 0); 481 } 482 current->searched = 0; 483 discard_cleanups (searched_cleanup); 484 485 if (sym.symbol != NULL) 486 return sym; 487 } 488 } 489 490 return null_block_symbol; 491 } 492 493 /* Helper function that searches an array of symbols for one named NAME. */ 494 495 static struct symbol * 496 search_symbol_list (const char *name, int num, 497 struct symbol **syms) 498 { 499 int i; 500 501 /* Maybe we should store a dictionary in here instead. */ 502 for (i = 0; i < num; ++i) 503 { 504 if (strcmp (name, SYMBOL_NATURAL_NAME (syms[i])) == 0) 505 return syms[i]; 506 } 507 return NULL; 508 } 509 510 /* Like cp_lookup_symbol_via_imports, but if BLOCK is a function, it 511 searches through the template parameters of the function and the 512 function's type. */ 513 514 struct block_symbol 515 cp_lookup_symbol_imports_or_template (const char *scope, 516 const char *name, 517 const struct block *block, 518 const domain_enum domain) 519 { 520 struct symbol *function = BLOCK_FUNCTION (block); 521 struct block_symbol result; 522 523 if (symbol_lookup_debug) 524 { 525 fprintf_unfiltered (gdb_stdlog, 526 "cp_lookup_symbol_imports_or_template" 527 " (%s, %s, %s, %s)\n", 528 scope, name, host_address_to_string (block), 529 domain_name (domain)); 530 } 531 532 if (function != NULL && SYMBOL_LANGUAGE (function) == language_cplus) 533 { 534 /* Search the function's template parameters. */ 535 if (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION (function)) 536 { 537 struct template_symbol *templ 538 = (struct template_symbol *) function; 539 struct symbol *sym = search_symbol_list (name, 540 templ->n_template_arguments, 541 templ->template_arguments); 542 543 if (sym != NULL) 544 { 545 if (symbol_lookup_debug) 546 { 547 fprintf_unfiltered (gdb_stdlog, 548 "cp_lookup_symbol_imports_or_template" 549 " (...) = %s\n", 550 host_address_to_string (sym)); 551 } 552 return (struct block_symbol) {sym, block}; 553 } 554 } 555 556 /* Search the template parameters of the function's defining 557 context. */ 558 if (SYMBOL_NATURAL_NAME (function)) 559 { 560 struct type *context; 561 std::string name_copy (SYMBOL_NATURAL_NAME (function)); 562 const struct language_defn *lang = language_def (language_cplus); 563 struct gdbarch *arch = symbol_arch (function); 564 const struct block *parent = BLOCK_SUPERBLOCK (block); 565 struct symbol *sym; 566 567 while (1) 568 { 569 unsigned int prefix_len 570 = cp_entire_prefix_len (name_copy.c_str ()); 571 572 if (prefix_len == 0) 573 context = NULL; 574 else 575 { 576 name_copy.erase (prefix_len); 577 context = lookup_typename (lang, arch, 578 name_copy.c_str (), 579 parent, 1); 580 } 581 582 if (context == NULL) 583 break; 584 585 sym 586 = search_symbol_list (name, 587 TYPE_N_TEMPLATE_ARGUMENTS (context), 588 TYPE_TEMPLATE_ARGUMENTS (context)); 589 if (sym != NULL) 590 { 591 if (symbol_lookup_debug) 592 { 593 fprintf_unfiltered 594 (gdb_stdlog, 595 "cp_lookup_symbol_imports_or_template (...) = %s\n", 596 host_address_to_string (sym)); 597 } 598 return (struct block_symbol) {sym, parent}; 599 } 600 } 601 } 602 } 603 604 result = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1, 1); 605 if (symbol_lookup_debug) 606 { 607 fprintf_unfiltered (gdb_stdlog, 608 "cp_lookup_symbol_imports_or_template (...) = %s\n", 609 result.symbol != NULL 610 ? host_address_to_string (result.symbol) : "NULL"); 611 } 612 return result; 613 } 614 615 /* Search for NAME by applying relevant import statements belonging to BLOCK 616 and its parents. SCOPE is the namespace scope of the context in which the 617 search is being evaluated. */ 618 619 static struct block_symbol 620 cp_lookup_symbol_via_all_imports (const char *scope, const char *name, 621 const struct block *block, 622 const domain_enum domain) 623 { 624 struct block_symbol sym; 625 626 while (block != NULL) 627 { 628 sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 0, 1); 629 if (sym.symbol) 630 return sym; 631 632 block = BLOCK_SUPERBLOCK (block); 633 } 634 635 return null_block_symbol; 636 } 637 638 /* Searches for NAME in the current namespace, and by applying 639 relevant import statements belonging to BLOCK and its parents. 640 SCOPE is the namespace scope of the context in which the search is 641 being evaluated. */ 642 643 struct block_symbol 644 cp_lookup_symbol_namespace (const char *scope, 645 const char *name, 646 const struct block *block, 647 const domain_enum domain) 648 { 649 struct block_symbol sym; 650 651 if (symbol_lookup_debug) 652 { 653 fprintf_unfiltered (gdb_stdlog, 654 "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n", 655 scope, name, host_address_to_string (block), 656 domain_name (domain)); 657 } 658 659 /* First, try to find the symbol in the given namespace. */ 660 sym = cp_lookup_symbol_in_namespace (scope, name, block, domain, 1); 661 662 /* Search for name in namespaces imported to this and parent blocks. */ 663 if (sym.symbol == NULL) 664 sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain); 665 666 if (symbol_lookup_debug) 667 { 668 fprintf_unfiltered (gdb_stdlog, 669 "cp_lookup_symbol_namespace (...) = %s\n", 670 sym.symbol != NULL 671 ? host_address_to_string (sym.symbol) : "NULL"); 672 } 673 return sym; 674 } 675 676 /* Lookup NAME at namespace scope (or, in C terms, in static and 677 global variables). SCOPE is the namespace that the current 678 function is defined within; only consider namespaces whose length 679 is at least SCOPE_LEN. Other arguments are as in 680 cp_lookup_symbol_nonlocal. 681 682 For example, if we're within a function A::B::f and looking for a 683 symbol x, this will get called with NAME = "x", SCOPE = "A::B", and 684 SCOPE_LEN = 0. It then calls itself with NAME and SCOPE the same, 685 but with SCOPE_LEN = 1. And then it calls itself with NAME and 686 SCOPE the same, but with SCOPE_LEN = 4. This third call looks for 687 "A::B::x"; if it doesn't find it, then the second call looks for 688 "A::x", and if that call fails, then the first call looks for 689 "x". */ 690 691 static struct block_symbol 692 lookup_namespace_scope (const struct language_defn *langdef, 693 const char *name, 694 const struct block *block, 695 const domain_enum domain, 696 const char *scope, 697 int scope_len) 698 { 699 char *the_namespace; 700 701 if (scope[scope_len] != '\0') 702 { 703 /* Recursively search for names in child namespaces first. */ 704 705 struct block_symbol sym; 706 int new_scope_len = scope_len; 707 708 /* If the current scope is followed by "::", skip past that. */ 709 if (new_scope_len != 0) 710 { 711 gdb_assert (scope[new_scope_len] == ':'); 712 new_scope_len += 2; 713 } 714 new_scope_len += cp_find_first_component (scope + new_scope_len); 715 sym = lookup_namespace_scope (langdef, name, block, domain, 716 scope, new_scope_len); 717 if (sym.symbol != NULL) 718 return sym; 719 } 720 721 /* Okay, we didn't find a match in our children, so look for the 722 name in the current namespace. 723 724 If we there is no scope and we know we have a bare symbol, then short 725 circuit everything and call cp_lookup_bare_symbol directly. 726 This isn't an optimization, rather it allows us to pass LANGDEF which 727 is needed for primitive type lookup. The test doesn't have to be 728 perfect: if NAME is a bare symbol that our test doesn't catch (e.g., a 729 template symbol with "::" in the argument list) then 730 cp_lookup_symbol_in_namespace will catch it. */ 731 732 if (scope_len == 0 && strchr (name, ':') == NULL) 733 return cp_lookup_bare_symbol (langdef, name, block, domain, 1); 734 735 the_namespace = (char *) alloca (scope_len + 1); 736 strncpy (the_namespace, scope, scope_len); 737 the_namespace[scope_len] = '\0'; 738 return cp_lookup_symbol_in_namespace (the_namespace, name, 739 block, domain, 1); 740 } 741 742 /* The C++-specific version of name lookup for static and global 743 names. This makes sure that names get looked for in all namespaces 744 that are in scope. NAME is the natural name of the symbol that 745 we're looking for, BLOCK is the block that we're searching within, 746 DOMAIN says what kind of symbols we're looking for. */ 747 748 struct block_symbol 749 cp_lookup_symbol_nonlocal (const struct language_defn *langdef, 750 const char *name, 751 const struct block *block, 752 const domain_enum domain) 753 { 754 struct block_symbol sym; 755 const char *scope = block_scope (block); 756 757 if (symbol_lookup_debug) 758 { 759 fprintf_unfiltered (gdb_stdlog, 760 "cp_lookup_symbol_non_local" 761 " (%s, %s (scope %s), %s)\n", 762 name, host_address_to_string (block), scope, 763 domain_name (domain)); 764 } 765 766 /* First, try to find the symbol in the given namespace, and all 767 containing namespaces. */ 768 sym = lookup_namespace_scope (langdef, name, block, domain, scope, 0); 769 770 /* Search for name in namespaces imported to this and parent blocks. */ 771 if (sym.symbol == NULL) 772 sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain); 773 774 if (symbol_lookup_debug) 775 { 776 fprintf_unfiltered (gdb_stdlog, 777 "cp_lookup_symbol_nonlocal (...) = %s\n", 778 (sym.symbol != NULL 779 ? host_address_to_string (sym.symbol) 780 : "NULL")); 781 } 782 return sym; 783 } 784 785 /* Search through the base classes of PARENT_TYPE for a base class 786 named NAME and return its type. If not found, return NULL. */ 787 788 struct type * 789 cp_find_type_baseclass_by_name (struct type *parent_type, const char *name) 790 { 791 int i; 792 793 parent_type = check_typedef (parent_type); 794 for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i) 795 { 796 struct type *type = check_typedef (TYPE_BASECLASS (parent_type, i)); 797 const char *base_name = TYPE_BASECLASS_NAME (parent_type, i); 798 799 if (base_name == NULL) 800 continue; 801 802 if (streq (base_name, name)) 803 return type; 804 805 type = cp_find_type_baseclass_by_name (type, name); 806 if (type != NULL) 807 return type; 808 } 809 810 return NULL; 811 } 812 813 /* Search through the base classes of PARENT_TYPE for a symbol named 814 NAME in block BLOCK. */ 815 816 static struct block_symbol 817 find_symbol_in_baseclass (struct type *parent_type, const char *name, 818 const struct block *block, const domain_enum domain, 819 int is_in_anonymous) 820 { 821 int i; 822 struct block_symbol sym; 823 824 sym.symbol = NULL; 825 sym.block = NULL; 826 827 for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i) 828 { 829 struct type *base_type = TYPE_BASECLASS (parent_type, i); 830 const char *base_name = TYPE_BASECLASS_NAME (parent_type, i); 831 832 if (base_name == NULL) 833 continue; 834 835 std::string concatenated_name = std::string (base_name) + "::" + name; 836 837 sym = cp_lookup_nested_symbol_1 (base_type, name, 838 concatenated_name.c_str (), 839 block, domain, 1, is_in_anonymous); 840 if (sym.symbol != NULL) 841 break; 842 } 843 844 return sym; 845 } 846 847 /* Helper function to look up NESTED_NAME in CONTAINER_TYPE and in DOMAIN 848 and within the context of BLOCK. 849 NESTED_NAME may have scope ("::"). 850 CONTAINER_TYPE needn't have been "check_typedef'd" yet. 851 CONCATENATED_NAME is the fully scoped spelling of NESTED_NAME, it is 852 passed as an argument so that callers can control how space for it is 853 allocated. 854 If BASIC_LOOKUP is non-zero then perform a basic lookup of 855 CONCATENATED_NAME. See cp_basic_lookup_symbol for details. 856 If IS_IN_ANONYMOUS is non-zero then CONCATENATED_NAME is in an anonymous 857 namespace. */ 858 859 static struct block_symbol 860 cp_lookup_nested_symbol_1 (struct type *container_type, 861 const char *nested_name, 862 const char *concatenated_name, 863 const struct block *block, 864 const domain_enum domain, 865 int basic_lookup, int is_in_anonymous) 866 { 867 struct block_symbol sym; 868 869 /* NOTE: carlton/2003-11-10: We don't treat C++ class members 870 of classes like, say, data or function members. Instead, 871 they're just represented by symbols whose names are 872 qualified by the name of the surrounding class. This is 873 just like members of namespaces; in particular, 874 cp_basic_lookup_symbol works when looking them up. */ 875 876 if (basic_lookup) 877 { 878 sym = cp_basic_lookup_symbol (concatenated_name, block, domain, 879 is_in_anonymous); 880 if (sym.symbol != NULL) 881 return sym; 882 } 883 884 /* Now search all static file-level symbols. We have to do this for things 885 like typedefs in the class. We do not try to guess any imported 886 namespace as even the fully specified namespace search is already not 887 C++ compliant and more assumptions could make it too magic. */ 888 889 /* First search in this symtab, what we want is possibly there. */ 890 sym = lookup_symbol_in_static_block (concatenated_name, block, domain); 891 if (sym.symbol != NULL) 892 return sym; 893 894 /* Nope. We now have to search all static blocks in all objfiles, 895 even if block != NULL, because there's no guarantees as to which 896 symtab the symbol we want is in. Except for symbols defined in 897 anonymous namespaces should be treated as local to a single file, 898 which we just searched. */ 899 if (!is_in_anonymous) 900 { 901 sym = lookup_static_symbol (concatenated_name, domain); 902 if (sym.symbol != NULL) 903 return sym; 904 } 905 906 /* If this is a class with baseclasses, search them next. */ 907 container_type = check_typedef (container_type); 908 if (TYPE_N_BASECLASSES (container_type) > 0) 909 { 910 sym = find_symbol_in_baseclass (container_type, nested_name, block, 911 domain, is_in_anonymous); 912 if (sym.symbol != NULL) 913 return sym; 914 } 915 916 return null_block_symbol; 917 } 918 919 /* Look up a symbol named NESTED_NAME that is nested inside the C++ 920 class or namespace given by PARENT_TYPE, from within the context 921 given by BLOCK, and in DOMAIN. 922 Return NULL if there is no such nested symbol. */ 923 924 struct block_symbol 925 cp_lookup_nested_symbol (struct type *parent_type, 926 const char *nested_name, 927 const struct block *block, 928 const domain_enum domain) 929 { 930 /* type_name_no_tag_or_error provides better error reporting using the 931 original type. */ 932 struct type *saved_parent_type = parent_type; 933 934 parent_type = check_typedef (parent_type); 935 936 if (symbol_lookup_debug) 937 { 938 const char *type_name = type_name_no_tag (saved_parent_type); 939 940 fprintf_unfiltered (gdb_stdlog, 941 "cp_lookup_nested_symbol (%s, %s, %s, %s)\n", 942 type_name != NULL ? type_name : "unnamed", 943 nested_name, host_address_to_string (block), 944 domain_name (domain)); 945 } 946 947 switch (TYPE_CODE (parent_type)) 948 { 949 case TYPE_CODE_STRUCT: 950 case TYPE_CODE_NAMESPACE: 951 case TYPE_CODE_UNION: 952 case TYPE_CODE_ENUM: 953 /* NOTE: Handle modules here as well, because Fortran is re-using the C++ 954 specific code to lookup nested symbols in modules, by calling the 955 function pointer la_lookup_symbol_nonlocal, which ends up here. */ 956 case TYPE_CODE_MODULE: 957 { 958 int size; 959 const char *parent_name = type_name_no_tag_or_error (saved_parent_type); 960 struct block_symbol sym; 961 char *concatenated_name; 962 int is_in_anonymous; 963 964 size = strlen (parent_name) + 2 + strlen (nested_name) + 1; 965 concatenated_name = (char *) alloca (size); 966 xsnprintf (concatenated_name, size, "%s::%s", 967 parent_name, nested_name); 968 is_in_anonymous = cp_is_in_anonymous (concatenated_name); 969 970 sym = cp_lookup_nested_symbol_1 (parent_type, nested_name, 971 concatenated_name, block, domain, 972 1, is_in_anonymous); 973 974 if (symbol_lookup_debug) 975 { 976 fprintf_unfiltered (gdb_stdlog, 977 "cp_lookup_nested_symbol (...) = %s\n", 978 (sym.symbol != NULL 979 ? host_address_to_string (sym.symbol) 980 : "NULL")); 981 } 982 return sym; 983 } 984 985 case TYPE_CODE_FUNC: 986 case TYPE_CODE_METHOD: 987 if (symbol_lookup_debug) 988 { 989 fprintf_unfiltered (gdb_stdlog, 990 "cp_lookup_nested_symbol (...) = NULL" 991 " (func/method)\n"); 992 } 993 return null_block_symbol; 994 995 default: 996 internal_error (__FILE__, __LINE__, 997 _("cp_lookup_nested_symbol called " 998 "on a non-aggregate type.")); 999 } 1000 } 1001 1002 /* The C++-version of lookup_transparent_type. */ 1003 1004 /* FIXME: carlton/2004-01-16: The problem that this is trying to 1005 address is that, unfortunately, sometimes NAME is wrong: it may not 1006 include the name of namespaces enclosing the type in question. 1007 lookup_transparent_type gets called when the type in question 1008 is a declaration, and we're trying to find its definition; but, for 1009 declarations, our type name deduction mechanism doesn't work. 1010 There's nothing we can do to fix this in general, I think, in the 1011 absence of debug information about namespaces (I've filed PR 1012 gdb/1511 about this); until such debug information becomes more 1013 prevalent, one heuristic which sometimes looks is to search for the 1014 definition in namespaces containing the current namespace. 1015 1016 We should delete this functions once the appropriate debug 1017 information becomes more widespread. (GCC 3.4 will be the first 1018 released version of GCC with such information.) */ 1019 1020 struct type * 1021 cp_lookup_transparent_type (const char *name) 1022 { 1023 /* First, try the honest way of looking up the definition. */ 1024 struct type *t = basic_lookup_transparent_type (name); 1025 const char *scope; 1026 1027 if (t != NULL) 1028 return t; 1029 1030 /* If that doesn't work and we're within a namespace, look there 1031 instead. */ 1032 scope = block_scope (get_selected_block (0)); 1033 1034 if (scope[0] == '\0') 1035 return NULL; 1036 1037 return cp_lookup_transparent_type_loop (name, scope, 0); 1038 } 1039 1040 /* Lookup the type definition associated to NAME in namespaces/classes 1041 containing SCOPE whose name is strictly longer than LENGTH. LENGTH 1042 must be the index of the start of a component of SCOPE. */ 1043 1044 static struct type * 1045 cp_lookup_transparent_type_loop (const char *name, 1046 const char *scope, 1047 int length) 1048 { 1049 int scope_length = length + cp_find_first_component (scope + length); 1050 char *full_name; 1051 1052 /* If the current scope is followed by "::", look in the next 1053 component. */ 1054 if (scope[scope_length] == ':') 1055 { 1056 struct type *retval 1057 = cp_lookup_transparent_type_loop (name, scope, 1058 scope_length + 2); 1059 1060 if (retval != NULL) 1061 return retval; 1062 } 1063 1064 full_name = (char *) alloca (scope_length + 2 + strlen (name) + 1); 1065 strncpy (full_name, scope, scope_length); 1066 strncpy (full_name + scope_length, "::", 2); 1067 strcpy (full_name + scope_length + 2, name); 1068 1069 return basic_lookup_transparent_type (full_name); 1070 } 1071 1072 /* This used to do something but was removed when it became 1073 obsolete. */ 1074 1075 static void 1076 maintenance_cplus_namespace (char *args, int from_tty) 1077 { 1078 printf_unfiltered (_("The `maint namespace' command was removed.\n")); 1079 } 1080 1081 /* Provide a prototype to silence -Wmissing-prototypes. */ 1082 extern initialize_file_ftype _initialize_cp_namespace; 1083 1084 void 1085 _initialize_cp_namespace (void) 1086 { 1087 struct cmd_list_element *cmd; 1088 1089 cmd = add_cmd ("namespace", class_maintenance, 1090 maintenance_cplus_namespace, 1091 _("Deprecated placeholder for removed functionality."), 1092 &maint_cplus_cmd_list); 1093 deprecate_cmd (cmd, NULL); 1094 } 1095