btrace: Remove struct btrace_thread_info::{begin,end}.
[deliverable/binutils-gdb.git] / gdb / cp-namespace.c
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 }
This page took 0.072744 seconds and 4 git commands to generate.