Use XCNEW gdbarch_tdep
[external/binutils.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 }