167217Sn_hibma/* Helper routines for C++ support in GDB.
261560Sn_hibma   Copyright 2003, 2004 Free Software Foundation, Inc.
361560Sn_hibma
461560Sn_hibma   Contributed by David Carlton and by Kealia, Inc.
561560Sn_hibma
661560Sn_hibma   This file is part of GDB.
761560Sn_hibma
861560Sn_hibma   This program is free software; you can redistribute it and/or modify
961560Sn_hibma   it under the terms of the GNU General Public License as published by
1061560Sn_hibma   the Free Software Foundation; either version 2 of the License, or
1161560Sn_hibma   (at your option) any later version.
1261560Sn_hibma
1361560Sn_hibma   This program is distributed in the hope that it will be useful,
1461560Sn_hibma   but WITHOUT ANY WARRANTY; without even the implied warranty of
1561560Sn_hibma   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1661560Sn_hibma   GNU General Public License for more details.
1761560Sn_hibma
1861560Sn_hibma   You should have received a copy of the GNU General Public License
1961560Sn_hibma   along with this program; if not, write to the Free Software
2061560Sn_hibma   Foundation, Inc., 59 Temple Place - Suite 330,
2161560Sn_hibma   Boston, MA 02111-1307, USA.  */
2261560Sn_hibma
2361560Sn_hibma#include "defs.h"
2461560Sn_hibma#include "cp-support.h"
2561560Sn_hibma#include "gdb_obstack.h"
2661560Sn_hibma#include "symtab.h"
2761560Sn_hibma#include "symfile.h"
2861560Sn_hibma#include "gdb_assert.h"
2984224Sdillon#include "block.h"
3084224Sdillon#include "objfiles.h"
3184224Sdillon#include "gdbtypes.h"
3261560Sn_hibma#include "dictionary.h"
3361560Sn_hibma#include "command.h"
3461560Sn_hibma#include "frame.h"
3561560Sn_hibma
3661560Sn_hibma/* When set, the file that we're processing is known to have debugging
3761560Sn_hibma   info for C++ namespaces.  */
3861560Sn_hibma
3961560Sn_hibma/* NOTE: carlton/2004-01-13: No currently released version of GCC (the
4061560Sn_hibma   latest of which is 3.3.x at the time of this writing) produces this
41188945Sthompsa   debug info.  GCC 3.4 should, however.  */
4261560Sn_hibma
43113273Smdoddunsigned char processing_has_namespace_info;
4461560Sn_hibma
4561560Sn_hibma/* This contains our best guess as to the name of the current
46187994Salfred   enclosing namespace(s)/class(es), if any.  For example, if we're
47187994Salfred   within the method foo() in the following code:
48187994Salfred
49187994Salfred    namespace N {
50187994Salfred      class C {
51188945Sthompsa	void foo () {
52187994Salfred	}
53187994Salfred      };
54188945Sthompsa    }
55187994Salfred
56187994Salfred   then processing_current_prefix should be set to "N::C".  If
57187994Salfred   processing_has_namespace_info is false, then this variable might
58187994Salfred   not be reliable.  */
59187994Salfred
60187994Salfredconst char *processing_current_prefix;
61205728Skaiw
62205728Skaiw/* List of using directives that are active in the current file.  */
63205728Skaiw
64205728Skaiwstatic struct using_direct *using_list;
65187994Salfred
66187994Salfredstatic struct using_direct *cp_add_using (const char *name,
67187994Salfred					  unsigned int inner_len,
68205728Skaiw					  unsigned int outer_len,
69205728Skaiw					  struct using_direct *next);
70205728Skaiw
71240762Smavstatic struct using_direct *cp_copy_usings (struct using_direct *using,
72205728Skaiw					    struct obstack *obstack);
73205728Skaiw
74205728Skaiwstatic struct symbol *lookup_namespace_scope (const char *name,
75205728Skaiw					      const char *linkage_name,
76205728Skaiw					      const struct block *block,
77205728Skaiw					      const domain_enum domain,
78205728Skaiw					      struct symtab **symtab,
79205728Skaiw					      const char *scope,
80205728Skaiw					      int scope_len);
81205728Skaiw
82205728Skaiwstatic struct symbol *lookup_symbol_file (const char *name,
83205728Skaiw					  const char *linkage_name,
84205728Skaiw					  const struct block *block,
85187994Salfred					  const domain_enum domain,
86188945Sthompsa					  struct symtab **symtab,
87187994Salfred					  int anonymous_namespace);
88187994Salfred
89187994Salfredstatic struct type *cp_lookup_transparent_type_loop (const char *name,
90188945Sthompsa						     const char *scope,
91187994Salfred						     int scope_len);
92187994Salfred
93187994Salfredstatic void initialize_namespace_symtab (struct objfile *objfile);
94187994Salfred
95187994Salfredstatic struct block *get_possible_namespace_block (struct objfile *objfile);
9661560Sn_hibma
9767217Sn_hibmastatic void free_namespace_block (struct symtab *symtab);
9861560Sn_hibma
99192992Sthompsastatic int check_possible_namespace_symbols_loop (const char *name,
100187994Salfred						  int len,
101187994Salfred						  struct objfile *objfile);
10261560Sn_hibma
103187994Salfredstatic int check_one_possible_namespace_symbol (const char *name,
104187994Salfred						int len,
105187994Salfred						struct objfile *objfile);
106213920Shselasky
107187994Salfredstatic
108189108Sthompsastruct symbol *lookup_possible_namespace_symbol (const char *name,
109188945Sthompsa						 struct symtab **symtab);
110187994Salfred
111187994Salfredstatic void maintenance_cplus_namespace (char *args, int from_tty);
112187994Salfred
113189108Sthompsa/* Set up support for dealing with C++ namespace info in the current
114189108Sthompsa   symtab.  */
115189108Sthompsa
116187994Salfredvoid cp_initialize_namespace ()
117187994Salfred{
118187994Salfred  processing_has_namespace_info = 0;
119187994Salfred  using_list = NULL;
120187994Salfred}
121187994Salfred
122187994Salfred/* Add all the using directives we've gathered to the current symtab.
123187994Salfred   STATIC_BLOCK should be the symtab's static block; OBSTACK is used
12467217Sn_hibma   for allocation.  */
12567217Sn_hibma
126187994Salfredvoid
127213920Shselaskycp_finalize_namespace (struct block *static_block,
128187994Salfred		       struct obstack *obstack)
129187994Salfred{
130187994Salfred  if (using_list != NULL)
131187994Salfred    {
132187994Salfred      block_set_using (static_block,
133187994Salfred		       cp_copy_usings (using_list, obstack),
134187994Salfred		       obstack);
135213920Shselasky      using_list = NULL;
136213920Shselasky    }
137213920Shselasky}
138213920Shselasky
139213920Shselasky/* Check to see if SYMBOL refers to an object contained within an
140213920Shselasky   anonymous namespace; if so, add an appropriate using directive.  */
141213920Shselasky
142187994Salfred/* Optimize away strlen ("(anonymous namespace)").  */
143213920Shselasky
144187994Salfred#define ANONYMOUS_NAMESPACE_LEN 21
145187994Salfred
146187994Salfredvoid
147187994Salfredcp_scan_for_anonymous_namespaces (const struct symbol *symbol)
148187994Salfred{
149187994Salfred  if (!processing_has_namespace_info
150187994Salfred      && SYMBOL_CPLUS_DEMANGLED_NAME (symbol) != NULL)
151187994Salfred    {
152187994Salfred      const char *name = SYMBOL_CPLUS_DEMANGLED_NAME (symbol);
153187994Salfred      unsigned int previous_component;
15467217Sn_hibma      unsigned int next_component;
15567217Sn_hibma      const char *len;
15667217Sn_hibma
15767217Sn_hibma      /* Start with a quick-and-dirty check for mention of "(anonymous
15867217Sn_hibma	 namespace)".  */
15967217Sn_hibma
16067217Sn_hibma      if (!cp_is_anonymous (name))
16167217Sn_hibma	return;
16261560Sn_hibma
16361560Sn_hibma      previous_component = 0;
16467217Sn_hibma      next_component = cp_find_first_component (name + previous_component);
16561560Sn_hibma
16667217Sn_hibma      while (name[next_component] == ':')
16767217Sn_hibma	{
16861560Sn_hibma	  if ((next_component - previous_component) == ANONYMOUS_NAMESPACE_LEN
16961560Sn_hibma	      && strncmp (name + previous_component,
17061560Sn_hibma			  "(anonymous namespace)",
17161560Sn_hibma			  ANONYMOUS_NAMESPACE_LEN) == 0)
17267217Sn_hibma	    {
17361560Sn_hibma	      /* We've found a component of the name that's an
17461560Sn_hibma		 anonymous namespace.  So add symbols in it to the
17561560Sn_hibma		 namespace given by the previous component if there is
17661560Sn_hibma		 one, or to the global namespace if there isn't.  */
177	      cp_add_using_directive (name,
178				      previous_component == 0
179				      ? 0 : previous_component - 2,
180				      next_component);
181	    }
182	  /* The "+ 2" is for the "::".  */
183	  previous_component = next_component + 2;
184	  next_component = (previous_component
185			    + cp_find_first_component (name
186						       + previous_component));
187	}
188    }
189}
190
191/* Add a using directive to using_list.  NAME is the start of a string
192   that should contain the namespaces we want to add as initial
193   substrings, OUTER_LENGTH is the end of the outer namespace, and
194   INNER_LENGTH is the end of the inner namespace.  If the using
195   directive in question has already been added, don't add it
196   twice.  */
197
198void
199cp_add_using_directive (const char *name, unsigned int outer_length,
200			unsigned int inner_length)
201{
202  struct using_direct *current;
203  struct using_direct *new;
204
205  /* Has it already been added?  */
206
207  for (current = using_list; current != NULL; current = current->next)
208    {
209      if ((strncmp (current->inner, name, inner_length) == 0)
210	  && (strlen (current->inner) == inner_length)
211	  && (strlen (current->outer) == outer_length))
212	return;
213    }
214
215  using_list = cp_add_using (name, inner_length, outer_length,
216			     using_list);
217}
218
219/* Record the namespace that the function defined by SYMBOL was
220   defined in, if necessary.  BLOCK is the associated block; use
221   OBSTACK for allocation.  */
222
223void
224cp_set_block_scope (const struct symbol *symbol,
225		    struct block *block,
226		    struct obstack *obstack)
227{
228  /* Make sure that the name was originally mangled: if not, there
229     certainly isn't any namespace information to worry about!  */
230
231  if (SYMBOL_CPLUS_DEMANGLED_NAME (symbol) != NULL)
232    {
233      if (processing_has_namespace_info)
234	{
235	  block_set_scope
236	    (block, obsavestring (processing_current_prefix,
237				  strlen (processing_current_prefix),
238				  obstack),
239	     obstack);
240	}
241      else
242	{
243	  /* Try to figure out the appropriate namespace from the
244	     demangled name.  */
245
246	  /* FIXME: carlton/2003-04-15: If the function in question is
247	     a method of a class, the name will actually include the
248	     name of the class as well.  This should be harmless, but
249	     is a little unfortunate.  */
250
251	  const char *name = SYMBOL_CPLUS_DEMANGLED_NAME (symbol);
252	  unsigned int prefix_len = cp_entire_prefix_len (name);
253
254	  block_set_scope (block,
255			   obsavestring (name, prefix_len, obstack),
256			   obstack);
257	}
258    }
259}
260
261/* Test whether or not NAMESPACE looks like it mentions an anonymous
262   namespace; return nonzero if so.  */
263
264int
265cp_is_anonymous (const char *namespace)
266{
267  return (strstr (namespace, "(anonymous namespace)")
268	  != NULL);
269}
270
271/* Create a new struct using direct whose inner namespace is the
272   initial substring of NAME of leng INNER_LEN and whose outer
273   namespace is the initial substring of NAME of length OUTER_LENGTH.
274   Set its next member in the linked list to NEXT; allocate all memory
275   using xmalloc.  It copies the strings, so NAME can be a temporary
276   string.  */
277
278static struct using_direct *
279cp_add_using (const char *name,
280	      unsigned int inner_len,
281	      unsigned int outer_len,
282	      struct using_direct *next)
283{
284  struct using_direct *retval;
285
286  gdb_assert (outer_len < inner_len);
287
288  retval = xmalloc (sizeof (struct using_direct));
289  retval->inner = savestring (name, inner_len);
290  retval->outer = savestring (name, outer_len);
291  retval->next = next;
292
293  return retval;
294}
295
296/* Make a copy of the using directives in the list pointed to by
297   USING, using OBSTACK to allocate memory.  Free all memory pointed
298   to by USING via xfree.  */
299
300static struct using_direct *
301cp_copy_usings (struct using_direct *using,
302		struct obstack *obstack)
303{
304  if (using == NULL)
305    {
306      return NULL;
307    }
308  else
309    {
310      struct using_direct *retval
311	= obstack_alloc (obstack, sizeof (struct using_direct));
312      retval->inner = obsavestring (using->inner, strlen (using->inner),
313				    obstack);
314      retval->outer = obsavestring (using->outer, strlen (using->outer),
315				    obstack);
316      retval->next = cp_copy_usings (using->next, obstack);
317
318      xfree (using->inner);
319      xfree (using->outer);
320      xfree (using);
321
322      return retval;
323    }
324}
325
326/* The C++-specific version of name lookup for static and global
327   names.  This makes sure that names get looked for in all namespaces
328   that are in scope.  NAME is the natural name of the symbol that
329   we're looking for, LINKAGE_NAME (which is optional) is its linkage
330   name, BLOCK is the block that we're searching within, DOMAIN says
331   what kind of symbols we're looking for, and if SYMTAB is non-NULL,
332   we should store the symtab where we found the symbol in it.  */
333
334struct symbol *
335cp_lookup_symbol_nonlocal (const char *name,
336			   const char *linkage_name,
337			   const struct block *block,
338			   const domain_enum domain,
339			   struct symtab **symtab)
340{
341  return lookup_namespace_scope (name, linkage_name, block, domain,
342				 symtab, block_scope (block), 0);
343}
344
345/* Lookup NAME at namespace scope (or, in C terms, in static and
346   global variables).  SCOPE is the namespace that the current
347   function is defined within; only consider namespaces whose length
348   is at least SCOPE_LEN.  Other arguments are as in
349   cp_lookup_symbol_nonlocal.
350
351   For example, if we're within a function A::B::f and looking for a
352   symbol x, this will get called with NAME = "x", SCOPE = "A::B", and
353   SCOPE_LEN = 0.  It then calls itself with NAME and SCOPE the same,
354   but with SCOPE_LEN = 1.  And then it calls itself with NAME and
355   SCOPE the same, but with SCOPE_LEN = 4.  This third call looks for
356   "A::B::x"; if it doesn't find it, then the second call looks for
357   "A::x", and if that call fails, then the first call looks for
358   "x".  */
359
360static struct symbol *
361lookup_namespace_scope (const char *name,
362			const char *linkage_name,
363			const struct block *block,
364			const domain_enum domain,
365			struct symtab **symtab,
366			const char *scope,
367			int scope_len)
368{
369  char *namespace;
370
371  if (scope[scope_len] != '\0')
372    {
373      /* Recursively search for names in child namespaces first.  */
374
375      struct symbol *sym;
376      int new_scope_len = scope_len;
377
378      /* If the current scope is followed by "::", skip past that.  */
379      if (new_scope_len != 0)
380	{
381	  gdb_assert (scope[new_scope_len] == ':');
382	  new_scope_len += 2;
383	}
384      new_scope_len += cp_find_first_component (scope + new_scope_len);
385      sym = lookup_namespace_scope (name, linkage_name, block,
386				    domain, symtab,
387				    scope, new_scope_len);
388      if (sym != NULL)
389	return sym;
390    }
391
392  /* Okay, we didn't find a match in our children, so look for the
393     name in the current namespace.  */
394
395  namespace = alloca (scope_len + 1);
396  strncpy (namespace, scope, scope_len);
397  namespace[scope_len] = '\0';
398  return cp_lookup_symbol_namespace (namespace, name, linkage_name,
399				     block, domain, symtab);
400}
401
402/* Look up NAME in the C++ namespace NAMESPACE, applying the using
403   directives that are active in BLOCK.  Other arguments are as in
404   cp_lookup_symbol_nonlocal.  */
405
406struct symbol *
407cp_lookup_symbol_namespace (const char *namespace,
408			    const char *name,
409			    const char *linkage_name,
410			    const struct block *block,
411			    const domain_enum domain,
412			    struct symtab **symtab)
413{
414  const struct using_direct *current;
415  struct symbol *sym;
416
417  /* First, go through the using directives.  If any of them add new
418     names to the namespace we're searching in, see if we can find a
419     match by applying them.  */
420
421  for (current = block_using (block);
422       current != NULL;
423       current = current->next)
424    {
425      if (strcmp (namespace, current->outer) == 0)
426	{
427	  sym = cp_lookup_symbol_namespace (current->inner,
428					    name,
429					    linkage_name,
430					    block,
431					    domain,
432					    symtab);
433	  if (sym != NULL)
434	    return sym;
435	}
436    }
437
438  /* We didn't find anything by applying any of the using directives
439     that are still applicable; so let's see if we've got a match
440     using the current namespace.  */
441
442  if (namespace[0] == '\0')
443    {
444      return lookup_symbol_file (name, linkage_name, block,
445				 domain, symtab, 0);
446    }
447  else
448    {
449      char *concatenated_name
450	= alloca (strlen (namespace) + 2 + strlen (name) + 1);
451      strcpy (concatenated_name, namespace);
452      strcat (concatenated_name, "::");
453      strcat (concatenated_name, name);
454      sym = lookup_symbol_file (concatenated_name, linkage_name,
455				block, domain, symtab,
456				cp_is_anonymous (namespace));
457      return sym;
458    }
459}
460
461/* Look up NAME in BLOCK's static block and in global blocks.  If
462   ANONYMOUS_NAMESPACE is nonzero, the symbol in question is located
463   within an anonymous namespace.  Other arguments are as in
464   cp_lookup_symbol_nonlocal.  */
465
466static struct symbol *
467lookup_symbol_file (const char *name,
468		    const char *linkage_name,
469		    const struct block *block,
470		    const domain_enum domain,
471		    struct symtab **symtab,
472		    int anonymous_namespace)
473{
474  struct symbol *sym = NULL;
475
476  sym = lookup_symbol_static (name, linkage_name, block, domain, symtab);
477  if (sym != NULL)
478    return sym;
479
480  if (anonymous_namespace)
481    {
482      /* Symbols defined in anonymous namespaces have external linkage
483	 but should be treated as local to a single file nonetheless.
484	 So we only search the current file's global block.  */
485
486      const struct block *global_block = block_global_block (block);
487
488      if (global_block != NULL)
489	sym = lookup_symbol_aux_block (name, linkage_name, global_block,
490				       domain, symtab);
491    }
492  else
493    {
494      sym = lookup_symbol_global (name, linkage_name, domain, symtab);
495    }
496
497  if (sym != NULL)
498    return sym;
499
500  /* Now call "lookup_possible_namespace_symbol".  Symbols in here
501     claim to be associated to namespaces, but this claim might be
502     incorrect: the names in question might actually correspond to
503     classes instead of namespaces.  But if they correspond to
504     classes, then we should have found a match for them above.  So if
505     we find them now, they should be genuine.  */
506
507  /* FIXME: carlton/2003-06-12: This is a hack and should eventually
508     be deleted: see comments below.  */
509
510  if (domain == VAR_DOMAIN)
511    {
512      sym = lookup_possible_namespace_symbol (name, symtab);
513      if (sym != NULL)
514	return sym;
515    }
516
517  return NULL;
518}
519
520/* Look up a type named NESTED_NAME that is nested inside the C++
521   class or namespace given by PARENT_TYPE, from within the context
522   given by BLOCK.  Return NULL if there is no such nested type.  */
523
524struct type *
525cp_lookup_nested_type (struct type *parent_type,
526		       const char *nested_name,
527		       const struct block *block)
528{
529  switch (TYPE_CODE (parent_type))
530    {
531    case TYPE_CODE_STRUCT:
532    case TYPE_CODE_NAMESPACE:
533      {
534	/* NOTE: carlton/2003-11-10: We don't treat C++ class members
535	   of classes like, say, data or function members.  Instead,
536	   they're just represented by symbols whose names are
537	   qualified by the name of the surrounding class.  This is
538	   just like members of namespaces; in particular,
539	   lookup_symbol_namespace works when looking them up.  */
540
541	const char *parent_name = TYPE_TAG_NAME (parent_type);
542	struct symbol *sym = cp_lookup_symbol_namespace (parent_name,
543							 nested_name,
544							 NULL,
545							 block,
546							 VAR_DOMAIN,
547							 NULL);
548	if (sym == NULL || SYMBOL_CLASS (sym) != LOC_TYPEDEF)
549	  return NULL;
550	else
551	  return SYMBOL_TYPE (sym);
552      }
553    default:
554      internal_error (__FILE__, __LINE__,
555		      "cp_lookup_nested_type called on a non-aggregate type.");
556    }
557}
558
559/* The C++-version of lookup_transparent_type.  */
560
561/* FIXME: carlton/2004-01-16: The problem that this is trying to
562   address is that, unfortunately, sometimes NAME is wrong: it may not
563   include the name of namespaces enclosing the type in question.
564   lookup_transparent_type gets called when the the type in question
565   is a declaration, and we're trying to find its definition; but, for
566   declarations, our type name deduction mechanism doesn't work.
567   There's nothing we can do to fix this in general, I think, in the
568   absence of debug information about namespaces (I've filed PR
569   gdb/1511 about this); until such debug information becomes more
570   prevalent, one heuristic which sometimes looks is to search for the
571   definition in namespaces containing the current namespace.
572
573   We should delete this functions once the appropriate debug
574   information becomes more widespread.  (GCC 3.4 will be the first
575   released version of GCC with such information.)  */
576
577struct type *
578cp_lookup_transparent_type (const char *name)
579{
580  /* First, try the honest way of looking up the definition.  */
581  struct type *t = basic_lookup_transparent_type (name);
582  const char *scope;
583
584  if (t != NULL)
585    return t;
586
587  /* If that doesn't work and we're within a namespace, look there
588     instead.  */
589  scope = block_scope (get_selected_block (0));
590
591  if (scope[0] == '\0')
592    return NULL;
593
594  return cp_lookup_transparent_type_loop (name, scope, 0);
595}
596
597/* Lookup the the type definition associated to NAME in
598   namespaces/classes containing SCOPE whose name is strictly longer
599   than LENGTH.  LENGTH must be the index of the start of a
600   component of SCOPE.  */
601
602static struct type *
603cp_lookup_transparent_type_loop (const char *name, const char *scope,
604				 int length)
605{
606  int scope_length = length + cp_find_first_component (scope + length);
607  char *full_name;
608
609  /* If the current scope is followed by "::", look in the next
610     component.  */
611  if (scope[scope_length] == ':')
612    {
613      struct type *retval
614	= cp_lookup_transparent_type_loop (name, scope, scope_length + 2);
615      if (retval != NULL)
616	return retval;
617    }
618
619  full_name = alloca (scope_length + 2 + strlen (name) + 1);
620  strncpy (full_name, scope, scope_length);
621  strncpy (full_name + scope_length, "::", 2);
622  strcpy (full_name + scope_length + 2, name);
623
624  return basic_lookup_transparent_type (full_name);
625}
626
627/* Now come functions for dealing with symbols associated to
628   namespaces.  (They're used to store the namespaces themselves, not
629   objects that live in the namespaces.)  These symbols come in two
630   varieties: if we run into a DW_TAG_namespace DIE, then we know that
631   we have a namespace, so dwarf2read.c creates a symbol for it just
632   like normal.  But, unfortunately, versions of GCC through at least
633   3.3 don't generate those DIE's.  Our solution is to try to guess
634   their existence by looking at demangled names.  This might cause us
635   to misidentify classes as namespaces, however.  So we put those
636   symbols in a special block (one per objfile), and we only search
637   that block as a last resort.  */
638
639/* FIXME: carlton/2003-06-12: Once versions of GCC that generate
640   DW_TAG_namespace have been out for a year or two, we should get rid
641   of all of this "possible namespace" nonsense.  */
642
643/* Allocate everything necessary for the possible namespace block
644   associated to OBJFILE.  */
645
646static void
647initialize_namespace_symtab (struct objfile *objfile)
648{
649  struct symtab *namespace_symtab;
650  struct blockvector *bv;
651  struct block *bl;
652
653  namespace_symtab = allocate_symtab ("<<C++-namespaces>>", objfile);
654  namespace_symtab->language = language_cplus;
655  namespace_symtab->free_code = free_nothing;
656  namespace_symtab->dirname = NULL;
657
658  bv = obstack_alloc (&objfile->objfile_obstack,
659		      sizeof (struct blockvector)
660		      + FIRST_LOCAL_BLOCK * sizeof (struct block *));
661  BLOCKVECTOR_NBLOCKS (bv) = FIRST_LOCAL_BLOCK + 1;
662  BLOCKVECTOR (namespace_symtab) = bv;
663
664  /* Allocate empty GLOBAL_BLOCK and STATIC_BLOCK. */
665
666  bl = allocate_block (&objfile->objfile_obstack);
667  BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
668					NULL);
669  BLOCKVECTOR_BLOCK (bv, GLOBAL_BLOCK) = bl;
670  bl = allocate_block (&objfile->objfile_obstack);
671  BLOCK_DICT (bl) = dict_create_linear (&objfile->objfile_obstack,
672					NULL);
673  BLOCKVECTOR_BLOCK (bv, STATIC_BLOCK) = bl;
674
675  /* Allocate the possible namespace block; we put it where the first
676     local block will live, though I don't think there's any need to
677     pretend that it's actually a local block (e.g. by setting
678     BLOCK_SUPERBLOCK appropriately).  We don't use the global or
679     static block because we don't want it searched during the normal
680     search of all global/static blocks in lookup_symbol: we only want
681     it used as a last resort.  */
682
683  /* NOTE: carlton/2003-09-11: I considered not associating the fake
684     symbols to a block/symtab at all.  But that would cause problems
685     with lookup_symbol's SYMTAB argument and with block_found, so
686     having a symtab/block for this purpose seems like the best
687     solution for now.  */
688
689  bl = allocate_block (&objfile->objfile_obstack);
690  BLOCK_DICT (bl) = dict_create_hashed_expandable ();
691  BLOCKVECTOR_BLOCK (bv, FIRST_LOCAL_BLOCK) = bl;
692
693  namespace_symtab->free_func = free_namespace_block;
694
695  objfile->cp_namespace_symtab = namespace_symtab;
696}
697
698/* Locate the possible namespace block associated to OBJFILE,
699   allocating it if necessary.  */
700
701static struct block *
702get_possible_namespace_block (struct objfile *objfile)
703{
704  if (objfile->cp_namespace_symtab == NULL)
705    initialize_namespace_symtab (objfile);
706
707  return BLOCKVECTOR_BLOCK (BLOCKVECTOR (objfile->cp_namespace_symtab),
708			    FIRST_LOCAL_BLOCK);
709}
710
711/* Free the dictionary associated to the possible namespace block.  */
712
713static void
714free_namespace_block (struct symtab *symtab)
715{
716  struct block *possible_namespace_block;
717
718  possible_namespace_block = BLOCKVECTOR_BLOCK (BLOCKVECTOR (symtab),
719						FIRST_LOCAL_BLOCK);
720  gdb_assert (possible_namespace_block != NULL);
721  dict_free (BLOCK_DICT (possible_namespace_block));
722}
723
724/* Ensure that there are symbols in the possible namespace block
725   associated to OBJFILE for all initial substrings of NAME that look
726   like namespaces or classes.  NAME should end in a member variable:
727   it shouldn't consist solely of namespaces.  */
728
729void
730cp_check_possible_namespace_symbols (const char *name, struct objfile *objfile)
731{
732  check_possible_namespace_symbols_loop (name,
733					 cp_find_first_component (name),
734					 objfile);
735}
736
737/* This is a helper loop for cp_check_possible_namespace_symbols; it
738   ensures that there are symbols in the possible namespace block
739   associated to OBJFILE for all namespaces that are initial
740   substrings of NAME of length at least LEN.  It returns 1 if a
741   previous loop had already created the shortest such symbol and 0
742   otherwise.
743
744   This function assumes that if there is already a symbol associated
745   to a substring of NAME of a given length, then there are already
746   symbols associated to all substrings of NAME whose length is less
747   than that length.  So if cp_check_possible_namespace_symbols has
748   been called once with argument "A::B::C::member", then that will
749   create symbols "A", "A::B", and "A::B::C".  If it is then later
750   called with argument "A::B::D::member", then the new call will
751   generate a new symbol for "A::B::D", but once it sees that "A::B"
752   has already been created, it doesn't bother checking to see if "A"
753   has also been created.  */
754
755static int
756check_possible_namespace_symbols_loop (const char *name, int len,
757				       struct objfile *objfile)
758{
759  if (name[len] == ':')
760    {
761      int done;
762      int next_len = len + 2;
763
764      next_len += cp_find_first_component (name + next_len);
765      done = check_possible_namespace_symbols_loop (name, next_len,
766						    objfile);
767
768      if (!done)
769	done = check_one_possible_namespace_symbol (name, len, objfile);
770
771      return done;
772    }
773  else
774    return 0;
775}
776
777/* Check to see if there's already a possible namespace symbol in
778   OBJFILE whose name is the initial substring of NAME of length LEN.
779   If not, create one and return 0; otherwise, return 1.  */
780
781static int
782check_one_possible_namespace_symbol (const char *name, int len,
783				     struct objfile *objfile)
784{
785  struct block *block = get_possible_namespace_block (objfile);
786  char *name_copy = alloca (len + 1);
787  struct symbol *sym;
788
789  memcpy (name_copy, name, len);
790  name_copy[len] = '\0';
791  sym = lookup_block_symbol (block, name_copy, NULL, VAR_DOMAIN);
792
793  if (sym == NULL)
794    {
795      struct type *type;
796      name_copy = obsavestring (name, len, &objfile->objfile_obstack);
797
798      type = init_type (TYPE_CODE_NAMESPACE, 0, 0, name_copy, objfile);
799
800      TYPE_TAG_NAME (type) = TYPE_NAME (type);
801
802      sym = obstack_alloc (&objfile->objfile_obstack, sizeof (struct symbol));
803      memset (sym, 0, sizeof (struct symbol));
804      SYMBOL_LANGUAGE (sym) = language_cplus;
805      SYMBOL_SET_NAMES (sym, name_copy, len, objfile);
806      SYMBOL_CLASS (sym) = LOC_TYPEDEF;
807      SYMBOL_TYPE (sym) = type;
808      SYMBOL_DOMAIN (sym) = VAR_DOMAIN;
809
810      dict_add_symbol (BLOCK_DICT (block), sym);
811
812      return 0;
813    }
814  else
815    return 1;
816}
817
818/* Look for a symbol named NAME in all the possible namespace blocks.
819   If one is found, return it; if SYMTAB is non-NULL, set *SYMTAB to
820   equal the symtab where it was found.  */
821
822static struct symbol *
823lookup_possible_namespace_symbol (const char *name, struct symtab **symtab)
824{
825  struct objfile *objfile;
826
827  ALL_OBJFILES (objfile)
828    {
829      struct symbol *sym;
830
831      sym = lookup_block_symbol (get_possible_namespace_block (objfile),
832				 name, NULL, VAR_DOMAIN);
833
834      if (sym != NULL)
835	{
836	  if (symtab != NULL)
837	    *symtab = objfile->cp_namespace_symtab;
838
839	  return sym;
840	}
841    }
842
843  return NULL;
844}
845
846/* Print out all the possible namespace symbols.  */
847
848static void
849maintenance_cplus_namespace (char *args, int from_tty)
850{
851  struct objfile *objfile;
852  printf_unfiltered ("Possible namespaces:\n");
853  ALL_OBJFILES (objfile)
854    {
855      struct dict_iterator iter;
856      struct symbol *sym;
857
858      ALL_BLOCK_SYMBOLS (get_possible_namespace_block (objfile), iter, sym)
859	{
860	  printf_unfiltered ("%s\n", SYMBOL_PRINT_NAME (sym));
861	}
862    }
863}
864
865void
866_initialize_cp_namespace (void)
867{
868  add_cmd ("namespace", class_maintenance, maintenance_cplus_namespace,
869	   "Print the list of possible C++ namespaces.",
870	   &maint_cplus_cmd_list);
871}
872