PR binutils/11711
[platform/upstream/binutils.git] / gdb / cp-namespace.c
1 /* Helper routines for C++ support in GDB.
2    Copyright (C) 2003, 2004, 2007, 2008, 2009, 2010
3    Free Software Foundation, Inc.
4
5    Contributed by David Carlton and by Kealia, Inc.
6
7    This file is part of GDB.
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License as published by
11    the Free Software Foundation; either version 3 of the License, or
12    (at your option) any later version.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
21
22 #include "defs.h"
23 #include "cp-support.h"
24 #include "gdb_obstack.h"
25 #include "symtab.h"
26 #include "symfile.h"
27 #include "gdb_assert.h"
28 #include "block.h"
29 #include "objfiles.h"
30 #include "gdbtypes.h"
31 #include "dictionary.h"
32 #include "command.h"
33 #include "frame.h"
34 #include "buildsym.h"
35
36 static struct symbol *lookup_namespace_scope (const char *name,
37                                               const struct block *block,
38                                               const domain_enum domain,
39                                               const char *scope,
40                                               int scope_len);
41
42 static struct symbol *lookup_symbol_file (const char *name,
43                                           const struct block *block,
44                                           const domain_enum domain,
45                                           int anonymous_namespace);
46
47 static struct type *cp_lookup_transparent_type_loop (const char *name,
48                                                      const char *scope,
49                                                      int scope_len);
50
51 static void initialize_namespace_symtab (struct objfile *objfile);
52
53 static struct block *get_possible_namespace_block (struct objfile *objfile);
54
55 static void free_namespace_block (struct symtab *symtab);
56
57 static int check_possible_namespace_symbols_loop (const char *name,
58                                                   int len,
59                                                   struct objfile *objfile);
60
61 static int check_one_possible_namespace_symbol (const char *name,
62                                                 int len,
63                                                 struct objfile *objfile);
64
65 static struct symbol *lookup_possible_namespace_symbol (const char *name);
66
67 static void maintenance_cplus_namespace (char *args, int from_tty);
68
69 /* Check to see if SYMBOL refers to an object contained within an
70    anonymous namespace; if so, add an appropriate using directive.  */
71
72 /* Optimize away strlen ("(anonymous namespace)").  */
73
74 #define ANONYMOUS_NAMESPACE_LEN 21
75
76 void
77 cp_scan_for_anonymous_namespaces (const struct symbol *symbol)
78 {
79   if (SYMBOL_DEMANGLED_NAME (symbol) != NULL)
80     {
81       const char *name = SYMBOL_DEMANGLED_NAME (symbol);
82       unsigned int previous_component;
83       unsigned int next_component;
84
85       /* Start with a quick-and-dirty check for mention of "(anonymous
86          namespace)".  */
87
88       if (!cp_is_anonymous (name))
89         return;
90
91       previous_component = 0;
92       next_component = cp_find_first_component (name + previous_component);
93
94       while (name[next_component] == ':')
95         {
96           if ((next_component - previous_component) == ANONYMOUS_NAMESPACE_LEN
97               && strncmp (name + previous_component,
98                           "(anonymous namespace)",
99                           ANONYMOUS_NAMESPACE_LEN) == 0)
100             {
101               int dest_len = (previous_component == 0 ? 0 : previous_component - 2);
102               int src_len = next_component;
103
104               char *dest = alloca (dest_len + 1);
105               char *src = alloca (src_len + 1);
106
107               memcpy (dest, name, dest_len);
108               memcpy (src, name, src_len);
109
110               dest[dest_len] = '\0';
111               src[src_len] = '\0';
112
113               /* We've found a component of the name that's an
114                  anonymous namespace.  So add symbols in it to the
115                  namespace given by the previous component if there is
116                  one, or to the global namespace if there isn't.  */
117               cp_add_using_directive (dest, src, NULL, NULL,
118                                       &SYMBOL_SYMTAB (symbol)->objfile->objfile_obstack);
119             }
120           /* The "+ 2" is for the "::".  */
121           previous_component = next_component + 2;
122           next_component = (previous_component
123                             + cp_find_first_component (name
124                                                        + previous_component));
125         }
126     }
127 }
128
129
130 /* Add a using directive to using_directives.  If the using directive in
131    question has already been added, don't add it twice.
132    Create a new struct using_direct which imports the namespace SRC into the
133    scope DEST.  ALIAS is the name of the imported namespace in the current
134    scope.  If ALIAS is NULL then the namespace is known by its original name.
135    DECLARATION is the name if the imported varable if this is a declaration
136    import (Eg. using A::x), otherwise it is NULL. The arguments are copied
137    into newly allocated memory so they can be temporaries.  */
138
139 void
140 cp_add_using_directive (const char *dest,
141                         const char *src,
142                         const char *alias,
143                         const char *declaration,
144                         struct obstack *obstack)
145 {
146   struct using_direct *current;
147   struct using_direct *new;
148   
149   /* Has it already been added?  */
150
151   for (current = using_directives; current != NULL; current = current->next)
152     {
153       if (strcmp (current->import_src, src) == 0
154           && strcmp (current->import_dest, dest) == 0
155           && ((alias == NULL && current->alias == NULL)
156               || (alias != NULL && current->alias != NULL
157                   && strcmp (alias, current->alias) == 0))
158           && ((declaration == NULL && current->declaration == NULL)
159               || (declaration != NULL && current->declaration != NULL
160                   && strcmp (declaration, current->declaration) == 0)))
161         return;
162     }
163
164   new = OBSTACK_ZALLOC (obstack, struct using_direct);
165
166   new->import_src = obsavestring (src, strlen (src), obstack);
167   new->import_dest = obsavestring (dest, strlen (dest), obstack);
168
169   if (alias != NULL)
170     new->alias = obsavestring (alias, strlen (alias), obstack);
171
172   if (declaration != NULL)
173     new->declaration = obsavestring (declaration, strlen (declaration),
174                                      obstack);
175
176   new->next = using_directives;
177   using_directives = new;
178 }
179
180 /* Record the namespace that the function defined by SYMBOL was
181    defined in, if necessary.  BLOCK is the associated block; use
182    OBSTACK for allocation.  */
183
184 void
185 cp_set_block_scope (const struct symbol *symbol,
186                     struct block *block,
187                     struct obstack *obstack,
188                     const char *processing_current_prefix,
189                     int processing_has_namespace_info)
190 {
191   if (processing_has_namespace_info)
192     {
193       block_set_scope
194         (block, obsavestring (processing_current_prefix,
195                               strlen (processing_current_prefix),
196                               obstack),
197          obstack);
198     }
199   else if (SYMBOL_DEMANGLED_NAME (symbol) != NULL)
200     {
201       /* Try to figure out the appropriate namespace from the
202          demangled name.  */
203
204       /* FIXME: carlton/2003-04-15: If the function in question is
205          a method of a class, the name will actually include the
206          name of the class as well.  This should be harmless, but
207          is a little unfortunate.  */
208
209       const char *name = SYMBOL_DEMANGLED_NAME (symbol);
210       unsigned int prefix_len = cp_entire_prefix_len (name);
211
212       block_set_scope (block,
213                        obsavestring (name, prefix_len, obstack),
214                        obstack);
215     }
216 }
217
218 /* Test whether or not NAMESPACE looks like it mentions an anonymous
219    namespace; return nonzero if so.  */
220
221 int
222 cp_is_anonymous (const char *namespace)
223 {
224   return (strstr (namespace, "(anonymous namespace)")
225           != NULL);
226 }
227
228 /* The C++-specific version of name lookup for static and global
229    names.  This makes sure that names get looked for in all namespaces
230    that are in scope.  NAME is the natural name of the symbol that
231    we're looking for, BLOCK is the block that we're searching within,
232    DOMAIN says what kind of symbols we're looking for, and if SYMTAB is
233    non-NULL, we should store the symtab where we found the symbol in it.  */
234
235 struct symbol *
236 cp_lookup_symbol_nonlocal (const char *name,
237                            const struct block *block,
238                            const domain_enum domain)
239 {
240   struct symbol *sym;
241   const char *scope = block_scope (block);
242
243   sym = lookup_namespace_scope (name, block, domain, scope, 0);
244   if (sym != NULL)
245     return sym;
246
247   return cp_lookup_symbol_namespace (scope, name, block, domain);
248 }
249
250 /* Look up NAME in the C++ namespace NAMESPACE.  Other arguments are as in
251    cp_lookup_symbol_nonlocal.  */
252
253 static struct symbol *
254 cp_lookup_symbol_in_namespace (const char *namespace,
255                                const char *name,
256                                const struct block *block,
257                                const domain_enum domain)
258 {
259   if (namespace[0] == '\0')
260     {
261       return lookup_symbol_file (name, block, domain, 0);
262     }
263   else
264     {
265       char *concatenated_name = alloca (strlen (namespace) + 2 +
266                                         strlen (name) + 1);
267
268       strcpy (concatenated_name, namespace);
269       strcat (concatenated_name, "::");
270       strcat (concatenated_name, name);
271       return lookup_symbol_file (concatenated_name, block,
272                                  domain, cp_is_anonymous (namespace));
273     }
274 }
275
276 /* Used for cleanups to reset the "searched" flag incase
277    of an error.  */
278
279 static void
280 reset_directive_searched (void *data)
281 {
282   struct using_direct *direct = data;
283   direct->searched = 0;
284 }
285
286 /* Search for NAME by applying all import statements belonging
287    to BLOCK which are applicable in SCOPE.  If DECLARATION_ONLY the search
288    is restricted to using declarations.
289    Example:
290
291      namespace A{
292        int x;
293      }
294      using A::x;
295
296    If SEARCH_PARENTS the search will include imports which are applicable in
297    parents of SCOPE.
298    Example:
299
300      namespace A{
301        using namespace X;
302        namespace B{
303          using namespace Y;
304        }
305      }
306
307    If SCOPE is "A::B" and SEARCH_PARENTS is true the imports of namespaces X
308    and Y will be considered.  If SEARCH_PARENTS is false only the import of Y
309    is considered.  */
310
311 struct symbol *
312 cp_lookup_symbol_imports (const char *scope,
313                           const char *name,
314                           const struct block *block,
315                           const domain_enum domain,
316                           const int declaration_only,
317                           const int search_parents)
318 {
319   struct using_direct *current;
320   struct symbol *sym = NULL;
321   int len;
322   int directive_match;
323   struct cleanup *searched_cleanup;
324
325   /* First, try to find the symbol in the given namespace.  */
326   if (!declaration_only)
327     sym = cp_lookup_symbol_in_namespace (scope, name, block, domain);
328   
329   if (sym != NULL)
330     return sym;
331
332   /* Go through the using directives.  If any of them add new
333      names to the namespace we're searching in, see if we can find a
334      match by applying them.  */
335
336   for (current = block_using (block);
337        current != NULL;
338        current = current->next)
339     {
340       len = strlen (current->import_dest);
341       directive_match = (search_parents
342                          ? (strncmp (scope, current->import_dest,
343                                      strlen (current->import_dest)) == 0
344                             && (len == 0
345                                 || scope[len] == ':' || scope[len] == '\0'))
346                          : strcmp (scope, current->import_dest) == 0);
347
348       /* If the import destination is the current scope or one of its ancestors then
349          it is applicable.  */
350       if (directive_match && !current->searched)
351         {
352         /* Mark this import as searched so that the recursive call does not
353            search it again.  */
354         current->searched = 1;
355         searched_cleanup = make_cleanup (reset_directive_searched, current);
356
357         /* If there is an import of a single declaration, compare the imported
358            declaration (after optional renaming by its alias) with the sought
359            out name.  If there is a match pass current->import_src as NAMESPACE
360            to direct the search towards the imported namespace.  */
361         if (current->declaration
362             && strcmp (name, current->alias ? current->alias
363                                             : current->declaration) == 0)
364           sym = cp_lookup_symbol_in_namespace (current->import_src,
365                                                current->declaration,
366                                                block,
367                                                domain);
368
369         /* If this is a DECLARATION_ONLY search or a symbol was found or
370            this import statement was an import declaration, the search
371            of this import is complete.  */
372         if (declaration_only || sym != NULL || current->declaration)
373           {
374             current->searched = 0;
375             discard_cleanups (searched_cleanup);
376
377             if (sym != NULL)
378               return sym;
379
380             continue;
381           }
382
383         if (current->alias != NULL && strcmp (name, current->alias) == 0)
384           /* If the import is creating an alias and the alias matches the
385              sought name.  Pass current->import_src as the NAME to direct the
386              search towards the aliased namespace.  */
387           {
388             sym = cp_lookup_symbol_in_namespace (scope,
389                                                  current->import_src,
390                                                  block,
391                                                  domain);
392           }
393         else if (current->alias == NULL)
394           {
395             /* If this import statement creates no alias, pass current->inner as
396                NAMESPACE to direct the search towards the imported namespace.  */
397             sym = cp_lookup_symbol_imports (current->import_src,
398                                             name,
399                                             block,
400                                             domain,
401                                             0,
402                                             0);
403           }
404         current->searched = 0;
405         discard_cleanups (searched_cleanup);
406
407         if (sym != NULL)
408           return sym;
409         }
410     }
411
412   return NULL;
413 }
414
415  /* Searches for NAME in the current namespace, and by applying relevant import
416     statements belonging to BLOCK and its parents. SCOPE is the namespace scope
417     of the context in which the search is being evaluated.  */
418
419 struct symbol*
420 cp_lookup_symbol_namespace (const char *scope,
421                             const char *name,
422                             const struct block *block,
423                             const domain_enum domain)
424 {
425   struct symbol *sym;
426   
427   /* First, try to find the symbol in the given namespace.  */
428   sym = cp_lookup_symbol_in_namespace (scope, name, block, domain);
429   if (sym != NULL)
430     return sym;
431
432   /* Search for name in namespaces imported to this and parent blocks.  */
433   while (block != NULL)
434     {
435       sym = cp_lookup_symbol_imports (scope, name, block, domain, 0, 1);
436
437       if (sym)
438         return sym;
439
440       block = BLOCK_SUPERBLOCK (block);
441     }
442
443   return NULL;
444 }
445
446 /* Lookup NAME at namespace scope (or, in C terms, in static and
447    global variables).  SCOPE is the namespace that the current
448    function is defined within; only consider namespaces whose length
449    is at least SCOPE_LEN.  Other arguments are as in
450    cp_lookup_symbol_nonlocal.
451
452    For example, if we're within a function A::B::f and looking for a
453    symbol x, this will get called with NAME = "x", SCOPE = "A::B", and
454    SCOPE_LEN = 0.  It then calls itself with NAME and SCOPE the same,
455    but with SCOPE_LEN = 1.  And then it calls itself with NAME and
456    SCOPE the same, but with SCOPE_LEN = 4.  This third call looks for
457    "A::B::x"; if it doesn't find it, then the second call looks for
458    "A::x", and if that call fails, then the first call looks for
459    "x".  */
460
461 static struct symbol *
462 lookup_namespace_scope (const char *name,
463                         const struct block *block,
464                         const domain_enum domain,
465                         const char *scope,
466                         int scope_len)
467 {
468   char *namespace;
469
470   if (scope[scope_len] != '\0')
471     {
472       /* Recursively search for names in child namespaces first.  */
473
474       struct symbol *sym;
475       int new_scope_len = scope_len;
476
477       /* If the current scope is followed by "::", skip past that.  */
478       if (new_scope_len != 0)
479         {
480           gdb_assert (scope[new_scope_len] == ':');
481           new_scope_len += 2;
482         }
483       new_scope_len += cp_find_first_component (scope + new_scope_len);
484       sym = lookup_namespace_scope (name, block, domain, scope, new_scope_len);
485       if (sym != NULL)
486         return sym;
487     }
488
489   /* Okay, we didn't find a match in our children, so look for the
490      name in the current namespace.  */
491
492   namespace = alloca (scope_len + 1);
493   strncpy (namespace, scope, scope_len);
494   namespace[scope_len] = '\0';
495   return cp_lookup_symbol_in_namespace (namespace, name, block, domain);
496 }
497
498 /* Look up NAME in BLOCK's static block and in global blocks.  If
499    ANONYMOUS_NAMESPACE is nonzero, the symbol in question is located
500    within an anonymous namespace.  Other arguments are as in
501    cp_lookup_symbol_nonlocal.  */
502
503 static struct symbol *
504 lookup_symbol_file (const char *name,
505                     const struct block *block,
506                     const domain_enum domain,
507                     int anonymous_namespace)
508 {
509   struct symbol *sym = NULL;
510
511   sym = lookup_symbol_static (name, block, domain);
512   if (sym != NULL)
513     return sym;
514
515   if (anonymous_namespace)
516     {
517       /* Symbols defined in anonymous namespaces have external linkage
518          but should be treated as local to a single file nonetheless.
519          So we only search the current file's global block.  */
520
521       const struct block *global_block = block_global_block (block);
522       
523       if (global_block != NULL)
524         sym = lookup_symbol_aux_block (name, global_block, domain);
525     }
526   else
527     {
528       sym = lookup_symbol_global (name, block, domain);
529     }
530
531   if (sym != NULL)
532     return sym;
533
534   /* Now call "lookup_possible_namespace_symbol".  Symbols in here
535      claim to be associated to namespaces, but this claim might be
536      incorrect: the names in question might actually correspond to
537      classes instead of namespaces.  But if they correspond to
538      classes, then we should have found a match for them above.  So if
539      we find them now, they should be genuine.  */
540
541   /* FIXME: carlton/2003-06-12: This is a hack and should eventually
542      be deleted: see comments below.  */
543
544   if (domain == VAR_DOMAIN)
545     {
546       sym = lookup_possible_namespace_symbol (name);
547       if (sym != NULL)
548         return sym;
549     }
550
551   return NULL;
552 }
553
554 /* Look up a type named NESTED_NAME that is nested inside the C++
555    class or namespace given by PARENT_TYPE, from within the context
556    given by BLOCK.  Return NULL if there is no such nested type.  */
557
558 struct type *
559 cp_lookup_nested_type (struct type *parent_type,
560                        const char *nested_name,
561                        const struct block *block)
562 {
563   switch (TYPE_CODE (parent_type))
564     {
565     case TYPE_CODE_STRUCT:
566     case TYPE_CODE_NAMESPACE:
567     case TYPE_CODE_UNION:
568       {
569         /* NOTE: carlton/2003-11-10: We don't treat C++ class members
570            of classes like, say, data or function members.  Instead,
571            they're just represented by symbols whose names are
572            qualified by the name of the surrounding class.  This is
573            just like members of namespaces; in particular,
574            lookup_symbol_namespace works when looking them up.  */
575
576         const char *parent_name = TYPE_TAG_NAME (parent_type);
577         struct symbol *sym = cp_lookup_symbol_in_namespace (parent_name,
578                                                             nested_name,
579                                                             block,
580                                                             VAR_DOMAIN);
581
582         if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
583           return NULL;
584         else
585           return SYMBOL_TYPE (sym);
586       }
587     default:
588       internal_error (__FILE__, __LINE__,
589                       _("cp_lookup_nested_type called on a non-aggregate type."));
590     }
591 }
592
593 /* The C++-version of lookup_transparent_type.  */
594
595 /* FIXME: carlton/2004-01-16: The problem that this is trying to
596    address is that, unfortunately, sometimes NAME is wrong: it may not
597    include the name of namespaces enclosing the type in question.
598    lookup_transparent_type gets called when the the type in question
599    is a declaration, and we're trying to find its definition; but, for
600    declarations, our type name deduction mechanism doesn't work.
601    There's nothing we can do to fix this in general, I think, in the
602    absence of debug information about namespaces (I've filed PR
603    gdb/1511 about this); until such debug information becomes more
604    prevalent, one heuristic which sometimes looks is to search for the
605    definition in namespaces containing the current namespace.
606
607    We should delete this functions once the appropriate debug
608    information becomes more widespread.  (GCC 3.4 will be the first
609    released version of GCC with such information.)  */
610
611 struct type *
612 cp_lookup_transparent_type (const char *name)
613 {
614   /* First, try the honest way of looking up the definition.  */
615   struct type *t = basic_lookup_transparent_type (name);
616   const char *scope;
617
618   if (t != NULL)
619     return t;
620
621   /* If that doesn't work and we're within a namespace, look there
622      instead.  */
623   scope = block_scope (get_selected_block (0));
624
625   if (scope[0] == '\0')
626     return NULL;
627
628   return cp_lookup_transparent_type_loop (name, scope, 0);
629 }
630
631 /* Lookup the the type definition associated to NAME in
632    namespaces/classes containing SCOPE whose name is strictly longer
633    than LENGTH.  LENGTH must be the index of the start of a
634    component of SCOPE.  */
635
636 static struct type *
637 cp_lookup_transparent_type_loop (const char *name, const char *scope,
638                                  int length)
639 {
640   int scope_length = length + cp_find_first_component (scope + length);
641   char *full_name;
642
643   /* If the current scope is followed by "::", look in the next
644      component.  */
645   if (scope[scope_length] == ':')
646     {
647       struct type *retval
648         = cp_lookup_transparent_type_loop (name, scope, scope_length + 2);
649
650       if (retval != NULL)
651         return retval;
652     }
653
654   full_name = alloca (scope_length + 2 + strlen (name) + 1);
655   strncpy (full_name, scope, scope_length);
656   strncpy (full_name + scope_length, "::", 2);
657   strcpy (full_name + scope_length + 2, name);
658
659   return basic_lookup_transparent_type (full_name);
660 }
661
662 /* Now come functions for dealing with symbols associated to
663    namespaces.  (They're used to store the namespaces themselves, not
664    objects that live in the namespaces.)  These symbols come in two
665    varieties: if we run into a DW_TAG_namespace DIE, then we know that
666    we have a namespace, so dwarf2read.c creates a symbol for it just
667    like normal.  But, unfortunately, versions of GCC through at least
668    3.3 don't generate those DIE's.  Our solution is to try to guess
669    their existence by looking at demangled names.  This might cause us
670    to misidentify classes as namespaces, however.  So we put those
671    symbols in a special block (one per objfile), and we only search
672    that block as a last resort.  */
673
674 /* FIXME: carlton/2003-06-12: Once versions of GCC that generate
675    DW_TAG_namespace have been out for a year or two, we should get rid
676    of all of this "possible namespace" nonsense.  */
677
678 /* Allocate everything necessary for the possible namespace block
679    associated to OBJFILE.  */
680
681 static void
682 initialize_namespace_symtab (struct objfile *objfile)
683 {
684   struct symtab *namespace_symtab;
685   struct blockvector *bv;
686   struct block *bl;
687
688   namespace_symtab = allocate_symtab ("<<C++-namespaces>>", objfile);
689   namespace_symtab->language = language_cplus;
690   namespace_symtab->free_code = free_nothing;
691   namespace_symtab->dirname = NULL;
692
693   bv = obstack_alloc (&objfile->objfile_obstack,
694                       sizeof (struct blockvector)
695                       + FIRST_LOCAL_BLOCK * sizeof (struct block *));
696   BLOCKVECTOR_NBLOCKS (bv) = FIRST_LOCAL_BLOCK + 1;
697   BLOCKVECTOR (namespace_symtab) = bv;
698   
699   /* Allocate empty GLOBAL_BLOCK and STATIC_BLOCK. */
700
701   bl = allocate_block (&objfile->objfile_obstack);
702   BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
703                                         NULL);
704   BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
705   bl = allocate_block (&objfile->objfile_obstack);
706   BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
707                                         NULL);
708   BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
709
710   /* Allocate the possible namespace block; we put it where the first
711      local block will live, though I don't think there's any need to
712      pretend that it's actually a local block (e.g. by setting
713      BLOCK_SUPERBLOCK appropriately).  We don't use the global or
714      static block because we don't want it searched during the normal
715      search of all global/static blocks in lookup_symbol: we only want
716      it used as a last resort.  */
717
718   /* NOTE: carlton/2003-09-11: I considered not associating the fake
719      symbols to a block/symtab at all.  But that would cause problems
720      with lookup_symbol's SYMTAB argument and with block_found, so
721      having a symtab/block for this purpose seems like the best
722      solution for now.  */
723
724   bl = allocate_block (&objfile->objfile_obstack);
725   BLOCK_DICT (bl) = dict_create_hashed_expandable ();
726   BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK) = bl;
727
728   namespace_symtab->free_func = free_namespace_block;
729
730   objfile->cp_namespace_symtab = namespace_symtab;
731 }
732
733 /* Locate the possible namespace block associated to OBJFILE,
734    allocating it if necessary.  */
735
736 static struct block *
737 get_possible_namespace_block (struct objfile *objfile)
738 {
739   if (objfile->cp_namespace_symtab == NULL)
740     initialize_namespace_symtab (objfile);
741
742   return BLOCKVECTOR_BLOCK (BLOCKVECTOR (objfile->cp_namespace_symtab),
743                             FIRST_LOCAL_BLOCK);
744 }
745
746 /* Free the dictionary associated to the possible namespace block.  */
747
748 static void
749 free_namespace_block (struct symtab *symtab)
750 {
751   struct block *possible_namespace_block;
752
753   possible_namespace_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab),
754                                                 FIRST_LOCAL_BLOCK);
755   gdb_assert (possible_namespace_block != NULL);
756   dict_free (BLOCK_DICT (possible_namespace_block));
757 }
758
759 /* Ensure that there are symbols in the possible namespace block
760    associated to OBJFILE for all initial substrings of NAME that look
761    like namespaces or classes.  NAME should end in a member variable:
762    it shouldn't consist solely of namespaces.  */
763
764 void
765 cp_check_possible_namespace_symbols (const char *name, struct objfile *objfile)
766 {
767   check_possible_namespace_symbols_loop (name,
768                                          cp_find_first_component (name),
769                                          objfile);
770 }
771
772 /* This is a helper loop for cp_check_possible_namespace_symbols; it
773    ensures that there are symbols in the possible namespace block
774    associated to OBJFILE for all namespaces that are initial
775    substrings of NAME of length at least LEN.  It returns 1 if a
776    previous loop had already created the shortest such symbol and 0
777    otherwise.
778
779    This function assumes that if there is already a symbol associated
780    to a substring of NAME of a given length, then there are already
781    symbols associated to all substrings of NAME whose length is less
782    than that length.  So if cp_check_possible_namespace_symbols has
783    been called once with argument "A::B::C::member", then that will
784    create symbols "A", "A::B", and "A::B::C".  If it is then later
785    called with argument "A::B::D::member", then the new call will
786    generate a new symbol for "A::B::D", but once it sees that "A::B"
787    has already been created, it doesn't bother checking to see if "A"
788    has also been created.  */
789
790 static int
791 check_possible_namespace_symbols_loop (const char *name, int len,
792                                        struct objfile *objfile)
793 {
794   if (name[len] == ':')
795     {
796       int done;
797       int next_len = len + 2;
798
799       next_len += cp_find_first_component (name + next_len);
800       done = check_possible_namespace_symbols_loop (name, next_len,
801                                                     objfile);
802
803       if (!done)
804         done = check_one_possible_namespace_symbol (name, len, objfile);
805
806       return done;
807     }
808   else
809     return 0;
810 }
811
812 /* Check to see if there's already a possible namespace symbol in
813    OBJFILE whose name is the initial substring of NAME of length LEN.
814    If not, create one and return 0; otherwise, return 1.  */
815
816 static int
817 check_one_possible_namespace_symbol (const char *name, int len,
818                                      struct objfile *objfile)
819 {
820   struct block *block = get_possible_namespace_block (objfile);
821   char *name_copy = alloca (len + 1);
822   struct symbol *sym;
823
824   memcpy (name_copy, name, len);
825   name_copy[len] = '\0';
826   sym = lookup_block_symbol (block, name_copy, VAR_DOMAIN);
827
828   if (sym == NULL)
829     {
830       struct type *type;
831
832       type = init_type (TYPE_CODE_NAMESPACE, 0, 0, name_copy, objfile);
833
834       TYPE_TAG_NAME (type) = TYPE_NAME (type);
835
836       sym = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
837       memset (sym, 0, sizeof (struct symbol));
838       SYMBOL_LANGUAGE (sym) = language_cplus;
839       /* Note that init_type copied the name to the objfile's
840          obstack.  */
841       SYMBOL_SET_NAMES (sym, TYPE_NAME (type), len, 0, objfile);
842       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
843       SYMBOL_TYPE (sym) = type;
844       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
845
846       dict_add_symbol (BLOCK_DICT (block), sym);
847
848       return 0;
849     }
850   else
851     return 1;
852 }
853
854 /* Look for a symbol named NAME in all the possible namespace blocks.
855    If one is found, return it.  */
856
857 static struct symbol *
858 lookup_possible_namespace_symbol (const char *name)
859 {
860   struct objfile *objfile;
861
862   ALL_OBJFILES (objfile)
863     {
864       struct symbol *sym;
865
866       sym = lookup_block_symbol (get_possible_namespace_block (objfile),
867                                  name, VAR_DOMAIN);
868
869       if (sym != NULL)
870         return sym;
871     }
872
873   return NULL;
874 }
875
876 /* Print out all the possible namespace symbols.  */
877
878 static void
879 maintenance_cplus_namespace (char *args, int from_tty)
880 {
881   struct objfile *objfile;
882
883   printf_unfiltered (_("Possible namespaces:\n"));
884   ALL_OBJFILES (objfile)
885     {
886       struct dict_iterator iter;
887       struct symbol *sym;
888
889       ALL_BLOCK_SYMBOLS (get_possible_namespace_block (objfile), iter, sym)
890         {
891           printf_unfiltered ("%s\n", SYMBOL_PRINT_NAME (sym));
892         }
893     }
894 }
895
896 /* Provide a prototype to silence -Wmissing-prototypes.  */
897 extern initialize_file_ftype _initialize_cp_namespace;
898
899 void
900 _initialize_cp_namespace (void)
901 {
902   add_cmd ("namespace", class_maintenance, maintenance_cplus_namespace,
903            _("Print the list of possible C++ namespaces."),
904            &maint_cplus_cmd_list);
905 }