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