This is the mail archive of the gdb-patches@sources.redhat.com 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]

Re: [RFA] Demangle ObjC symbols in symtab.c [4/5]


Michael Snyder wrote:
Adam Fedor wrote:

2003-01-03  Adam Fedor  <fedor@gnu.org>

       * symtab.c (symbol_init_demangled_name): Check for and demangle
       ObjC symbols.
       (make_symbol_completion_list): Look for ObjC symbols

Not to be too fussy, but these two changes seem unrelated.
It might be better to submit them separately. Easier to review and approve.

Here's the first half of the patch again with a small change.

2003-01-10  Adam Fedor  <fedor@gnu.org>

	* symtab.c (symbol_init_demangled_name): Check for and demangle
	ObjC symbols.

Index: symtab.c
===================================================================
RCS file: /cvs/src/src/gdb/symtab.c,v
retrieving revision 1.84
diff -u -p -r1.84 symtab.c
--- symtab.c	2 Jan 2003 14:27:26 -0000	1.84
+++ symtab.c	11 Jan 2003 03:51:34 -0000
@@ -40,6 +40,7 @@
 #include "linespec.h"
 #include "source.h"
 #include "filenames.h"		/* for FILENAME_CMP */
+#include "objc-lang.h"
 
 #include "gdb_obstack.h"
 
@@ -440,15 +441,31 @@ void
 symbol_init_demangled_name (struct general_symbol_info *gsymbol,
                             struct obstack *obstack)
 {
-  char *mangled = gsymbol->name;
-  char *demangled = NULL;
-
   if (gsymbol->language == language_unknown)
     gsymbol->language = language_auto;
+
+  if (gsymbol->language == language_objc
+      || gsymbol->language == language_auto)
+    {
+      char *demangled =
+	objc_demangle (gsymbol->name);
+      if (demangled != NULL)
+	{
+	  gsymbol->language = language_objc;
+	  gsymbol->language_specific.objc_specific.demangled_name =
+	    obsavestring (demangled, strlen (demangled), (obstack));
+	  xfree (demangled);
+	}
+      else
+	{
+	  gsymbol->language_specific.objc_specific.demangled_name = NULL;
+	}
+    }
+  
   if (gsymbol->language == language_cplus
       || gsymbol->language == language_auto)
     {
-      demangled =
+      char *demangled =
         cplus_demangle (gsymbol->name, DMGL_PARAMS | DMGL_ANSI);
       if (demangled != NULL)
         {
@@ -462,9 +479,10 @@ symbol_init_demangled_name (struct gener
           gsymbol->language_specific.cplus_specific.demangled_name = NULL;
         }
     }
+
   if (gsymbol->language == language_java)
     {
-      demangled =
+      char *demangled =
         cplus_demangle (gsymbol->name,
                         DMGL_PARAMS | DMGL_ANSI | DMGL_JAVA);
       if (demangled != NULL)
@@ -831,7 +849,7 @@ lookup_symbol_aux (const char *name, con
     }
 #endif /* 0 */
 
-  /* C++: If requested to do so by the caller, 
+  /* C++/Java/Objective-C: If requested to do so by the caller, 
      check to see if NAME is a field of `this'. */
   if (is_a_field_of_this)
     {
@@ -1483,9 +1501,9 @@ find_main_psymtab (void)
    for now we don't worry about the slight inefficiency of looking for
    a match we'll never find, since it will go pretty quick.  Once the
    binary search terminates, we drop through and do a straight linear
-   search on the symbols.  Each symbol which is marked as being a C++
-   symbol (language_cplus set) has both the encoded and non-encoded names
-   tested for a match.
+   search on the symbols.  Each symbol which is marked as being a ObjC/C++
+   symbol (language_cplus or language_objc set) has both the encoded and 
+   non-encoded names tested for a match.
 
    If MANGLED_NAME is non-NULL, verify that any symbol we find has this
    particular mangled name.

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