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