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]




Andrew Cagney wrote:


Hmm, good catch. Any reason for the unknown language demangler to not just do c++ demangling?


OK. Here I've add java_demangle and now ukn_lang_demangle uses cplus_demangle.



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

	* Makefile.in (c_lang.o, jv_lang.o, language.o): 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 (java_demangle): New function
	(java_language_defn): Use it for la_demangle element.
        * 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,
	language_java, and langauge_objc 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	1 Apr 2003 04:00:49 -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)
@@ -1859,7 +1860,7 @@ kod.o: kod.c $(defs_h) $(command_h) $(gd
 	$(kod_h)
 language.o: language.c $(defs_h) $(gdb_string_h) $(symtab_h) $(gdbtypes_h) \
 	$(value_h) $(gdbcmd_h) $(expression_h) $(language_h) $(target_h) \
-	$(parser_defs_h) $(jv_lang_h)
+	$(parser_defs_h) $(jv_lang_h) $(demangle_h)
 lin-lwp.o: lin-lwp.c $(defs_h) $(gdb_assert_h) $(gdb_string_h) $(gdb_wait_h) \
 	$(gdbthread_h) $(inferior_h) $(target_h) $(regcache_h) $(gdbcmd_h)
 linespec.o: linespec.c $(defs_h) $(symtab_h) $(frame_h) $(command_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	1 Apr 2003 04:01:00 -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	1 Apr 2003 04:01:00 -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	1 Apr 2003 04:01:00 -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	1 Apr 2003 04:01:00 -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;
@@ -996,6 +997,12 @@ java_create_fundamental_type (struct obj
   return c_create_fundamental_type (objfile, typeid);
 }
 
+static char *java_demangle (const char *mangled, int options)
+{
+  return cplus_demangle (mangled, options | DMGL_JAVA);
+}
+
+
 /* Table mapping opcodes into strings for printing operators
    and precedences of the operators.  */
 
@@ -1055,6 +1062,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 */
+  java_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	1 Apr 2003 04:01:02 -0000
@@ -44,6 +44,7 @@
 #include "target.h"
 #include "parser-defs.h"
 #include "jv-lang.h"
+#include "demangle.h"
 
 extern void _initialize_language (void);
 
@@ -1361,6 +1362,21 @@ skip_language_trampoline (CORE_ADDR pc)
   return 0;
 }
 
+/* Return demangled language symbol, or NULL.  
+   FIXME: Options are only useful for certain languages and ignored
+   by others, so it would be better to remove them here and have a
+   more flexible demangler for the languages that need it.  
+   FIXME: Sometimes the demangler is invoked when we don't know the
+   language, so we can't use this everywhere.  */
+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 +1444,13 @@ static CORE_ADDR unk_lang_trampoline (CO
   return 0;
 }
 
+/* Unknown languages just use the cplus demangler.  */
+static char *unk_lang_demangle (const char *mangled, int options)
+{
+  return cplus_demangle (mangled, options);
+}
+
+
 static struct type **const (unknown_builtin_types[]) =
 {
   0
@@ -1456,6 +1479,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 +1511,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 +1542,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	1 Apr 2003 04:01:05 -0000
@@ -209,6 +209,9 @@ 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.  */
+    char *(*la_demangle) (const char *mangled, int options);
+
     /* Base 2 (binary) formats. */
 
     struct language_format_info la_binary_format;
@@ -474,5 +477,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	1 Apr 2003 04:01:05 -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	1 Apr 2003 04:01:12 -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	1 Apr 2003 04:01:17 -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	1 Apr 2003 04:01:17 -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	1 Apr 2003 04:01:19 -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	1 Apr 2003 04:01:19 -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	1 Apr 2003 04:01:30 -0000
@@ -2300,18 +2300,9 @@ 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]