mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-20 14:22:35 +08:00
* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
(cp_add_using_directive): Add 'copy_names' argument. * cp-support.h (cp_add_using_directive): Update. (struct using_direct) <import_src, import_dest, alias, declaration>: Now const. * dwarf2read.c (read_import_statement): Use obconcat. Don't copy names passed to cp_add_using_directive.
This commit is contained in:
@ -1,3 +1,13 @@
|
|||||||
|
2013-01-25 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
|
* cp-namespace.c (cp_scan_for_anonymous_namespaces): Update.
|
||||||
|
(cp_add_using_directive): Add 'copy_names' argument.
|
||||||
|
* cp-support.h (cp_add_using_directive): Update.
|
||||||
|
(struct using_direct) <import_src, import_dest, alias,
|
||||||
|
declaration>: Now const.
|
||||||
|
* dwarf2read.c (read_import_statement): Use obconcat.
|
||||||
|
Don't copy names passed to cp_add_using_directive.
|
||||||
|
|
||||||
2013-01-25 Tom Tromey <tromey@redhat.com>
|
2013-01-25 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* c-exp.y (qualified_name): Use TYPE_SAFE_NAME.
|
* c-exp.y (qualified_name): Use TYPE_SAFE_NAME.
|
||||||
|
@ -96,7 +96,7 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
|
|||||||
anonymous namespace. So add symbols in it to the
|
anonymous namespace. So add symbols in it to the
|
||||||
namespace given by the previous component if there is
|
namespace given by the previous component if there is
|
||||||
one, or to the global namespace if there isn't. */
|
one, or to the global namespace if there isn't. */
|
||||||
cp_add_using_directive (dest, src, NULL, NULL, NULL,
|
cp_add_using_directive (dest, src, NULL, NULL, NULL, 1,
|
||||||
&objfile->objfile_obstack);
|
&objfile->objfile_obstack);
|
||||||
}
|
}
|
||||||
/* The "+ 2" is for the "::". */
|
/* The "+ 2" is for the "::". */
|
||||||
@ -117,9 +117,10 @@ cp_scan_for_anonymous_namespaces (const struct symbol *const symbol,
|
|||||||
in the current scope. If ALIAS is NULL then the namespace is known
|
in the current scope. If ALIAS is NULL then the namespace is known
|
||||||
by its original name. DECLARATION is the name if the imported
|
by its original name. DECLARATION is the name if the imported
|
||||||
varable if this is a declaration import (Eg. using A::x), otherwise
|
varable if this is a declaration import (Eg. using A::x), otherwise
|
||||||
it is NULL. EXCLUDES is a list of names not to import from an imported
|
it is NULL. EXCLUDES is a list of names not to import from an
|
||||||
module or NULL. The arguments are copied into newly allocated memory so
|
imported module or NULL. If COPY_NAMES is non-zero, then the
|
||||||
they can be temporaries. For EXCLUDES the VEC pointers are copied but the
|
arguments are copied into newly allocated memory so they can be
|
||||||
|
temporaries. For EXCLUDES the VEC pointers are copied but the
|
||||||
pointed to characters are not copied. */
|
pointed to characters are not copied. */
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -128,6 +129,7 @@ cp_add_using_directive (const char *dest,
|
|||||||
const char *alias,
|
const char *alias,
|
||||||
const char *declaration,
|
const char *declaration,
|
||||||
VEC (const_char_ptr) *excludes,
|
VEC (const_char_ptr) *excludes,
|
||||||
|
int copy_names,
|
||||||
struct obstack *obstack)
|
struct obstack *obstack)
|
||||||
{
|
{
|
||||||
struct using_direct *current;
|
struct using_direct *current;
|
||||||
@ -173,15 +175,27 @@ cp_add_using_directive (const char *dest,
|
|||||||
* sizeof (*new->excludes))));
|
* sizeof (*new->excludes))));
|
||||||
memset (new, 0, sizeof (*new));
|
memset (new, 0, sizeof (*new));
|
||||||
|
|
||||||
|
if (copy_names)
|
||||||
|
{
|
||||||
new->import_src = obstack_copy0 (obstack, src, strlen (src));
|
new->import_src = obstack_copy0 (obstack, src, strlen (src));
|
||||||
new->import_dest = obstack_copy0 (obstack, dest, strlen (dest));
|
new->import_dest = obstack_copy0 (obstack, dest, strlen (dest));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new->import_src = src;
|
||||||
|
new->import_dest = dest;
|
||||||
|
}
|
||||||
|
|
||||||
if (alias != NULL)
|
if (alias != NULL && copy_names)
|
||||||
new->alias = obstack_copy0 (obstack, alias, strlen (alias));
|
new->alias = obstack_copy0 (obstack, alias, strlen (alias));
|
||||||
|
else
|
||||||
|
new->alias = alias;
|
||||||
|
|
||||||
if (declaration != NULL)
|
if (declaration != NULL && copy_names)
|
||||||
new->declaration = obstack_copy0 (obstack,
|
new->declaration = obstack_copy0 (obstack,
|
||||||
declaration, strlen (declaration));
|
declaration, strlen (declaration));
|
||||||
|
else
|
||||||
|
new->declaration = declaration;
|
||||||
|
|
||||||
memcpy (new->excludes, VEC_address (const_char_ptr, excludes),
|
memcpy (new->excludes, VEC_address (const_char_ptr, excludes),
|
||||||
VEC_length (const_char_ptr, excludes) * sizeof (*new->excludes));
|
VEC_length (const_char_ptr, excludes) * sizeof (*new->excludes));
|
||||||
|
@ -125,11 +125,11 @@ struct demangle_parse_info
|
|||||||
|
|
||||||
struct using_direct
|
struct using_direct
|
||||||
{
|
{
|
||||||
char *import_src;
|
const char *import_src;
|
||||||
char *import_dest;
|
const char *import_dest;
|
||||||
|
|
||||||
char *alias;
|
const char *alias;
|
||||||
char *declaration;
|
const char *declaration;
|
||||||
|
|
||||||
struct using_direct *next;
|
struct using_direct *next;
|
||||||
|
|
||||||
@ -186,6 +186,7 @@ extern void cp_add_using_directive (const char *dest,
|
|||||||
const char *alias,
|
const char *alias,
|
||||||
const char *declaration,
|
const char *declaration,
|
||||||
VEC (const_char_ptr) *excludes,
|
VEC (const_char_ptr) *excludes,
|
||||||
|
int copy_names,
|
||||||
struct obstack *obstack);
|
struct obstack *obstack);
|
||||||
|
|
||||||
extern void cp_set_block_scope (const struct symbol *symbol,
|
extern void cp_set_block_scope (const struct symbol *symbol,
|
||||||
|
@ -7713,8 +7713,6 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
VEC (const_char_ptr) *excludes = NULL;
|
VEC (const_char_ptr) *excludes = NULL;
|
||||||
struct cleanup *cleanups;
|
struct cleanup *cleanups;
|
||||||
|
|
||||||
char *temp;
|
|
||||||
|
|
||||||
import_attr = dwarf2_attr (die, DW_AT_import, cu);
|
import_attr = dwarf2_attr (die, DW_AT_import, cu);
|
||||||
if (import_attr == NULL)
|
if (import_attr == NULL)
|
||||||
{
|
{
|
||||||
@ -7780,14 +7778,9 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
canonical_name = imported_name_prefix;
|
canonical_name = imported_name_prefix;
|
||||||
}
|
}
|
||||||
else if (strlen (imported_name_prefix) > 0)
|
else if (strlen (imported_name_prefix) > 0)
|
||||||
{
|
canonical_name = obconcat (&objfile->objfile_obstack,
|
||||||
temp = alloca (strlen (imported_name_prefix)
|
imported_name_prefix, "::", imported_name,
|
||||||
+ 2 + strlen (imported_name) + 1);
|
(char *) NULL);
|
||||||
strcpy (temp, imported_name_prefix);
|
|
||||||
strcat (temp, "::");
|
|
||||||
strcat (temp, imported_name);
|
|
||||||
canonical_name = temp;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
canonical_name = imported_name;
|
canonical_name = imported_name;
|
||||||
|
|
||||||
@ -7842,6 +7835,7 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
import_alias,
|
import_alias,
|
||||||
imported_declaration,
|
imported_declaration,
|
||||||
excludes,
|
excludes,
|
||||||
|
0,
|
||||||
&objfile->objfile_obstack);
|
&objfile->objfile_obstack);
|
||||||
|
|
||||||
do_cleanups (cleanups);
|
do_cleanups (cleanups);
|
||||||
@ -12108,7 +12102,7 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
|
|||||||
const char *previous_prefix = determine_prefix (die, cu);
|
const char *previous_prefix = determine_prefix (die, cu);
|
||||||
|
|
||||||
cp_add_using_directive (previous_prefix, TYPE_NAME (type), NULL,
|
cp_add_using_directive (previous_prefix, TYPE_NAME (type), NULL,
|
||||||
NULL, NULL, &objfile->objfile_obstack);
|
NULL, NULL, 0, &objfile->objfile_obstack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user