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] Compile objc-lang.c, objc-exp.tab.c [1/5]




Daniel Jacobowitz wrote:
On Thu, Mar 20, 2003 at 05:13:40PM -0500, Andrew Cagney wrote:


Would it be possible to make the cplus_demangle() method part of the language vector? That way code like the patch below could be reduced to:


	/* Return demangled language symbol, or NULL.  */
	language_demangle (current_language, arg);

This would in turn allow Adam to just add an equivalent objc_demangle() method to the objc language vector, and hence eliminate the need to always link in objc-lang.c.

As well as then? The places where objc is adding calls to the demangler the language is known.


My gut reaction is that it's just clutter until we decide how to solve
the problem of not knowing demanglings.  But it'll do for now.  I'd
like a comment along the lines of:

/* FIXME: sometimes the demangler is invoked when we don't know the
   language, so we can't use this everywhere.  */


Here's my crack at doing this


2003-03-30  Adam Fedor  <fedor at gnu dot org>

	* Makefile.in (c_lang.c, jv_lang.c): Add $(demangle_h).
	* language.h (struct language_defn): Add la_demangle.
	(language_demangle): Declare.
	* language.c (language_demangle): New function.
	(unk_lang_demangle): Likewise.
	(unknown_language_defn, auto_language_defn, local_language_defn):
        Add ukn_lang_demangle.
	* ada-lang.c (ada_language_defn): Add NULL for la_demangle element.
        * f-lang.c, m2-lang.c, p-lang.c, scm-lang.c: Likewise.
	* c-lang.c (c_language_defn, asm_language_defn): Likewise.
	(cplus_language_defn): Add cplus_demangle for la_demangle element.
	* jv-lang.c (kava_language_defn): Likewise.
        * objc-lang.c (objc_demangle): Add options argument
        (objc_language_defn): Use objc_demangle for la_demangle element.
	* maint.c (maintenance_demangle): Remove language_objc and
	language_cplus case. Use language_demangle in the default case.
	* utils.c (fprintf_symbol_filtered): Remove language_cplus case.
	Use langauge_demangle in the default case.

Index: Makefile.in
===================================================================
RCS file: /cvs/src/src/gdb/Makefile.in,v
retrieving revision 1.354
diff -u -p -r1.354 Makefile.in
--- Makefile.in	30 Mar 2003 14:52:41 -0000	1.354
+++ Makefile.in	31 Mar 2003 00:22:40 -0000
@@ -1568,7 +1568,8 @@ builtin-regs.o: builtin-regs.c $(defs_h)
 	$(gdb_string_h) $(gdb_assert_h)
 c-lang.o: c-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
 	$(parser_defs_h) $(language_h) $(c_lang_h) $(valprint_h) \
-	$(macroscope_h) $(gdb_assert_h) $(charset_h) $(gdb_string_h)
+	$(macroscope_h) $(gdb_assert_h) $(charset_h) $(gdb_string_h) \
+	$(demangle_h)
 c-typeprint.o: c-typeprint.c $(defs_h) $(gdb_obstack_h) $(bfd_h) $(symtab_h) \
 	$(gdbtypes_h) $(expression_h) $(value_h) $(gdbcore_h) $(target_h) \
 	$(language_h) $(demangle_h) $(c_lang_h) $(typeprint_h) $(cp_abi_h) \
