ada-lang.c:ada_find_renaming_symbol minor improvement.
authorJoel Brobecker <brobecker@gnat.com>
Wed, 29 Feb 2012 19:51:49 +0000 (19:51 +0000)
committerJoel Brobecker <brobecker@gnat.com>
Wed, 29 Feb 2012 19:51:49 +0000 (19:51 +0000)
This is a minor improvement in ada_find_renaming_symbol: What we were
doing was going from a symbol, get its name, and then search for
renamings.  But if the original symbol was already itself a renaming,
then we'd look the symbol up again to return it.  Since we had the
symbol in the first place, we shouldn't need to look it up again.

This is what this patch does: Modify ada_find_renaming_symbol to
take a symbol instead of the symbol's (linkage) name, and then updates
the one caller.

gdb/ChangeLog:

        * ada-lang.h (ada_find_renaming_symbol): Replace parameter
        "name" with "struct symbol *name_sym".
        * ada-exp.y (write_var_or_type): Update call to
        ada_find_renaming_symbol.
        * ada-lang.c (ada_find_renaming_symbol): Replace parameter
        "name" with "struct symbol *name_sym". Adjust Implementation
        accordingly.  Adjust the function documentation.

gdb/ChangeLog
gdb/ada-exp.y
gdb/ada-lang.c
gdb/ada-lang.h

index ad316c6d3abdd6f25e0f37c0be402282958abd53..c6a6d8f552244300f08941597fe1cbff61db8e46 100644 (file)
@@ -1,3 +1,12 @@
+2012-02-29  Joel Brobecker  <brobecker@adacore.com>
+
+       * ada-lang.h (ada_find_renaming_symbol): Replace parameter
+       "name" with "struct symbol *name_sym".
+       * ada-exp.y (write_var_or_type): Update call to
+       ada_find_renaming_symbol.
+       "name" with "struct symbol *name_sym". Adjust Implementation
+       accordingly.  Adjust the function documentation.
+
 2012-02-29  Joel Brobecker  <brobecker@adacore.com>
 
        * ada-lang.h (ada_find_any_symbol, ada_find_any_type): Delete.
index d1c7367aa7120441d396871159c5b56b100236b2..226cc1d8f11d22814bd486e896be87b8b52350c9 100644 (file)
@@ -1288,8 +1288,7 @@ write_var_or_type (struct block *block, struct stoken name0)
          if (nsyms == 1)
            {
              struct symbol *ren_sym =
-               ada_find_renaming_symbol (SYMBOL_LINKAGE_NAME (syms[0].sym), 
-                                         syms[0].block);
+               ada_find_renaming_symbol (syms[0].sym, syms[0].block);
 
              if (ren_sym != NULL)
                syms[0].sym = ren_sym;
index c5d5ff742f706274ee07a71cd1054ab28a4b4849..349ca172ac0fc486396e646aafb6a668d1ff9c5f 100644 (file)
@@ -7054,16 +7054,21 @@ ada_find_any_type (const char *name)
   return NULL;
 }
 
-/* Given NAME and an associated BLOCK, search all symbols for
-   NAME suffixed with  "___XR", which is the ``renaming'' symbol
-   associated to NAME.  Return this symbol if found, return
-   NULL otherwise.  */
+/* Given NAME_SYM and an associated BLOCK, find a "renaming" symbol
+   associated with NAME_SYM's name.  NAME_SYM may itself be a renaming
+   symbol, in which case it is returned.  Otherwise, this looks for
+   symbols whose name is that of NAME_SYM suffixed with  "___XR".
+   Return symbol if found, and NULL otherwise.  */
 
 struct symbol *
-ada_find_renaming_symbol (const char *name, struct block *block)
+ada_find_renaming_symbol (struct symbol *name_sym, struct block *block)
 {
+  const char *name = SYMBOL_LINKAGE_NAME (name_sym);
   struct symbol *sym;
 
+  if (strstr (name, "___XR") != NULL)
+     return name_sym;
+
   sym = find_old_style_renaming_symbol (name, block);
 
   if (sym != NULL)
index abf9c53031a07a7c0184dbb2fc9e83764014d2ab..fd7b0df44fcce9d92d394303c3ac96c048499fb5 100644 (file)
@@ -333,7 +333,7 @@ extern struct type *ada_find_parallel_type (struct type *,
 
 extern LONGEST get_int_var_value (char *, int *);
 
-extern struct symbol *ada_find_renaming_symbol (const char *name,
+extern struct symbol *ada_find_renaming_symbol (struct symbol *name_sym,
                                                 struct block *block);
 
 extern int ada_prefer_type (struct type *, struct type *);