public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] Remove 'copy_names' parameter from add_using_directive
@ 2024-04-10 17:49 Tom Tromey
  2024-04-15 17:16 ` John Baldwin
  0 siblings, 1 reply; 2+ messages in thread
From: Tom Tromey @ 2024-04-10 17:49 UTC (permalink / raw)
  To: gdb-patches; +Cc: Tom Tromey

I noticed that add_using_directive's 'copy_names' parameter is only
used by a single caller.  This patch removes the parameter and changes
that caller to copy the names itself.  I chose to use intern here
since I suspect the names may well be repeated in a given objfile.
---
 gdb/cp-namespace.c |  5 +++--
 gdb/dwarf2/read.c  |  3 +--
 gdb/namespace.c    | 36 +++++++++---------------------------
 gdb/namespace.h    |  1 -
 4 files changed, 13 insertions(+), 32 deletions(-)

diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index ec72d72b5a7..4434ddff79c 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -100,8 +100,9 @@ cp_scan_for_anonymous_namespaces (struct buildsym_compunit *compunit,
 		 to 0, this way it is always considered valid.  */
 	      std::vector<const char *> excludes;
 	      add_using_directive (compunit->get_local_using_directives (),
-				   dest, src, NULL, NULL, excludes, 0,
-				   1, &objfile->objfile_obstack);
+				   objfile->intern (dest), objfile->intern (src),
+				   nullptr, nullptr, excludes, 0,
+				   &objfile->objfile_obstack);
 	    }
 	  /* The "+ 2" is for the "::".  */
 	  previous_component = next_component + 2;
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c
index 9e37011ddf0..b029c49a339 100644
--- a/gdb/dwarf2/read.c
+++ b/gdb/dwarf2/read.c
@@ -7248,7 +7248,6 @@ read_import_statement (struct die_info *die, struct dwarf2_cu *cu)
 		       imported_declaration,
 		       excludes,
 		       read_decl_line (die, cu),
-		       0,
 		       &objfile->objfile_obstack);
 }
 
@@ -14071,7 +14070,7 @@ read_namespace (struct die_info *die, struct dwarf2_cu *cu)
 			       previous_prefix, type->name (), NULL,
 			       NULL, excludes,
 			       read_decl_line (die, cu),
-			       0, &objfile->objfile_obstack);
+			       &objfile->objfile_obstack);
 	}
     }
 
diff --git a/gdb/namespace.c b/gdb/namespace.c
index 231c7bd4cb6..5a9a99d56de 100644
--- a/gdb/namespace.c
+++ b/gdb/namespace.c
@@ -27,12 +27,11 @@
    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.  DECLARATION is the name if the imported
-   variable 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 module or NULL.  If COPY_NAMES is non-zero, then the
-   arguments are copied into newly allocated memory so they can be
-   temporaries.  For EXCLUDES the contents of the vector are copied,
-   but the pointed to characters are not copied.  */
+   variable 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 module or NULL.  For EXCLUDES the contents of the
+   vector are copied, but the pointed to characters are not
+   copied.  */
 
 void
 add_using_directive (struct using_direct **using_directives,
@@ -42,7 +41,6 @@ add_using_directive (struct using_direct **using_directives,
 		     const char *declaration,
 		     const std::vector<const char *> &excludes,
 		     unsigned int decl_line,
-		     int copy_names,
 		     struct obstack *obstack)
 {
   struct using_direct *current;
@@ -90,26 +88,10 @@ add_using_directive (struct using_direct **using_directives,
   newobj = (struct using_direct *) obstack_alloc (obstack, alloc_len);
   memset (newobj, 0, sizeof (*newobj));
 
-  if (copy_names)
-    {
-      newobj->import_src = obstack_strdup (obstack, src);
-      newobj->import_dest = obstack_strdup (obstack, dest);
-    }
-  else
-    {
-      newobj->import_src = src;
-      newobj->import_dest = dest;
-    }
-
-  if (alias != NULL && copy_names)
-    newobj->alias = obstack_strdup (obstack, alias);
-  else
-    newobj->alias = alias;
-
-  if (declaration != NULL && copy_names)
-    newobj->declaration = obstack_strdup (obstack, declaration);
-  else
-    newobj->declaration = declaration;
+  newobj->import_src = src;
+  newobj->import_dest = dest;
+  newobj->alias = alias;
+  newobj->declaration = declaration;
 
   if (!excludes.empty ())
     memcpy (newobj->excludes, excludes.data (),
diff --git a/gdb/namespace.h b/gdb/namespace.h
index bc9dcf245ca..232dcc03bd8 100644
--- a/gdb/namespace.h
+++ b/gdb/namespace.h
@@ -125,7 +125,6 @@ extern void add_using_directive (struct using_direct **using_directives,
 				 const char *declaration,
 				 const std::vector<const char *> &excludes,
 				 const unsigned int decl_line,
-				 int copy_names,
 				 struct obstack *obstack);
 
 #endif /* NAMESPACE_H */
-- 
2.43.0


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH] Remove 'copy_names' parameter from add_using_directive
  2024-04-10 17:49 [PATCH] Remove 'copy_names' parameter from add_using_directive Tom Tromey
@ 2024-04-15 17:16 ` John Baldwin
  0 siblings, 0 replies; 2+ messages in thread
From: John Baldwin @ 2024-04-15 17:16 UTC (permalink / raw)
  To: Tom Tromey, gdb-patches

On 4/10/24 10:49 AM, Tom Tromey wrote:
> I noticed that add_using_directive's 'copy_names' parameter is only
> used by a single caller.  This patch removes the parameter and changes
> that caller to copy the names itself.  I chose to use intern here
> since I suspect the names may well be repeated in a given objfile.

Huh, I didn't know about the intern method before.

Approved-By: John Baldwin <jhb@FreeBSD.org>

-- 
John Baldwin


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-04-15 17:16 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-10 17:49 [PATCH] Remove 'copy_names' parameter from add_using_directive Tom Tromey
2024-04-15 17:16 ` John Baldwin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).