Look up primitive types as symbols.
[deliverable/binutils-gdb.git] / gdb / cp-namespace.c
CommitLineData
9219021c 1/* Helper routines for C++ support in GDB.
ecd75fc8 2 Copyright (C) 2003-2014 Free Software Foundation, Inc.
9219021c 3
1fcb5155 4 Contributed by David Carlton and by Kealia, Inc.
9219021c
DC
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
a9762ec7 10 the Free Software Foundation; either version 3 of the License, or
9219021c
DC
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
a9762ec7 19 along with this program. If not, see <http://www.gnu.org/licenses/>. */
9219021c
DC
20
21#include "defs.h"
22#include "cp-support.h"
23#include "gdb_obstack.h"
24#include "symtab.h"
25#include "symfile.h"
9219021c 26#include "block.h"
5c4e30ca
DC
27#include "objfiles.h"
28#include "gdbtypes.h"
29#include "dictionary.h"
30#include "command.h"
b368761e 31#include "frame.h"
27aa8d6a 32#include "buildsym.h"
34eaf542 33#include "language.h"
9219021c 34
6f27419a
DE
35static struct symbol *
36 cp_lookup_nested_symbol_1 (struct type *container_type,
37 const char *nested_name,
38 const char *concatenated_name,
39 const struct block *block,
40 int basic_lookup);
41
b368761e
DC
42static struct type *cp_lookup_transparent_type_loop (const char *name,
43 const char *scope,
44 int scope_len);
45
9219021c
DC
46/* Check to see if SYMBOL refers to an object contained within an
47 anonymous namespace; if so, add an appropriate using directive. */
48
9219021c 49void
a10964d1
AR
50cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
51 struct objfile *const objfile)
9219021c 52{
df8a16a1 53 if (SYMBOL_DEMANGLED_NAME (symbol) != NULL)
9219021c 54 {
df8a16a1 55 const char *name = SYMBOL_DEMANGLED_NAME (symbol);
9219021c
DC
56 unsigned int previous_component;
57 unsigned int next_component;
9219021c
DC
58
59 /* Start with a quick-and-dirty check for mention of "(anonymous
60 namespace)". */
61
59da4d04 62 if (!cp_is_in_anonymous (name))
9219021c
DC
63 return;
64
65 previous_component = 0;
66 next_component = cp_find_first_component (name + previous_component);
67
68 while (name[next_component] == ':')
69 {
2b1dbab0
KS
70 if (((next_component - previous_component)
71 == CP_ANONYMOUS_NAMESPACE_LEN)
9219021c 72 && strncmp (name + previous_component,
2b1dbab0
KS
73 CP_ANONYMOUS_NAMESPACE_STR,
74 CP_ANONYMOUS_NAMESPACE_LEN) == 0)
9219021c 75 {
aff410f1
MS
76 int dest_len = (previous_component == 0
77 ? 0 : previous_component - 2);
8c902bb1 78 int src_len = next_component;
794684b6 79
8c902bb1
SW
80 char *dest = alloca (dest_len + 1);
81 char *src = alloca (src_len + 1);
794684b6 82
8c902bb1
SW
83 memcpy (dest, name, dest_len);
84 memcpy (src, name, src_len);
794684b6 85
8c902bb1
SW
86 dest[dest_len] = '\0';
87 src[src_len] = '\0';
794684b6 88
9219021c
DC
89 /* We've found a component of the name that's an
90 anonymous namespace. So add symbols in it to the
91 namespace given by the previous component if there is
92 one, or to the global namespace if there isn't. */
12aaed36 93 cp_add_using_directive (dest, src, NULL, NULL, NULL, 1,
a10964d1 94 &objfile->objfile_obstack);
9219021c
DC
95 }
96 /* The "+ 2" is for the "::". */
97 previous_component = next_component + 2;
98 next_component = (previous_component
99 + cp_find_first_component (name
100 + previous_component));
101 }
102 }
103}
104
aff410f1
MS
105/* Add a using directive to using_directives. If the using directive
106 in question has already been added, don't add it twice.
107
108 Create a new struct using_direct which imports the namespace SRC
109 into the scope DEST. ALIAS is the name of the imported namespace
110 in the current scope. If ALIAS is NULL then the namespace is known
111 by its original name. DECLARATION is the name if the imported
112 varable if this is a declaration import (Eg. using A::x), otherwise
12aaed36
TT
113 it is NULL. EXCLUDES is a list of names not to import from an
114 imported module or NULL. If COPY_NAMES is non-zero, then the
115 arguments are copied into newly allocated memory so they can be
116 temporaries. For EXCLUDES the VEC pointers are copied but the
32019081 117 pointed to characters are not copied. */
9219021c
DC
118
119void
13387711
SW
120cp_add_using_directive (const char *dest,
121 const char *src,
122 const char *alias,
123 const char *declaration,
32019081 124 VEC (const_char_ptr) *excludes,
12aaed36 125 int copy_names,
c0cc3a76 126 struct obstack *obstack)
9219021c
DC
127{
128 struct using_direct *current;
129 struct using_direct *new;
791244be 130
9219021c
DC
131 /* Has it already been added? */
132
27aa8d6a 133 for (current = using_directives; current != NULL; current = current->next)
9219021c 134 {
32019081
JK
135 int ix;
136 const char *param;
137
70c622a3
JK
138 if (strcmp (current->import_src, src) != 0)
139 continue;
140 if (strcmp (current->import_dest, dest) != 0)
141 continue;
142 if ((alias == NULL && current->alias != NULL)
143 || (alias != NULL && current->alias == NULL)
144 || (alias != NULL && current->alias != NULL
145 && strcmp (alias, current->alias) != 0))
146 continue;
147 if ((declaration == NULL && current->declaration != NULL)
148 || (declaration != NULL && current->declaration == NULL)
149 || (declaration != NULL && current->declaration != NULL
150 && strcmp (declaration, current->declaration) != 0))
151 continue;
152
32019081
JK
153 /* Compare the contents of EXCLUDES. */
154 for (ix = 0; VEC_iterate (const_char_ptr, excludes, ix, param); ix++)
155 if (current->excludes[ix] == NULL
156 || strcmp (param, current->excludes[ix]) != 0)
157 break;
158 if (ix < VEC_length (const_char_ptr, excludes)
159 || current->excludes[ix] != NULL)
160 continue;
161
70c622a3
JK
162 /* Parameters exactly match CURRENT. */
163 return;
9219021c
DC
164 }
165
32019081
JK
166 new = obstack_alloc (obstack, (sizeof (*new)
167 + (VEC_length (const_char_ptr, excludes)
168 * sizeof (*new->excludes))));
169 memset (new, 0, sizeof (*new));
c0cc3a76 170
12aaed36
TT
171 if (copy_names)
172 {
173 new->import_src = obstack_copy0 (obstack, src, strlen (src));
174 new->import_dest = obstack_copy0 (obstack, dest, strlen (dest));
175 }
176 else
177 {
178 new->import_src = src;
179 new->import_dest = dest;
180 }
794684b6 181
12aaed36 182 if (alias != NULL && copy_names)
10f0c4bb 183 new->alias = obstack_copy0 (obstack, alias, strlen (alias));
12aaed36
TT
184 else
185 new->alias = alias;
c0cc3a76 186
12aaed36 187 if (declaration != NULL && copy_names)
10f0c4bb
TT
188 new->declaration = obstack_copy0 (obstack,
189 declaration, strlen (declaration));
12aaed36
TT
190 else
191 new->declaration = declaration;
13387711 192
32019081
JK
193 memcpy (new->excludes, VEC_address (const_char_ptr, excludes),
194 VEC_length (const_char_ptr, excludes) * sizeof (*new->excludes));
195 new->excludes[VEC_length (const_char_ptr, excludes)] = NULL;
196
c0cc3a76
SW
197 new->next = using_directives;
198 using_directives = new;
9219021c
DC
199}
200
9219021c
DC
201/* Test whether or not NAMESPACE looks like it mentions an anonymous
202 namespace; return nonzero if so. */
203
204int
59da4d04 205cp_is_in_anonymous (const char *symbol_name)
9219021c 206{
59da4d04 207 return (strstr (symbol_name, CP_ANONYMOUS_NAMESPACE_STR)
9219021c
DC
208 != NULL);
209}
210
6f27419a
DE
211/* Look up NAME in DOMAIN in BLOCK's static block and in global blocks.
212 If ANONYMOUS_NAMESPACE is nonzero, the symbol in question is located
213 within an anonymous namespace. */
34ef8452
DE
214
215static struct symbol *
6f27419a
DE
216cp_basic_lookup_symbol (const char *name, const struct block *block,
217 const domain_enum domain, int anonymous_namespace)
34ef8452 218{
6f27419a 219 struct symbol *sym;
34ef8452
DE
220
221 sym = lookup_symbol_in_static_block (name, block, domain);
222 if (sym != NULL)
223 return sym;
224
225 if (anonymous_namespace)
226 {
227 /* Symbols defined in anonymous namespaces have external linkage
228 but should be treated as local to a single file nonetheless.
229 So we only search the current file's global block. */
230
231 const struct block *global_block = block_global_block (block);
791244be 232
34ef8452
DE
233 if (global_block != NULL)
234 sym = lookup_symbol_in_block (name, global_block, domain);
235 }
236 else
237 {
238 sym = lookup_global_symbol (name, block, domain);
239 }
240
6f27419a
DE
241 return sym;
242}
243
244/* Search bare symbol NAME in DOMAIN in BLOCK.
1994afbf
DE
245 NAME is guaranteed to not have any scope (no "::") in its name, though
246 if for example NAME is a template spec then "::" may appear in the
247 argument list.
248 If LANGDEF is non-NULL then try to lookup NAME as a primitive type in
249 that language. Normally we wouldn't need LANGDEF but fortran also uses
250 this code.
6f27419a
DE
251 If SEARCH is non-zero then see if we can determine "this" from BLOCK, and
252 if so then also search for NAME in that class. */
253
254static struct symbol *
1994afbf
DE
255cp_lookup_bare_symbol (const struct language_defn *langdef,
256 const char *name, const struct block *block,
6f27419a
DE
257 const domain_enum domain, int search)
258{
259 struct symbol *sym;
260
261 /* Note: We can't do a simple assert for ':' not being in NAME because
262 ':' may be in the args of a template spec. This isn't intended to be
263 a complete test, just cheap and documentary. */
264 if (strchr (name, '<') == NULL && strchr (name, '(') == NULL)
265 gdb_assert (strchr (name, ':') == NULL);
266
267 sym = lookup_symbol_in_static_block (name, block, domain);
268 if (sym != NULL)
269 return sym;
270
1994afbf
DE
271 /* If we didn't find a definition for a builtin type in the static block,
272 search for it now. This is actually the right thing to do and can be
273 a massive performance win. E.g., when debugging a program with lots of
274 shared libraries we could search all of them only to find out the
275 builtin type isn't defined in any of them. This is common for types
276 like "void". */
277 if (langdef != NULL && domain == VAR_DOMAIN)
278 {
279 struct gdbarch *gdbarch;
280
281 if (block == NULL)
282 gdbarch = target_gdbarch ();
283 else
284 gdbarch = block_gdbarch (block);
285 sym = language_lookup_primitive_type_as_symbol (langdef, gdbarch, name);
286 if (sym != NULL)
287 return sym;
288 }
289
6f27419a 290 sym = lookup_global_symbol (name, block, domain);
34ef8452
DE
291 if (sym != NULL)
292 return sym;
293
294 if (search)
295 {
6f27419a
DE
296 struct symbol *this;
297 struct type *type;
34ef8452 298
6f27419a
DE
299 this = lookup_language_this (language_def (language_cplus), block);
300 if (this == NULL)
301 return NULL;
34ef8452 302
6f27419a
DE
303 type = check_typedef (TYPE_TARGET_TYPE (SYMBOL_TYPE (this)));
304 /* If TYPE_NAME is NULL, abandon trying to find this symbol.
305 This can happen for lambda functions compiled with clang++,
306 which outputs no name for the container class. */
307 if (TYPE_NAME (type) == NULL)
308 return NULL;
34ef8452 309
6f27419a
DE
310 /* Look for a symbol named NESTED in this class. */
311 sym = cp_lookup_nested_symbol (type, name, block);
312 }
34ef8452 313
6f27419a
DE
314 return sym;
315}
34ef8452 316
6f27419a
DE
317/* Search NAME in DOMAIN in all static blocks, and then in all baseclasses.
318 BLOCK specifies the context in which to perform the search.
319 NAME is guaranteed to have scope (contain "::") and PREFIX_LEN specifies
320 then length the entire scope of NAME (up to, but not including, the last
321 "::".
34ef8452 322
6f27419a
DE
323 Note: At least in the case of Fortran, which also uses this code, there
324 may be no text after the last "::". */
34ef8452 325
6f27419a
DE
326static struct symbol *
327cp_search_static_and_baseclasses (const char *name,
328 const struct block *block,
329 const domain_enum domain,
330 unsigned int prefix_len)
331{
332 struct symbol *sym;
333 char *klass, *nested;
334 struct cleanup *cleanup;
335 struct symbol *klass_sym;
336 struct type *klass_type;
34ef8452 337
6f27419a
DE
338 /* The test here uses <= instead of < because Fortran also uses this,
339 and the module.exp testcase will pass "modmany::" for NAME here. */
340 gdb_assert (prefix_len + 2 <= strlen (name));
341 gdb_assert (name[prefix_len + 1] == ':');
34ef8452 342
6f27419a 343 /* Find the name of the class and the name of the method, variable, etc. */
34ef8452 344
6f27419a
DE
345 /* The class name is everything up to and including PREFIX_LEN. */
346 klass = savestring (name, prefix_len);
347
348 /* The rest of the name is everything else past the initial scope
349 operator. */
350 nested = xstrdup (name + prefix_len + 2);
351
352 /* Add cleanups to free memory for these strings. */
353 cleanup = make_cleanup (xfree, klass);
354 make_cleanup (xfree, nested);
355
356 /* Lookup a class named KLASS. If none is found, there is nothing
357 more that can be done. */
358 klass_sym = lookup_global_symbol (klass, block, domain);
359 if (klass_sym == NULL)
360 {
34ef8452 361 do_cleanups (cleanup);
6f27419a 362 return NULL;
34ef8452 363 }
6f27419a
DE
364 klass_type = SYMBOL_TYPE (klass_sym);
365
366 /* Look for a symbol named NESTED in this class.
367 The caller is assumed to have already have done a basic lookup of NAME.
368 So we pass zero for BASIC_LOOKUP to cp_lookup_nested_symbol_1 here. */
369 sym = cp_lookup_nested_symbol_1 (klass_type, nested, name, block, 0);
34ef8452 370
6f27419a 371 do_cleanups (cleanup);
34ef8452
DE
372 return sym;
373}
374
aff410f1 375/* Look up NAME in the C++ namespace NAMESPACE. Other arguments are
8dea366b 376 as in cp_lookup_symbol_nonlocal. If SEARCH is non-zero, search
6f27419a
DE
377 through base classes for a matching symbol.
378
379 Note: Part of the complexity is because NAME may itself specify scope.
380 Part of the complexity is also because this handles the case where
381 there is no scoping in which case we also try looking in the class of
382 "this" if we can compute it. */
8540c487
SW
383
384static struct symbol *
6f27419a
DE
385cp_lookup_symbol_in_namespace (const char *namespace, const char *name,
386 const struct block *block,
387 const domain_enum domain, int search)
8540c487 388{
d2763117 389 char *concatenated_name = NULL;
6f27419a
DE
390 int is_in_anonymous;
391 unsigned int prefix_len;
392 struct symbol *sym;
c5504eaf 393
d2763117
DE
394 if (namespace[0] != '\0')
395 {
396 concatenated_name = alloca (strlen (namespace) + 2
397 + strlen (name) + 1);
8540c487
SW
398 strcpy (concatenated_name, namespace);
399 strcat (concatenated_name, "::");
400 strcat (concatenated_name, name);
d2763117 401 name = concatenated_name;
8540c487 402 }
d2763117 403
6f27419a
DE
404 prefix_len = cp_entire_prefix_len (name);
405 if (prefix_len == 0)
1994afbf 406 return cp_lookup_bare_symbol (NULL, name, block, domain, search);
6f27419a
DE
407
408 /* This would be simpler if we just called cp_lookup_nested_symbol
409 at this point. But that would require first looking up the containing
410 class/namespace. Since we're only searching static and global blocks
411 there's often no need to first do that lookup. */
412
413 is_in_anonymous = namespace[0] != '\0' && cp_is_in_anonymous (namespace);
414 sym = cp_basic_lookup_symbol (name, block, domain, is_in_anonymous);
415 if (sym != NULL)
416 return sym;
417
418 if (search)
419 sym = cp_search_static_and_baseclasses (name, block, domain, prefix_len);
420
421 return sym;
8540c487
SW
422}
423
b14e635e
SW
424/* Used for cleanups to reset the "searched" flag incase
425 of an error. */
426
427static void
428reset_directive_searched (void *data)
429{
430 struct using_direct *direct = data;
431 direct->searched = 0;
432}
433
aff410f1
MS
434/* Search for NAME by applying all import statements belonging to
435 BLOCK which are applicable in SCOPE. If DECLARATION_ONLY the
436 search is restricted to using declarations.
13387711
SW
437 Example:
438
aff410f1 439 namespace A {
13387711
SW
440 int x;
441 }
442 using A::x;
443
aff410f1
MS
444 If SEARCH_PARENTS the search will include imports which are
445 applicable in parents of SCOPE.
b14e635e
SW
446 Example:
447
aff410f1 448 namespace A {
b14e635e 449 using namespace X;
aff410f1 450 namespace B {
b14e635e
SW
451 using namespace Y;
452 }
453 }
454
aff410f1
MS
455 If SCOPE is "A::B" and SEARCH_PARENTS is true the imports of
456 namespaces X and Y will be considered. If SEARCH_PARENTS is false
4bd0864e
DE
457 only the import of Y is considered.
458
459 SEARCH_SCOPE_FIRST is an internal implementation detail: Callers must
460 pass 0 for it. Internally we pass 1 when recursing. */
8540c487 461
9a80057a 462static struct symbol *
55accf4a
DE
463cp_lookup_symbol_via_imports (const char *scope,
464 const char *name,
465 const struct block *block,
466 const domain_enum domain,
4bd0864e 467 const int search_scope_first,
55accf4a
DE
468 const int declaration_only,
469 const int search_parents)
8540c487 470{
b14e635e 471 struct using_direct *current;
13387711 472 struct symbol *sym = NULL;
8540c487 473 int len;
b14e635e
SW
474 int directive_match;
475 struct cleanup *searched_cleanup;
8540c487 476
4bd0864e
DE
477 /* First, try to find the symbol in the given namespace if requested. */
478 if (search_scope_first)
aff410f1 479 sym = cp_lookup_symbol_in_namespace (scope, name,
8dea366b 480 block, domain, 1);
791244be 481
8540c487
SW
482 if (sym != NULL)
483 return sym;
484
aff410f1
MS
485 /* Go through the using directives. If any of them add new names to
486 the namespace we're searching in, see if we can find a match by
487 applying them. */
8540c487
SW
488
489 for (current = block_using (block);
490 current != NULL;
491 current = current->next)
492 {
32019081
JK
493 const char **excludep;
494
b14e635e
SW
495 len = strlen (current->import_dest);
496 directive_match = (search_parents
497 ? (strncmp (scope, current->import_dest,
498 strlen (current->import_dest)) == 0
499 && (len == 0
aff410f1
MS
500 || scope[len] == ':'
501 || scope[len] == '\0'))
b14e635e 502 : strcmp (scope, current->import_dest) == 0);
8540c487 503
aff410f1
MS
504 /* If the import destination is the current scope or one of its
505 ancestors then it is applicable. */
b14e635e 506 if (directive_match && !current->searched)
8540c487 507 {
a1d705ee
TT
508 /* Mark this import as searched so that the recursive call
509 does not search it again. */
510 current->searched = 1;
511 searched_cleanup = make_cleanup (reset_directive_searched,
512 current);
513
514 /* If there is an import of a single declaration, compare the
515 imported declaration (after optional renaming by its alias)
516 with the sought out name. If there is a match pass
517 current->import_src as NAMESPACE to direct the search
518 towards the imported namespace. */
519 if (current->declaration
520 && strcmp (name, current->alias
521 ? current->alias : current->declaration) == 0)
522 sym = cp_lookup_symbol_in_namespace (current->import_src,
523 current->declaration,
8dea366b 524 block, domain, 1);
a1d705ee
TT
525
526 /* If this is a DECLARATION_ONLY search or a symbol was found
527 or this import statement was an import declaration, the
528 search of this import is complete. */
529 if (declaration_only || sym != NULL || current->declaration)
530 {
531 current->searched = 0;
532 discard_cleanups (searched_cleanup);
533
534 if (sym != NULL)
535 return sym;
536
537 continue;
538 }
539
540 /* Do not follow CURRENT if NAME matches its EXCLUDES. */
541 for (excludep = current->excludes; *excludep; excludep++)
542 if (strcmp (name, *excludep) == 0)
543 break;
544 if (*excludep)
545 {
546 discard_cleanups (searched_cleanup);
547 continue;
548 }
549
550 if (current->alias != NULL
551 && strcmp (name, current->alias) == 0)
552 /* If the import is creating an alias and the alias matches
553 the sought name. Pass current->import_src as the NAME to
554 direct the search towards the aliased namespace. */
555 {
556 sym = cp_lookup_symbol_in_namespace (scope,
557 current->import_src,
8dea366b 558 block, domain, 1);
a1d705ee
TT
559 }
560 else if (current->alias == NULL)
561 {
562 /* If this import statement creates no alias, pass
563 current->inner as NAMESPACE to direct the search
564 towards the imported namespace. */
55accf4a
DE
565 sym = cp_lookup_symbol_via_imports (current->import_src,
566 name, block,
4bd0864e 567 domain, 1, 0, 0);
a1d705ee
TT
568 }
569 current->searched = 0;
570 discard_cleanups (searched_cleanup);
571
572 if (sym != NULL)
573 return sym;
8540c487
SW
574 }
575 }
576
577 return NULL;
578}
579
34eaf542
TT
580/* Helper function that searches an array of symbols for one named
581 NAME. */
582
583static struct symbol *
aff410f1
MS
584search_symbol_list (const char *name, int num,
585 struct symbol **syms)
34eaf542
TT
586{
587 int i;
588
589 /* Maybe we should store a dictionary in here instead. */
590 for (i = 0; i < num; ++i)
591 {
592 if (strcmp (name, SYMBOL_NATURAL_NAME (syms[i])) == 0)
593 return syms[i];
594 }
595 return NULL;
596}
597
55accf4a 598/* Like cp_lookup_symbol_via_imports, but if BLOCK is a function, it
34eaf542
TT
599 searches through the template parameters of the function and the
600 function's type. */
601
602struct symbol *
603cp_lookup_symbol_imports_or_template (const char *scope,
604 const char *name,
605 const struct block *block,
606 const domain_enum domain)
607{
608 struct symbol *function = BLOCK_FUNCTION (block);
cc485e62
DE
609 struct symbol *result;
610
611 if (symbol_lookup_debug)
612 {
613 fprintf_unfiltered (gdb_stdlog,
614 "cp_lookup_symbol_imports_or_template"
615 " (%s, %s, %s, %s)\n",
616 scope, name, host_address_to_string (block),
617 domain_name (domain));
618 }
34eaf542
TT
619
620 if (function != NULL && SYMBOL_LANGUAGE (function) == language_cplus)
621 {
34eaf542
TT
622 /* Search the function's template parameters. */
623 if (SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION (function))
624 {
791244be 625 struct template_symbol *templ
aff410f1 626 = (struct template_symbol *) function;
34eaf542
TT
627
628 result = search_symbol_list (name,
629 templ->n_template_arguments,
630 templ->template_arguments);
631 if (result != NULL)
cc485e62
DE
632 {
633 if (symbol_lookup_debug)
634 {
635 fprintf_unfiltered (gdb_stdlog,
636 "cp_lookup_symbol_imports_or_template"
637 " (...) = %s\n",
638 host_address_to_string (result));
639 }
640 return result;
641 }
34eaf542
TT
642 }
643
644 /* Search the template parameters of the function's defining
645 context. */
646 if (SYMBOL_NATURAL_NAME (function))
647 {
648 struct type *context;
649 char *name_copy = xstrdup (SYMBOL_NATURAL_NAME (function));
650 struct cleanup *cleanups = make_cleanup (xfree, name_copy);
651 const struct language_defn *lang = language_def (language_cplus);
08be3fe3 652 struct gdbarch *arch = symbol_arch (function);
34eaf542
TT
653 const struct block *parent = BLOCK_SUPERBLOCK (block);
654
655 while (1)
656 {
34eaf542
TT
657 unsigned int prefix_len = cp_entire_prefix_len (name_copy);
658
659 if (prefix_len == 0)
660 context = NULL;
661 else
662 {
663 name_copy[prefix_len] = '\0';
aff410f1
MS
664 context = lookup_typename (lang, arch,
665 name_copy,
666 parent, 1);
34eaf542
TT
667 }
668
669 if (context == NULL)
670 break;
671
aff410f1
MS
672 result
673 = search_symbol_list (name,
674 TYPE_N_TEMPLATE_ARGUMENTS (context),
675 TYPE_TEMPLATE_ARGUMENTS (context));
34eaf542 676 if (result != NULL)
c27e16e3
TT
677 {
678 do_cleanups (cleanups);
cc485e62
DE
679 if (symbol_lookup_debug)
680 {
681 fprintf_unfiltered (gdb_stdlog,
682 "cp_lookup_symbol_imports_or_template"
683 " (...) = %s\n",
684 host_address_to_string (result));
685 }
c27e16e3
TT
686 return result;
687 }
34eaf542
TT
688 }
689
690 do_cleanups (cleanups);
691 }
692 }
693
4bd0864e 694 result = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 1, 1);
cc485e62
DE
695 if (symbol_lookup_debug)
696 {
697 fprintf_unfiltered (gdb_stdlog,
698 "cp_lookup_symbol_imports_or_template (...) = %s\n",
699 result != NULL
700 ? host_address_to_string (result) : "NULL");
701 }
702 return result;
34eaf542
TT
703}
704
f953163f
DE
705/* Search for NAME by applying relevant import statements belonging to BLOCK
706 and its parents. SCOPE is the namespace scope of the context in which the
707 search is being evaluated. */
708
709static struct symbol *
710cp_lookup_symbol_via_all_imports (const char *scope, const char *name,
711 const struct block *block,
712 const domain_enum domain)
713{
714 struct symbol *sym;
715
716 while (block != NULL)
717 {
718 sym = cp_lookup_symbol_via_imports (scope, name, block, domain, 0, 0, 1);
719 if (sym)
720 return sym;
721
722 block = BLOCK_SUPERBLOCK (block);
723 }
724
725 return NULL;
726}
727
791244be
DE
728/* Searches for NAME in the current namespace, and by applying
729 relevant import statements belonging to BLOCK and its parents.
730 SCOPE is the namespace scope of the context in which the search is
731 being evaluated. */
8540c487 732
f953163f 733struct symbol *
8540c487
SW
734cp_lookup_symbol_namespace (const char *scope,
735 const char *name,
8540c487 736 const struct block *block,
13387711 737 const domain_enum domain)
8540c487
SW
738{
739 struct symbol *sym;
cc485e62
DE
740
741 if (symbol_lookup_debug)
742 {
743 fprintf_unfiltered (gdb_stdlog,
744 "cp_lookup_symbol_namespace (%s, %s, %s, %s)\n",
745 scope, name, host_address_to_string (block),
746 domain_name (domain));
747 }
748
13387711 749 /* First, try to find the symbol in the given namespace. */
f953163f 750 sym = cp_lookup_symbol_in_namespace (scope, name, block, domain, 1);
8540c487 751
f953163f
DE
752 /* Search for name in namespaces imported to this and parent blocks. */
753 if (sym == NULL)
754 sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
8540c487 755
cc485e62
DE
756 if (symbol_lookup_debug)
757 {
758 fprintf_unfiltered (gdb_stdlog,
f953163f
DE
759 "cp_lookup_symbol_namespace (...) = %s\n",
760 sym != NULL ? host_address_to_string (sym) : "NULL");
cc485e62 761 }
f953163f 762 return sym;
1fcb5155
DC
763}
764
765/* Lookup NAME at namespace scope (or, in C terms, in static and
766 global variables). SCOPE is the namespace that the current
767 function is defined within; only consider namespaces whose length
768 is at least SCOPE_LEN. Other arguments are as in
769 cp_lookup_symbol_nonlocal.
770
771 For example, if we're within a function A::B::f and looking for a
3882f37a 772 symbol x, this will get called with NAME = "x", SCOPE = "A::B", and
1fcb5155
DC
773 SCOPE_LEN = 0. It then calls itself with NAME and SCOPE the same,
774 but with SCOPE_LEN = 1. And then it calls itself with NAME and
775 SCOPE the same, but with SCOPE_LEN = 4. This third call looks for
776 "A::B::x"; if it doesn't find it, then the second call looks for
777 "A::x", and if that call fails, then the first call looks for
778 "x". */
779
780static struct symbol *
1994afbf
DE
781lookup_namespace_scope (const struct language_defn *langdef,
782 const char *name,
1fcb5155
DC
783 const struct block *block,
784 const domain_enum domain,
1fcb5155
DC
785 const char *scope,
786 int scope_len)
787{
788 char *namespace;
789
790 if (scope[scope_len] != '\0')
791 {
792 /* Recursively search for names in child namespaces first. */
793
794 struct symbol *sym;
795 int new_scope_len = scope_len;
796
797 /* If the current scope is followed by "::", skip past that. */
798 if (new_scope_len != 0)
799 {
800 gdb_assert (scope[new_scope_len] == ':');
801 new_scope_len += 2;
802 }
803 new_scope_len += cp_find_first_component (scope + new_scope_len);
1994afbf 804 sym = lookup_namespace_scope (langdef, name, block, domain,
aff410f1 805 scope, new_scope_len);
1fcb5155
DC
806 if (sym != NULL)
807 return sym;
808 }
809
810 /* Okay, we didn't find a match in our children, so look for the
1994afbf
DE
811 name in the current namespace.
812
813 If we there is no scope and we know we have a bare symbol, then short
814 circuit everything and call cp_lookup_bare_symbol directly.
815 This isn't an optimization, rather it allows us to pass LANGDEF which
816 is needed for primitive type lookup. The test doesn't have to be
817 perfect: if NAME is a bare symbol that our test doesn't catch (e.g., a
818 template symbol with "::" in the argument list) then
819 cp_lookup_symbol_in_namespace will catch it. */
820
821 if (scope_len == 0 && strchr (name, ':') == NULL)
822 return cp_lookup_bare_symbol (langdef, name, block, domain, 1);
1fcb5155
DC
823
824 namespace = alloca (scope_len + 1);
825 strncpy (namespace, scope, scope_len);
826 namespace[scope_len] = '\0';
aff410f1 827 return cp_lookup_symbol_in_namespace (namespace, name,
8dea366b 828 block, domain, 1);
1fcb5155
DC
829}
830
56286edf
DE
831/* The C++-specific version of name lookup for static and global
832 names. This makes sure that names get looked for in all namespaces
833 that are in scope. NAME is the natural name of the symbol that
834 we're looking for, BLOCK is the block that we're searching within,
835 DOMAIN says what kind of symbols we're looking for. */
836
837struct symbol *
f606139a
DE
838cp_lookup_symbol_nonlocal (const struct language_defn *langdef,
839 const char *name,
56286edf
DE
840 const struct block *block,
841 const domain_enum domain)
842{
843 struct symbol *sym;
844 const char *scope = block_scope (block);
845
cc485e62
DE
846 if (symbol_lookup_debug)
847 {
848 fprintf_unfiltered (gdb_stdlog,
849 "cp_lookup_symbol_non_local"
850 " (%s, %s (scope %s), %s)\n",
851 name, host_address_to_string (block), scope,
852 domain_name (domain));
853 }
854
f953163f
DE
855 /* First, try to find the symbol in the given namespace, and all
856 containing namespaces. */
1994afbf 857 sym = lookup_namespace_scope (langdef, name, block, domain, scope, 0);
56286edf 858
f953163f
DE
859 /* Search for name in namespaces imported to this and parent blocks. */
860 if (sym == NULL)
861 sym = cp_lookup_symbol_via_all_imports (scope, name, block, domain);
862
cc485e62
DE
863 if (symbol_lookup_debug)
864 {
865 fprintf_unfiltered (gdb_stdlog,
866 "cp_lookup_symbol_nonlocal (...) = %s\n",
867 sym != NULL ? host_address_to_string (sym) : "NULL");
868 }
869 return sym;
56286edf
DE
870}
871
f7e3ecae
KS
872/* Search through the base classes of PARENT_TYPE for a base class
873 named NAME and return its type. If not found, return NULL. */
874
875struct type *
a07e3e18 876cp_find_type_baseclass_by_name (struct type *parent_type, const char *name)
f7e3ecae
KS
877{
878 int i;
879
880 CHECK_TYPEDEF (parent_type);
881 for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i)
882 {
883 struct type *type = check_typedef (TYPE_BASECLASS (parent_type, i));
884 const char *base_name = TYPE_BASECLASS_NAME (parent_type, i);
885
886 if (base_name == NULL)
887 continue;
888
889 if (streq (base_name, name))
890 return type;
891
a07e3e18 892 type = cp_find_type_baseclass_by_name (type, name);
f7e3ecae
KS
893 if (type != NULL)
894 return type;
895 }
896
897 return NULL;
898}
899
8dea366b
KS
900/* Search through the base classes of PARENT_TYPE for a symbol named
901 NAME in block BLOCK. */
902
903static struct symbol *
904find_symbol_in_baseclass (struct type *parent_type, const char *name,
905 const struct block *block)
906{
907 int i;
908 struct symbol *sym;
909 struct cleanup *cleanup;
910 char *concatenated_name;
911
912 sym = NULL;
913 concatenated_name = NULL;
914 cleanup = make_cleanup (free_current_contents, &concatenated_name);
791244be 915
8dea366b
KS
916 for (i = 0; i < TYPE_N_BASECLASSES (parent_type); ++i)
917 {
918 size_t len;
69fc87c2 919 struct type *base_type = TYPE_BASECLASS (parent_type, i);
8dea366b
KS
920 const char *base_name = TYPE_BASECLASS_NAME (parent_type, i);
921
922 if (base_name == NULL)
923 continue;
924
8dea366b
KS
925 len = strlen (base_name) + 2 + strlen (name) + 1;
926 concatenated_name = xrealloc (concatenated_name, len);
927 xsnprintf (concatenated_name, len, "%s::%s", base_name, name);
8dea366b 928
6f27419a
DE
929 sym = cp_lookup_nested_symbol_1 (base_type, name, concatenated_name,
930 block, 1);
69fc87c2
DE
931 if (sym != NULL)
932 break;
8dea366b
KS
933 }
934
935 do_cleanups (cleanup);
0c2e6019 936 return sym;
5c4e30ca
DC
937}
938
6f27419a
DE
939/* Helper function to look up NESTED_NAME in CONTAINER_TYPE within the
940 context of BLOCK.
941 CONTAINER_TYPE needn't have been "check_typedef'd" yet.
942 CONCATENATED_NAME is the fully scoped spelling of NESTED_NAME, it is
943 passed as an argument so that callers can control how space for it is
944 allocated.
945 If BASIC_LOOKUP is non-zero then perform a basic lookup of
946 CONCATENATED_NAME. See cp_basic_lookup_symbol for details. */
947
948static struct symbol *
949cp_lookup_nested_symbol_1 (struct type *container_type,
950 const char *nested_name,
951 const char *concatenated_name,
952 const struct block *block,
953 int basic_lookup)
954{
955 int is_in_anonymous = cp_is_in_anonymous (concatenated_name);
956 struct symbol *sym;
957
958 /* NOTE: carlton/2003-11-10: We don't treat C++ class members
959 of classes like, say, data or function members. Instead,
960 they're just represented by symbols whose names are
961 qualified by the name of the surrounding class. This is
962 just like members of namespaces; in particular,
963 cp_basic_lookup_symbol works when looking them up. */
964
965 if (basic_lookup)
966 {
967 sym = cp_basic_lookup_symbol (concatenated_name, block, VAR_DOMAIN,
968 is_in_anonymous);
969 if (sym != NULL)
970 return sym;
971 }
972
973 /* Now search all static file-level symbols. We have to do this for things
974 like typedefs in the class. We do not try to guess any imported
975 namespace as even the fully specified namespace search is already not
976 C++ compliant and more assumptions could make it too magic. */
977
978 /* First search in this symtab, what we want is possibly there. */
979 sym = lookup_symbol_in_static_block (concatenated_name, block, VAR_DOMAIN);
980 if (sym != NULL)
981 return sym;
982
983 /* Nope. We now have to search all static blocks in all objfiles,
984 even if block != NULL, because there's no guarantees as to which
985 symtab the symbol we want is in. */
986 sym = lookup_static_symbol (concatenated_name, VAR_DOMAIN);
987 if (sym != NULL)
988 return sym;
989
990 /* If this is a class with baseclasses, search them next. */
991 CHECK_TYPEDEF (container_type);
992 if (TYPE_N_BASECLASSES (container_type) > 0)
993 {
994 sym = find_symbol_in_baseclass (container_type, nested_name, block);
995 if (sym != NULL)
996 return sym;
997 }
998
999 return NULL;
1000}
1001
50af5481 1002/* Look up a symbol named NESTED_NAME that is nested inside the C++
79c2c32d 1003 class or namespace given by PARENT_TYPE, from within the context
05a6c3c8 1004 given by BLOCK. Return NULL if there is no such nested symbol. */
79c2c32d 1005
50af5481
JK
1006struct symbol *
1007cp_lookup_nested_symbol (struct type *parent_type,
1008 const char *nested_name,
1009 const struct block *block)
79c2c32d 1010{
05a6c3c8 1011 /* type_name_no_tag_or_error provides better error reporting using the
d8228535
JK
1012 original type. */
1013 struct type *saved_parent_type = parent_type;
1014
1015 CHECK_TYPEDEF (parent_type);
1016
cc485e62
DE
1017 if (symbol_lookup_debug)
1018 {
1019 const char *type_name = type_name_no_tag (saved_parent_type);
1020
1021 fprintf_unfiltered (gdb_stdlog,
1022 "cp_lookup_nested_symbol (%s, %s, %s)\n",
1023 type_name != NULL ? type_name : "unnamed",
1024 nested_name, host_address_to_string (block));
1025 }
1026
79c2c32d
DC
1027 switch (TYPE_CODE (parent_type))
1028 {
63d06c5c 1029 case TYPE_CODE_STRUCT:
79c2c32d 1030 case TYPE_CODE_NAMESPACE:
48e32051 1031 case TYPE_CODE_UNION:
3d567982 1032 case TYPE_CODE_ENUM:
530e8392
KB
1033 /* NOTE: Handle modules here as well, because Fortran is re-using the C++
1034 specific code to lookup nested symbols in modules, by calling the
1035 function pointer la_lookup_symbol_nonlocal, which ends up here. */
1036 case TYPE_CODE_MODULE:
79c2c32d 1037 {
08850b56 1038 int size;
d8228535 1039 const char *parent_name = type_name_no_tag_or_error (saved_parent_type);
6f27419a 1040 struct symbol *sym;
41f62f39 1041 char *concatenated_name;
c5504eaf 1042
08850b56
PM
1043 size = strlen (parent_name) + 2 + strlen (nested_name) + 1;
1044 concatenated_name = alloca (size);
1045 xsnprintf (concatenated_name, size, "%s::%s",
6f27419a
DE
1046 parent_name, nested_name);
1047
1048 sym = cp_lookup_nested_symbol_1 (parent_type, nested_name,
1049 concatenated_name, block, 1);
41f62f39 1050
cc485e62
DE
1051 if (symbol_lookup_debug)
1052 {
1053 fprintf_unfiltered (gdb_stdlog,
1054 "cp_lookup_nested_symbol (...) = %s\n",
1055 sym != NULL
1056 ? host_address_to_string (sym) : "NULL");
1057 }
1058 return sym;
79c2c32d 1059 }
bb869963
SDJ
1060
1061 case TYPE_CODE_FUNC:
1062 case TYPE_CODE_METHOD:
cc485e62
DE
1063 if (symbol_lookup_debug)
1064 {
1065 fprintf_unfiltered (gdb_stdlog,
1066 "cp_lookup_nested_symbol (...) = NULL"
1067 " (func/method)\n");
1068 }
bb869963
SDJ
1069 return NULL;
1070
79c2c32d
DC
1071 default:
1072 internal_error (__FILE__, __LINE__,
50af5481 1073 _("cp_lookup_nested_symbol called "
3e43a32a 1074 "on a non-aggregate type."));
79c2c32d
DC
1075 }
1076}
1077
b368761e
DC
1078/* The C++-version of lookup_transparent_type. */
1079
1080/* FIXME: carlton/2004-01-16: The problem that this is trying to
1081 address is that, unfortunately, sometimes NAME is wrong: it may not
1082 include the name of namespaces enclosing the type in question.
b021a221 1083 lookup_transparent_type gets called when the type in question
b368761e
DC
1084 is a declaration, and we're trying to find its definition; but, for
1085 declarations, our type name deduction mechanism doesn't work.
1086 There's nothing we can do to fix this in general, I think, in the
1087 absence of debug information about namespaces (I've filed PR
1088 gdb/1511 about this); until such debug information becomes more
1089 prevalent, one heuristic which sometimes looks is to search for the
1090 definition in namespaces containing the current namespace.
1091
1092 We should delete this functions once the appropriate debug
1093 information becomes more widespread. (GCC 3.4 will be the first
1094 released version of GCC with such information.) */
1095
1096struct type *
1097cp_lookup_transparent_type (const char *name)
1098{
1099 /* First, try the honest way of looking up the definition. */
1100 struct type *t = basic_lookup_transparent_type (name);
1101 const char *scope;
1102
1103 if (t != NULL)
1104 return t;
1105
1106 /* If that doesn't work and we're within a namespace, look there
1107 instead. */
1108 scope = block_scope (get_selected_block (0));
1109
1110 if (scope[0] == '\0')
1111 return NULL;
1112
1113 return cp_lookup_transparent_type_loop (name, scope, 0);
1114}
1115
b021a221
MS
1116/* Lookup the type definition associated to NAME in namespaces/classes
1117 containing SCOPE whose name is strictly longer than LENGTH. LENGTH
1118 must be the index of the start of a component of SCOPE. */
b368761e
DC
1119
1120static struct type *
aff410f1
MS
1121cp_lookup_transparent_type_loop (const char *name,
1122 const char *scope,
b368761e
DC
1123 int length)
1124{
1198ecbe 1125 int scope_length = length + cp_find_first_component (scope + length);
b368761e
DC
1126 char *full_name;
1127
1128 /* If the current scope is followed by "::", look in the next
1129 component. */
1130 if (scope[scope_length] == ':')
1131 {
1132 struct type *retval
aff410f1
MS
1133 = cp_lookup_transparent_type_loop (name, scope,
1134 scope_length + 2);
c5504eaf 1135
b368761e
DC
1136 if (retval != NULL)
1137 return retval;
1138 }
1139
1140 full_name = alloca (scope_length + 2 + strlen (name) + 1);
1141 strncpy (full_name, scope, scope_length);
1142 strncpy (full_name + scope_length, "::", 2);
1143 strcpy (full_name + scope_length + 2, name);
1144
1145 return basic_lookup_transparent_type (full_name);
1146}
1147
0c2e6019
TT
1148/* This used to do something but was removed when it became
1149 obsolete. */
5c4e30ca
DC
1150
1151static void
1152maintenance_cplus_namespace (char *args, int from_tty)
1153{
0c2e6019 1154 printf_unfiltered (_("The `maint namespace' command was removed.\n"));
5c4e30ca
DC
1155}
1156
2c0b251b
PA
1157/* Provide a prototype to silence -Wmissing-prototypes. */
1158extern initialize_file_ftype _initialize_cp_namespace;
1159
5c4e30ca
DC
1160void
1161_initialize_cp_namespace (void)
1162{
0c2e6019
TT
1163 struct cmd_list_element *cmd;
1164
1165 cmd = add_cmd ("namespace", class_maintenance,
1166 maintenance_cplus_namespace,
1167 _("Deprecated placeholder for removed functionality."),
1168 &maint_cplus_cmd_list);
1169 deprecate_cmd (cmd, NULL);
1fcb5155 1170}
This page took 0.877146 seconds and 4 git commands to generate.