This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c index 5e894d4..3880141 100644 --- a/gdb/cp-namespace.c +++ b/gdb/cp-namespace.c @@ -117,7 +117,8 @@ cp_scan_for_anonymous_namespaces (const struct symbol *symbol) anonymous namespace. So add symbols in it to the namespace given by the previous component if there is one, or to the global namespace if there isn't. */ - cp_add_using_directive (dest, src, NULL); + cp_add_using_directive (dest, src, NULL, + &SYMBOL_SYMTAB (symbol)->objfile->objfile_obstack); } /* The "+ 2" is for the "::". */ previous_component = next_component + 2; @@ -128,11 +129,18 @@ cp_scan_for_anonymous_namespaces (const struct symbol *symbol) } }
void -cp_add_using_directive (const char *dest, const char *src, const char *alias) +cp_add_using_directive (const char *dest, const char *src, const char *alias, + struct obstack *obstack) { struct using_direct *current; struct using_direct *new; @@ -142,12 +150,22 @@ cp_add_using_directive (const char *dest, const char *src, const char *alias) for (current = using_directives; current != NULL; current = current->next) { if (strcmp (current->import_src, src) == 0 - && strcmp (current->import_dest, dest) == 0) + && strcmp (current->import_dest, dest) == 0 + && ((!alias && !current->alias) + || strcmp (current->alias, alias) == 0)) return; }
- using_directives = cp_add_using (dest, src, alias, using_directives); + new = OBSTACK_ZALLOC (obstack, struct using_direct);
+ new->import_src = obsavestring (src, strlen (src), obstack); + new->import_dest = obsavestring (dest, strlen (dest), obstack); + + if (alias != NULL) + new->alias = obsavestring (alias, strlen (alias), obstack); + + new->next = using_directives; + using_directives = new; }
/* Record the namespace that the function defined by SYMBOL was @@ -198,36 +216,6 @@ cp_is_anonymous (const char *namespace) != NULL); }
-/* Create a new struct using direct which imports the namespace SRC into the - scope DEST. ALIAS is the name of the imported namespace in the current - scope. If ALIAS is NULL then the namespace is known by its original name. - Set its next member in the linked list to NEXT; allocate all memory - using xmalloc. It copies the strings, so NAME can be a temporary - string. */ - -struct using_direct * -cp_add_using (const char *dest, - const char *src, - const char *alias, - struct using_direct *next) -{ - struct using_direct *retval; - - retval = xmalloc (sizeof (struct using_direct)); - retval->import_src = savestring (src, strlen(src)); - retval->import_dest = savestring (dest, strlen(dest)); - - if (alias != NULL) - retval->alias = savestring (alias, strlen (alias)); - else - retval->alias = NULL; - - retval->next = next; - retval->searched = 0; - - return retval; -} - /* The C++-specific version of name lookup for static and global names. This makes sure that names get looked for in all namespaces that are in scope. NAME is the natural name of the symbol that diff --git a/gdb/cp-support.h b/gdb/cp-support.h index a6a9af1..3921a5f 100644 --- a/gdb/cp-support.h +++ b/gdb/cp-support.h @@ -90,12 +90,8 @@ extern int cp_is_anonymous (const char *namespace);
extern void cp_add_using_directive (const char *dest, const char *src, - const char *alias); - -extern struct using_direct *cp_add_using (const char *dest, - const char *src, - const char *alias, - struct using_direct *next); + const char *alias, + struct obstack *obstack);
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index a05c946..447424e 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -3462,10 +3462,10 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu) strcpy (canonical_name, imported_name); }
- using_directives = cp_add_using (import_prefix, - canonical_name, - import_alias, - using_directives); + cp_add_using_directive (import_prefix, + canonical_name, + import_alias, + &cu->objfile->objfile_obstack); }
static void @@ -5624,7 +5624,8 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu) if (is_anonymous) { 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, + &objfile->objfile_obstack); } }
Attachment:
memoryleak.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |