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