This is the mail archive of the gdb-cvs@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]

[binutils-gdb] Use VEC for filename_language_table


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3fcf0b0d5a8cf04da4b4210121e7276ca1f20101

commit 3fcf0b0d5a8cf04da4b4210121e7276ca1f20101
Author: Tom Tromey <tom@tromey.com>
Date:   Thu May 26 10:22:03 2016 -0600

    Use VEC for filename_language_table
    
    This patch changes filename_language_table to be a VEC.  This seemed
    like a reasonable cleanup over the old code.
    
    2016-06-23  Tom Tromey  <tom@tromey.com>
    
    	* symfile.c (filename_language_table): Now a VEC.
    	(fl_table_size, fl_table_next): Remove.
    	(add_filename_language): Use VEC_safe_push.
    	(set_ext_lang_command, info_ext_lang_command)
    	(deduce_language_from_filename): Use VEC_iterate.
    	(init_filename_language_table): Use VEC_empty.

Diff:
---
 gdb/ChangeLog |  9 ++++++++
 gdb/symfile.c | 70 +++++++++++++++++++++++++++++++----------------------------
 2 files changed, 46 insertions(+), 33 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 72e426e..69fcc3b 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,14 @@
 2016-06-23  Tom Tromey  <tom@tromey.com>
 
+	* symfile.c (filename_language_table): Now a VEC.
+	(fl_table_size, fl_table_next): Remove.
+	(add_filename_language): Use VEC_safe_push.
+	(set_ext_lang_command, info_ext_lang_command)
+	(deduce_language_from_filename): Use VEC_iterate.
+	(init_filename_language_table): Use VEC_empty.
+
+2016-06-23  Tom Tromey  <tom@tromey.com>
+
 	* python/python.c (gdbpy_parameter): Now static.
 	* python/python-internal.h (gdbpy_parameter): Don't declare.
 
diff --git a/gdb/symfile.c b/gdb/symfile.c
index b244332..f7f56c6 100644
--- a/gdb/symfile.c
+++ b/gdb/symfile.c
@@ -2713,26 +2713,21 @@ typedef struct
 {
   char *ext;
   enum language lang;
-}
-filename_language;
+} filename_language;
+
+DEF_VEC_O (filename_language);
 
-static filename_language *filename_language_table;
-static int fl_table_size, fl_table_next;
+static VEC (filename_language) *filename_language_table;
 
 static void
 add_filename_language (char *ext, enum language lang)
 {
-  if (fl_table_next >= fl_table_size)
-    {
-      fl_table_size += 10;
-      filename_language_table = XRESIZEVEC (filename_language,
-					    filename_language_table,
-					    fl_table_size);
-    }
+  filename_language entry;
+
+  entry.ext = xstrdup (ext);
+  entry.lang = lang;
 
-  filename_language_table[fl_table_next].ext = xstrdup (ext);
-  filename_language_table[fl_table_next].lang = lang;
-  fl_table_next++;
+  VEC_safe_push (filename_language, filename_language_table, &entry);
 }
 
 static char *ext_args;
@@ -2752,6 +2747,7 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
   int i;
   char *cp = ext_args;
   enum language lang;
+  filename_language *entry;
 
   /* First arg is filename extension, starting with '.'  */
   if (*cp != '.')
@@ -2781,11 +2777,15 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
   lang = language_enum (cp);
 
   /* Now lookup the filename extension: do we already know it?  */
-  for (i = 0; i < fl_table_next; i++)
-    if (0 == strcmp (ext_args, filename_language_table[i].ext))
-      break;
+  for (i = 0;
+       VEC_iterate (filename_language, filename_language_table, i, entry);
+       ++i)
+    {
+      if (0 == strcmp (ext_args, entry->ext))
+	break;
+    }
 
-  if (i >= fl_table_next)
+  if (entry == NULL)
     {
       /* New file extension.  */
       add_filename_language (ext_args, lang);
@@ -2798,9 +2798,9 @@ set_ext_lang_command (char *args, int from_tty, struct cmd_list_element *e)
       /*   query ("Really make files of type %s '%s'?", */
       /*          ext_args, language_str (lang));           */
 
-      xfree (filename_language_table[i].ext);
-      filename_language_table[i].ext = xstrdup (ext_args);
-      filename_language_table[i].lang = lang;
+      xfree (entry->ext);
+      entry->ext = xstrdup (ext_args);
+      entry->lang = lang;
     }
 }
 
@@ -2808,24 +2808,22 @@ static void
 info_ext_lang_command (char *args, int from_tty)
 {
   int i;
+  filename_language *entry;
 
   printf_filtered (_("Filename extensions and the languages they represent:"));
   printf_filtered ("\n\n");
-  for (i = 0; i < fl_table_next; i++)
-    printf_filtered ("\t%s\t- %s\n",
-		     filename_language_table[i].ext,
-		     language_str (filename_language_table[i].lang));
+  for (i = 0;
+       VEC_iterate (filename_language, filename_language_table, i, entry);
+       ++i)
+    printf_filtered ("\t%s\t- %s\n", entry->ext, language_str (entry->lang));
 }
 
 static void
 init_filename_language_table (void)
 {
-  if (fl_table_size == 0)	/* Protect against repetition.  */
+  /* Protect against repetition.  */
+  if (VEC_empty (filename_language, filename_language_table))
     {
-      fl_table_size = 20;
-      fl_table_next = 0;
-      filename_language_table = XNEWVEC (filename_language, fl_table_size);
-
       add_filename_language (".c", language_c);
       add_filename_language (".d", language_d);
       add_filename_language (".C", language_cplus);
@@ -2876,9 +2874,15 @@ deduce_language_from_filename (const char *filename)
 
   if (filename != NULL)
     if ((cp = strrchr (filename, '.')) != NULL)
-      for (i = 0; i < fl_table_next; i++)
-	if (strcmp (cp, filename_language_table[i].ext) == 0)
-	  return filename_language_table[i].lang;
+      {
+	filename_language *entry;
+
+	for (i = 0;
+	     VEC_iterate (filename_language, filename_language_table, i, entry);
+	     ++i)
+	  if (strcmp (cp, entry->ext) == 0)
+	    return entry->lang;
+      }
 
   return language_unknown;
 }


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]