2004-06-08 Paul N. Hilfinger <Hilfinger@gnat.com>
authorPaul N. Hilfinger <hilfinger@adacore.com>
Tue, 8 Jun 2004 08:42:04 +0000 (08:42 +0000)
committerPaul N. Hilfinger <hilfinger@adacore.com>
Tue, 8 Jun 2004 08:42:04 +0000 (08:42 +0000)
* ada-lang.c (lookup_symbol_in_language): New function to allow
re-use of another language's symbol lookup code.  (Placed here
temporarily while Ada support is being integrated into the public
tree).
(restore_language): New auxiliary function for
lookup_symbol_in_language.
* ada-lang.h (lookup_symbol_in_language): Declare (Placed here
temporarily while Ada support is being integrated into the public
tree).

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

index 501ec4b..370a5d9 100644 (file)
@@ -1,3 +1,15 @@
+2004-06-08  Paul N. Hilfinger  <Hilfinger@gnat.com>
+
+       * ada-lang.c (lookup_symbol_in_language): New function to allow
+       re-use of another language's symbol lookup code.  (Placed here
+       temporarily while Ada support is being integrated into the public
+       tree).  
+       (restore_language): New auxiliary function for 
+       lookup_symbol_in_language.
+       * ada-lang.h (lookup_symbol_in_language): Declare (Placed here
+       temporarily while Ada support is being integrated into the public
+       tree).
+       
 2004-06-08  Alexandre Oliva  <aoliva@redhat.com>
 
        * Makefile.in (check//%): New.
index e9daf1a..f084f4f 100644 (file)
@@ -4444,6 +4444,30 @@ add_symbols_from_enclosing_procs (struct obstack *obstackp,
 #endif
 }
 
+/* FIXME: The next two routines belong in symtab.c */
+
+static void restore_language (void* lang)
+{
+  set_language ((enum language) lang);
+}
+
+/* As for lookup_symbol, but performed as if the current language 
+   were LANG. */
+
+struct symbol *
+lookup_symbol_in_language (const char *name, const struct block *block,
+                          domain_enum domain, enum language lang,
+                          int *is_a_field_of_this, struct symtab **symtab)
+{
+  struct cleanup *old_chain 
+    = make_cleanup (restore_language, (void*) current_language->la_language);
+  struct symbol *result;
+  set_language (lang);
+  result = lookup_symbol (name, block, domain, is_a_field_of_this, symtab);
+  do_cleanups (old_chain);
+  return result;
+}
+
 /* True if TYPE is definitely an artificial type supplied to a symbol
    for which no debugging information was given in the symbol file.  */
 
index 0ec47b4..0381eff 100644 (file)
@@ -393,4 +393,15 @@ extern void ada_find_printable_frame (struct frame_info *fi);
 
 extern void ada_reset_thread_registers (void);
 
+/* Look up a symbol by name using the search conventions of 
+   a specific language (optional block, optional symtab). 
+   FIXME: Should be symtab.h. */
+
+extern struct symbol *lookup_symbol_in_language (const char *, 
+                                                const struct block *,
+                                                domain_enum, 
+                                                enum language,
+                                                int *,
+                                                struct symtab **);
+
 #endif