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