@@ -1847,7 +1848,7 @@ irix5-nat.o: irix5-nat.c $(defs_h) $(inf
 jv-lang.o: jv-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \
 	$(parser_defs_h) $(language_h) $(gdbtypes_h) $(symtab_h) \
 	$(symfile_h) $(objfiles_h) $(gdb_string_h) $(value_h) $(c_lang_h) \
-	$(jv_lang_h) $(gdbcore_h) $(block_h)
+	$(jv_lang_h) $(gdbcore_h) $(block_h) $(demangle_h)
 jv-typeprint.o: jv-typeprint.c $(defs_h) $(symtab_h) $(gdbtypes_h) \
 	$(value_h) $(demangle_h) $(jv_lang_h) $(gdb_string_h) $(typeprint_h) \
 	$(c_lang_h) $(cp_abi_h)
Index: ada-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/ada-lang.c,v
retrieving revision 1.22
diff -u -p -r1.22 ada-lang.c
--- ada-lang.c	26 Mar 2003 03:39:43 -0000	1.22
+++ ada-lang.c	31 Mar 2003 00:22:45 -0000
@@ -8081,6 +8081,7 @@ const struct language_defn ada_language_
   ada_val_print,		/* Print a value using appropriate syntax */
   ada_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
 #if 0
   {"8#%lo#", "8#", "o", "#"},	/* Octal format info */
Index: c-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/c-lang.c,v
retrieving revision 1.17
diff -u -p -r1.17 c-lang.c
--- c-lang.c	26 Mar 2003 03:39:43 -0000	1.17
+++ c-lang.c	31 Mar 2003 00:22:45 -0000
@@ -31,6 +31,7 @@
 #include "gdb_assert.h"
 #include "charset.h"
 #include "gdb_string.h"
+#include "demangle.h"
 
 extern void _initialize_c_language (void);
 static void c_emit_char (int c, struct ui_file * stream, int quoter);
@@ -553,6 +554,7 @@ const struct language_defn c_language_de
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
@@ -606,6 +608,7 @@ const struct language_defn cplus_languag
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  cplus_demangle,		/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
@@ -636,6 +639,7 @@ const struct language_defn asm_language_
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: f-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/f-lang.c,v
retrieving revision 1.12
diff -u -p -r1.12 f-lang.c
--- f-lang.c	26 Mar 2003 03:39:43 -0000	1.12
+++ f-lang.c	31 Mar 2003 00:22:45 -0000
@@ -473,6 +473,7 @@ const struct language_defn f_language_de
   f_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* FIXME */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%o", "0", "o", ""},	/* Octal format info */
   {"%d", "", "d", ""},		/* Decimal format info */
Index: jv-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/jv-lang.c,v
retrieving revision 1.16
diff -u -p -r1.16 jv-lang.c
--- jv-lang.c	26 Mar 2003 03:39:44 -0000	1.16
+++ jv-lang.c	31 Mar 2003 00:22:46 -0000
@@ -34,6 +34,7 @@
 #include "jv-lang.h"
 #include "gdbcore.h"
 #include "block.h"
+#include "demangle.h"
 #include <ctype.h>
 
 struct type *java_int_type;
@@ -1055,6 +1056,7 @@ const struct language_defn java_language
   java_val_print,		/* Print a value using appropriate syntax */
   java_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  cplus_demangle,		/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: language.c
===================================================================
RCS file: /cvs/src/src/gdb/language.c,v
retrieving revision 1.32
diff -u -p -r1.32 language.c
--- language.c	26 Mar 2003 03:39:44 -0000	1.32
+++ language.c	31 Mar 2003 00:22:47 -0000
@@ -1361,6 +1361,16 @@ skip_language_trampoline (CORE_ADDR pc)
   return 0;
 }
 
+/* Return demangled language symbol, or NULL.  */
+char *
+language_demangle (const struct language_defn *current_language, 
+				const char *mangled, int options)
+{
+  if (current_language != NULL && current_language->la_demangle)
+    return current_language->la_demangle (mangled, options);
+  return NULL;
+}
+
 
 /* Define the language that is no language.  */
 
@@ -1428,6 +1438,12 @@ static CORE_ADDR unk_lang_trampoline (CO
   return 0;
 }
 
+static char *unk_lang_demangle (const char *mangled, int options)
+{
+  return NULL;
+}
+
+
 static struct type **const (unknown_builtin_types[]) =
 {
   0
@@ -1456,6 +1472,7 @@ const struct language_defn unknown_langu
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
+  unk_lang_demangle,		/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
@@ -1487,6 +1504,7 @@ const struct language_defn auto_language
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
+  unk_lang_demangle,		/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
@@ -1517,6 +1535,7 @@ const struct language_defn local_languag
   unk_lang_val_print,		/* Print a value using appropriate syntax */
   unk_lang_value_print,		/* Print a top-level value */
   unk_lang_trampoline,		/* Language specific skip_trampoline */
+  unk_lang_demangle,		/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: language.h
===================================================================
RCS file: /cvs/src/src/gdb/language.h,v
retrieving revision 1.17
diff -u -p -r1.17 language.h
--- language.h	26 Mar 2003 03:39:44 -0000	1.17
+++ language.h	31 Mar 2003 00:22:47 -0000
@@ -209,6 +209,11 @@ struct language_defn
        if it isn't a language tramp for this language.  */
     CORE_ADDR (*skip_trampoline) (CORE_ADDR pc);
 
+    /* Return demangled language symbol, or NULL.
+       FIXME: sometimes the demangler is invoked when we don't know the
+       language, so we can't use this everywhere.  */
+    char *(*la_demangle) (const char *mangled, int options);
+
     /* Base 2 (binary) formats. */
 
     struct language_format_info la_binary_format;
@@ -474,5 +479,9 @@ extern enum language get_frame_language 
 /* Check for a language-specific trampoline. */
 
 extern CORE_ADDR skip_language_trampoline (CORE_ADDR pc);
+
+/* Return demangled language symbol, or NULL.  */
+extern char *language_demangle (const struct language_defn *current_language, 
+				const char *mangled, int options);
 
 #endif /* defined (LANGUAGE_H) */
Index: m2-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/m2-lang.c,v
retrieving revision 1.8
diff -u -p -r1.8 m2-lang.c
--- m2-lang.c	26 Mar 2003 03:39:44 -0000	1.8
+++ m2-lang.c	31 Mar 2003 00:22:47 -0000
@@ -427,6 +427,7 @@ const struct language_defn m2_language_d
   m2_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"%loB", "", "o", "B"},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: maint.c
