gdb/
[external/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       const char *len;
85
86       /* Start with a quick-and-dirty check for mention of "(anonymous
87          namespace)".  */
88
89       if (!cp_is_anonymous (name))
90         return;
91
92       previous_component = 0;
93       next_component = cp_find_first_component (name + previous_component);
94
95       while (name[next_component] == ':')
96         {
97           if ((next_component - previous_component) == ANONYMOUS_NAMESPACE_LEN
98               && strncmp (name + previous_component,
99                           "(anonymous namespace)",
100                           ANONYMOUS_NAMESPACE_LEN) == 0)
101             {
102               int dest_len = (previous_component == 0 ? 0 : previous_component - 2);
103               int src_len = next_component;
104
105               char *dest = alloca (dest_len + 1);
106               char *src = alloca (src_len + 1);
107
108               memcpy (dest, name, dest_len);
109               memcpy (src, name, src_len);
110
111               dest[dest_len] = '\0';
112               src[src_len] = '\0';
113
114               /* We've found a component of the name that's an
115                  anonymous namespace.  So add symbols in it to the
116                  namespace given by the previous component if there is
117                  one, or to the global namespace if there isn't.  */
118               cp_add_using_directive (dest, src, NULL, NULL,
119                                       &SYMBOL_SYMTAB (symbol)->objfile->objfile_obstack);
120             }
121           /* The "+ 2" is for the "::".  */
122           previous_component = next_component + 2;
123           next_component = (previous_component
124                             + cp_find_first_component (name
125                                                        + previous_component));
126         }
127     }
128 }
129
130
131 /* Add a using directive to using_directives.  If the using directive in
132    question has already been added, don't add it twice.
133    Create a new struct using_direct which imports the namespace SRC into the
134    scope DEST.  ALIAS is the name of the imported namespace in the current
135    scope.  If ALIAS is NULL then the namespace is known by its original name.
136    DECLARATION is the name if the imported varable if this is a declaration
137    import (Eg. using A::x), otherwise it is NULL. The arguments are copied
138    into newly allocated memory so they can be temporaries.  */
139
140 void
141 cp_add_using_directive (const char *dest,
142                         const char *src,
143                         const char *alias,
144                         const char *declaration,
145                         struct obstack *obstack)
146 {
147   struct using_direct *current;
148   struct using_direct *new;
149   
150   /* Has it already been added?  */
151
152   for (current = using_directives; current != NULL; current = current->next)
153     {
154       if (strcmp (current->import_src, src) == 0
155           && strcmp (current->import_dest, dest) == 0
156           && ((alias == NULL && current->alias == NULL)
157               || (alias != NULL && current->alias != NULL
158                   && strcmp (alias, current->alias) == 0))
159           && ((declaration == NULL && current->declaration == NULL)
160               || (declaration != NULL && current->declaration != NULL
161                   && strcmp (declaration, current->declaration) == 0)))
162         return;
163     }
164
165   new = OBSTACK_ZALLOC (obstack, struct using_direct);
166
167   new->import_src = obsavestring (src, strlen (src), obstack);
168   new->import_dest = obsavestring (dest, strlen (dest), obstack);
169
170   if (alias != NULL)
171     new->alias = obsavestring (alias, strlen (alias), obstack);
172
173   if (declaration != NULL)
174     new->declaration = obsavestring (declaration, strlen (declaration),
175                                      obstack);
176
177   new->next = using_directives;
178   using_directives = new;
179 }
180
181 /* Record the namespace that the function defined by SYMBOL was
182    defined in, if necessary.  BLOCK is the associated block; use
183    OBSTACK for allocation.  */
184
185 void
186 cp_set_block_scope (const struct symbol *symbol,
187                     struct block *block,
188                     struct obstack *obstack,
189                     const char *processing_current_prefix,
190                     int processing_has_namespace_info)
191 {
192   if (processing_has_namespace_info)
193     {
194       block_set_scope
195         (block, obsavestring (processing_current_prefix,
196                               strlen (processing_current_prefix),
197                               obstack),
198          obstack);
199     }
200   else if (SYMBOL_DEMANGLED_NAME (symbol) != NULL)
201     {
202       /* Try to figure out the appropriate namespace from the
203          demangled name.  */
204
205       /* FIXME: carlton/2003-04-15: If the function in question is
206          a method of a class, the name will actually include the
207          name of the class as well.  This should be harmless, but
208          is a little unfortunate.  */
209
210       const char *name = SYMBOL_DEMANGLED_NAME (symbol);
211       unsigned int prefix_len = cp_entire_prefix_len (name);
212
213       block_set_scope (block,
214                        obsavestring (name, prefix_len, obstack),
215                        obstack);
216     }
217 }
218
219 /* Test whether or not NAMESPACE looks like it mentions an anonymous
220    namespace; return nonzero if so.  */
221
222 int
223 cp_is_anonymous (const char *namespace)
224 {
225   return (strstr (namespace, "(anonymous namespace)")
226           != NULL);
227 }
228
229 /* The C++-specific version of name lookup for static and global
230    names.  This makes sure that names get looked for in all namespaces
231    that are in scope.  NAME is the natural name of the symbol that
232    we're looking for, BLOCK is the block that we're searching within,
233    DOMAIN says what kind of symbols we're looking for, and if SYMTAB is
234    non-NULL, we should store the symtab where we found the symbol in it.  */
235
236 struct symbol *
237 cp_lookup_symbol_nonlocal (const char *name,
238                            const struct block *block,
239                            const domain_enum domain)
240 {
241   struct symbol *sym;
242   const char *scope = block_scope (block);
243
244   sym = lookup_namespace_scope (name, block, domain, scope, 0);
245   if (sym != NULL)
246     return sym;
247
248   return cp_lookup_symbol_namespace (scope, name, block, domain);
249 }
250
251 /* Look up NAME in the C++ namespace NAMESPACE.  Other arguments are as in
252    cp_lookup_symbol_nonlocal.  */
253
254 static struct symbol *
255 cp_lookup_symbol_in_namespace (const char *namespace,
256                                const char *name,
257                                const struct block *block,
258                                const domain_enum domain)
259 {
260   if (namespace[0] == '\0')
261     {
262       return lookup_symbol_file (name, block, domain, 0);
263     }
264   else
265     {
266       char *concatenated_name = alloca (strlen (namespace) + 2 +
267                                         strlen (name) + 1);
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         if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
582           return NULL;
583         else
584           return SYMBOL_TYPE (sym);
585       }
586     default:
587       internal_error (__FILE__, __LINE__,
588                       _("cp_lookup_nested_type called on a non-aggregate type."));
589     }
590 }
591
592 /* The C++-version of lookup_transparent_type.  */
593
594 /* FIXME: carlton/2004-01-16: The problem that this is trying to
595    address is that, unfortunately, sometimes NAME is wrong: it may not
596    include the name of namespaces enclosing the type in question.
597    lookup_transparent_type gets called when the the type in question
598    is a declaration, and we're trying to find its definition; but, for
599    declarations, our type name deduction mechanism doesn't work.
600    There's nothing we can do to fix this in general, I think, in the
601    absence of debug information about namespaces (I've filed PR
602    gdb/1511 about this); until such debug information becomes more
603    prevalent, one heuristic which sometimes looks is to search for the
604    definition in namespaces containing the current namespace.
605
606    We should delete this functions once the appropriate debug
607    information becomes more widespread.  (GCC 3.4 will be the first
608    released version of GCC with such information.)  */
609
610 struct type *
611 cp_lookup_transparent_type (const char *name)
612 {
613   /* First, try the honest way of looking up the definition.  */
614   struct type *t = basic_lookup_transparent_type (name);
615   const char *scope;
616
617   if (t != NULL)
618     return t;
619
620   /* If that doesn't work and we're within a namespace, look there
621      instead.  */
622   scope = block_scope (get_selected_block (0));
623
624   if (scope[0] == '\0')
625     return NULL;
626
627   return cp_lookup_transparent_type_loop (name, scope, 0);
628 }
629
630 /* Lookup the the type definition associated to NAME in
631    namespaces/classes containing SCOPE whose name is strictly longer
632    than LENGTH.  LENGTH must be the index of the start of a
633    component of SCOPE.  */
634
635 static struct type *
636 cp_lookup_transparent_type_loop (const char *name, const char *scope,
637                                  int length)
638 {
639   int scope_length = length + cp_find_first_component (scope + length);
640   char *full_name;
641
642   /* If the current scope is followed by "::", look in the next
643      component.  */
644   if (scope[scope_length] == ':')
645     {
646       struct type *retval
647         = cp_lookup_transparent_type_loop (name, scope, scope_length + 2);
648       if (retval != NULL)
649         return retval;
650     }
651
652   full_name = alloca (scope_length + 2 + strlen (name) + 1);
653   strncpy (full_name, scope, scope_length);
654   strncpy (full_name + scope_length, "::", 2);
655   strcpy (full_name + scope_length + 2, name);
656
657   return basic_lookup_transparent_type (full_name);
658 }
659
660 /* Now come functions for dealing with symbols associated to
661    namespaces.  (They're used to store the namespaces themselves, not
662    objects that live in the namespaces.)  These symbols come in two
663    varieties: if we run into a DW_TAG_namespace DIE, then we know that
664    we have a namespace, so dwarf2read.c creates a symbol for it just
665    like normal.  But, unfortunately, versions of GCC through at least
666    3.3 don't generate those DIE's.  Our solution is to try to guess
667    their existence by looking at demangled names.  This might cause us
668    to misidentify classes as namespaces, however.  So we put those
669    symbols in a special block (one per objfile), and we only search
670    that block as a last resort.  */
671
672 /* FIXME: carlton/2003-06-12: Once versions of GCC that generate
673    DW_TAG_namespace have been out for a year or two, we should get rid
674    of all of this "possible namespace" nonsense.  */
675
676 /* Allocate everything necessary for the possible namespace block
677    associated to OBJFILE.  */
678
679 static void
680 initialize_namespace_symtab (struct objfile *objfile)
681 {
682   struct symtab *namespace_symtab;
683   struct blockvector *bv;
684   struct block *bl;
685
686   namespace_symtab = allocate_symtab ("<<C++-namespaces>>", objfile);
687   namespace_symtab->language = language_cplus;
688   namespace_symtab->free_code = free_nothing;
689   namespace_symtab->dirname = NULL;
690
691   bv = obstack_alloc (&objfile->objfile_obstack,
692                       sizeof (struct blockvector)
693                       + FIRST_LOCAL_BLOCK * sizeof (struct block *));
694   BLOCKVECTOR_NBLOCKS (bv) = FIRST_LOCAL_BLOCK + 1;
695   BLOCKVECTOR (namespace_symtab) = bv;
696   
697   /* Allocate empty GLOBAL_BLOCK and STATIC_BLOCK. */
698
699   bl = allocate_block (&objfile->objfile_obstack);
700   BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
701                                         NULL);
702   BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
703   bl = allocate_block (&objfile->objfile_obstack);
704   BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
705                                         NULL);
706   BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
707
708   /* Allocate the possible namespace block; we put it where the first
709      local block will live, though I don't think there's any need to
710      pretend that it's actually a local block (e.g. by setting
711      BLOCK_SUPERBLOCK appropriately).  We don't use the global or
712      static block because we don't want it searched during the normal
713      search of all global/static blocks in lookup_symbol: we only want
714      it used as a last resort.  */
715
716   /* NOTE: carlton/2003-09-11: I considered not associating the fake
717      symbols to a block/symtab at all.  But that would cause problems
718      with lookup_symbol's SYMTAB argument and with block_found, so
719      having a symtab/block for this purpose seems like the best
720      solution for now.  */
721
722   bl = allocate_block (&objfile->objfile_obstack);
723   BLOCK_DICT (bl) = dict_create_hashed_expandable ();
724   BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK) = bl;
725
726   namespace_symtab->free_func = free_namespace_block;
727
728   objfile->cp_namespace_symtab = namespace_symtab;
729 }
730
731 /* Locate the possible namespace block associated to OBJFILE,
732    allocating it if necessary.  */
733
734 static struct block *
735 get_possible_namespace_block (struct objfile *objfile)
736 {
737   if (objfile->cp_namespace_symtab == NULL)
738     initialize_namespace_symtab (objfile);
739
740   return BLOCKVECTOR_BLOCK (BLOCKVECTOR (objfile->cp_namespace_symtab),
741                             FIRST_LOCAL_BLOCK);
742 }
743
744 /* Free the dictionary associated to the possible namespace block.  */
745
746 static void
747 free_namespace_block (struct symtab *symtab)
748 {
749   struct block *possible_namespace_block;
750
751   possible_namespace_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab),
752                                                 FIRST_LOCAL_BLOCK);
753   gdb_assert (possible_namespace_block != NULL);
754   dict_free (BLOCK_DICT (possible_namespace_block));
755 }
756
757 /* Ensure that there are symbols in the possible namespace block
758    associated to OBJFILE for all initial substrings of NAME that look
759    like namespaces or classes.  NAME should end in a member variable:
760    it shouldn't consist solely of namespaces.  */
761
762 void
763 cp_check_possible_namespace_symbols (const char *name, struct objfile *objfile)
764 {
765   check_possible_namespace_symbols_loop (name,
766                                          cp_find_first_component (name),
767                                          objfile);
768 }
769
770 /* This is a helper loop for cp_check_possible_namespace_symbols; it
771    ensures that there are symbols in the possible namespace block
772    associated to OBJFILE for all namespaces that are initial
773    substrings of NAME of length at least LEN.  It returns 1 if a
774    previous loop had already created the shortest such symbol and 0
775    otherwise.
776
777    This function assumes that if there is already a symbol associated
778    to a substring of NAME of a given length, then there are already
779    symbols associated to all substrings of NAME whose length is less
780    than that length.  So if cp_check_possible_namespace_symbols has
781    been called once with argument "A::B::C::member", then that will
782    create symbols "A", "A::B", and "A::B::C".  If it is then later
783    called with argument "A::B::D::member", then the new call will
784    generate a new symbol for "A::B::D", but once it sees that "A::B"
785    has already been created, it doesn't bother checking to see if "A"
786    has also been created.  */
787
788 static int
789 check_possible_namespace_symbols_loop (const char *name, int len,
790                                        struct objfile *objfile)
791 {
792   if (name[len] == ':')
793     {
794       int done;
795       int next_len = len + 2;
796
797       next_len += cp_find_first_component (name + next_len);
798       done = check_possible_namespace_symbols_loop (name, next_len,
799                                                     objfile);
800
801       if (!done)
802         done = check_one_possible_namespace_symbol (name, len, objfile);
803
804       return done;
805     }
806   else
807     return 0;
808 }
809
810 /* Check to see if there's already a possible namespace symbol in
811    OBJFILE whose name is the initial substring of NAME of length LEN.
812    If not, create one and return 0; otherwise, return 1.  */
813
814 static int
815 check_one_possible_namespace_symbol (const char *name, int len,
816                                      struct objfile *objfile)
817 {
818   struct block *block = get_possible_namespace_block (objfile);
819   char *name_copy = alloca (len + 1);
820   struct symbol *sym;
821
822   memcpy (name_copy, name, len);
823   name_copy[len] = '\0';
824   sym = lookup_block_symbol (block, name_copy, VAR_DOMAIN);
825
826   if (sym == NULL)
827     {
828       struct type *type;
829
830       type = init_type (TYPE_CODE_NAMESPACE, 0, 0, name_copy, objfile);
831
832       TYPE_TAG_NAME (type) = TYPE_NAME (type);
833
834       sym = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
835       memset (sym, 0, sizeof (struct symbol));
836       SYMBOL_LANGUAGE (sym) = language_cplus;
837       /* Note that init_type copied the name to the objfile's
838          obstack.  */
839       SYMBOL_SET_NAMES (sym, TYPE_NAME (type), len, 0, objfile);
840       SYMBOL_CLASS (sym) = LOC_TYPEDEF;
841       SYMBOL_TYPE (sym) = type;
842       SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
843
844       dict_add_symbol (BLOCK_DICT (block), sym);
845
846       return 0;
847     }
848   else
849     return 1;
850 }
851
852 /* Look for a symbol named NAME in all the possible namespace blocks.
853    If one is found, return it.  */
854
855 static struct symbol *
856 lookup_possible_namespace_symbol (const char *name)
857 {
858   struct objfile *objfile;
859
860   ALL_OBJFILES (objfile)
861     {
862       struct symbol *sym;
863
864       sym = lookup_block_symbol (get_possible_namespace_block (objfile),
865                                  name, VAR_DOMAIN);
866
867       if (sym != NULL)
868         return sym;
869     }
870
871   return NULL;
872 }
873
874 /* Print out all the possible namespace symbols.  */
875
876 static void
877 maintenance_cplus_namespace (char *args, int from_tty)
878 {
879   struct objfile *objfile;
880   printf_unfiltered (_("Possible namespaces:\n"));
881   ALL_OBJFILES (objfile)
882     {
883       struct dict_iterator iter;
884       struct symbol *sym;
885
886       ALL_BLOCK_SYMBOLS (get_possible_namespace_block (objfile), iter, sym)
887         {
888           printf_unfiltered ("%s\n", SYMBOL_PRINT_NAME (sym));
889         }
890     }
891 }
892
893 /* Provide a prototype to silence -Wmissing-prototypes.  */
894 extern initialize_file_ftype _initialize_cp_namespace;
895
896 void
897 _initialize_cp_namespace (void)
898 {
899   add_cmd ("namespace", class_maintenance, maintenance_cplus_namespace,
900            _("Print the list of possible C++ namespaces."),
901            &maint_cplus_cmd_list);
902 }