===================================================================
RCS file: /cvs/src/src/gdb/maint.c,v
retrieving revision 1.35
diff -u -p -r1.35 maint.c
--- maint.c	20 Feb 2003 17:17:24 -0000	1.35
+++ maint.c	31 Mar 2003 00:22:47 -0000
@@ -153,13 +153,9 @@ maintenance_demangle (char *args, int fr
     {
       switch (current_language->la_language)
 	{
-	case language_objc:
-	  /* Commented out until ObjC handling is enabled. */
-	  /* demangled = objc_demangle (args); */
-	  /* break; */
-	case language_cplus:
 	default:
-	  demangled = cplus_demangle (args, DMGL_ANSI | DMGL_PARAMS);
+	  demangled = language_demangle (current_language, args, 
+					 DMGL_ANSI | DMGL_PARAMS);
 	  break;
 	}
       if (demangled != NULL)
Index: objc-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/objc-lang.c,v
retrieving revision 1.14
diff -u -p -r1.14 objc-lang.c
--- objc-lang.c	26 Mar 2003 03:39:44 -0000	1.14
+++ objc-lang.c	31 Mar 2003 00:22:48 -0000
@@ -237,7 +237,7 @@ value_nsstring (char *ptr, int len)
 /* Objective-C name demangling.  */
 
 char *
-objc_demangle (const char *mangled)
+objc_demangle (const char *mangled, int options)
 {
   char *demangled, *cp;
 
@@ -700,6 +700,7 @@ const struct language_defn objc_language
   c_val_print,			/* Print a value using appropriate syntax */
   c_value_print,		/* Print a top-level value */
   objc_skip_trampoline, 	/* Language specific skip_trampoline */
+  objc_demangle,		/* Language specific symbol demangler */
   {"",     "",    "",  ""},	/* Binary format info */
   {"0%lo",  "0",   "o", ""},	/* Octal format info */
   {"%ld",   "",    "d", ""},	/* Decimal format info */
Index: objc-lang.h
===================================================================
RCS file: /cvs/src/src/gdb/objc-lang.h,v
retrieving revision 1.8
diff -u -p -r1.8 objc-lang.h
--- objc-lang.h	25 Mar 2003 02:18:55 -0000	1.8
+++ objc-lang.h	31 Mar 2003 00:22:48 -0000
@@ -41,7 +41,7 @@ extern int c_value_print (struct value *
 extern CORE_ADDR lookup_objc_class     (char *classname);
 extern int       lookup_child_selector (char *methodname);
 
-extern char *objc_demangle (const char *mangled);
+extern char *objc_demangle (const char *mangled, int options);
 
 extern int find_objc_msgcall (CORE_ADDR pc, CORE_ADDR *new_pc);
 
Index: p-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/p-lang.c,v
retrieving revision 1.10
diff -u -p -r1.10 p-lang.c
--- p-lang.c	26 Mar 2003 03:39:44 -0000	1.10
+++ p-lang.c	31 Mar 2003 00:22:49 -0000
@@ -462,6 +462,7 @@ const struct language_defn pascal_langua
   pascal_val_print,		/* Print a value using appropriate syntax */
   pascal_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "%", "b", ""},		/* Binary format info */
   {"0%lo", "0", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: scm-lang.c
===================================================================
RCS file: /cvs/src/src/gdb/scm-lang.c,v
retrieving revision 1.14
diff -u -p -r1.14 scm-lang.c
--- scm-lang.c	26 Mar 2003 03:39:44 -0000	1.14
+++ scm-lang.c	31 Mar 2003 00:22:49 -0000
@@ -251,6 +251,7 @@ const struct language_defn scm_language_
   scm_val_print,		/* Print a value using appropriate syntax */
   scm_value_print,		/* Print a top-level value */
   NULL,				/* Language specific skip_trampoline */
+  NULL,				/* Language specific symbol demangler */
   {"", "", "", ""},		/* Binary format info */
   {"#o%lo", "#o", "o", ""},	/* Octal format info */
   {"%ld", "", "d", ""},		/* Decimal format info */
Index: utils.c
===================================================================
RCS file: /cvs/src/src/gdb/utils.c,v
retrieving revision 1.98
diff -u -p -r1.98 utils.c
--- utils.c	26 Feb 2003 14:35:19 -0000	1.98
+++ utils.c	31 Mar 2003 00:22:50 -0000
@@ -2300,18 +2300,12 @@ fprintf_symbol_filtered (struct ui_file 
 	{
 	  switch (lang)
 	    {
-	    case language_cplus:
-	      demangled = cplus_demangle (name, arg_mode);
-	      break;
 	    case language_java:
 	      demangled = cplus_demangle (name, arg_mode | DMGL_JAVA);
 	      break;
-	    case language_objc:
-	      /* Commented out until ObjC handling is enabled.  */
-	      /*demangled = objc_demangle (name); */
-	      /*break; */
 	    default:
-	      demangled = NULL;
+	      demangled = language_demangle (language_def (lang), 
+					     name, arg_mode);
 	      break;
 	    }
 	  fputs_filtered (demangled ? demangled : name, stream);

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