Move logic out of symbol_find_demangled_name
This patch moves most of the demangling logic out of symbol_find_demangled_name into the various language_defn objects. The simplest way to do this seemed to be to add a new method to language_defn. This is shame given the existing la_demangle, but given Ada's unusual needs, and the differing demangling options between languages, la_demangle didn't seem to fit. In order to make this work, I made enum language order-sensitive. This helps preserve the current ordering of demangling operations. 2016-06-23 Tom Tromey <tom@tromey.com> * symtab.c (symbol_find_demangled_name): Loop over languages and use language_sniff_from_mangled_name. * rust-lang.c (rust_sniff_from_mangled_name): New function. (rust_language_defn): Update. * p-lang.c (pascal_language_defn): Update. * opencl-lang.c (opencl_language_defn): Update. * objc-lang.c (objc_sniff_from_mangled_name): New function. (objc_language_defn): Update. * m2-lang.c (m2_language_defn): Update. * language.h (struct language_defn) <la_sniff_from_mangled_name>: New field. (language_sniff_from_mangled_name): Declare. * language.c (language_sniff_from_mangled_name): New function. (unknown_language_defn, auto_language_defn, local_language_defn): Update. * jv-lang.c (java_sniff_from_mangled_name): New function. (java_language_defn): Use it. * go-lang.c (go_sniff_from_mangled_name): New function. (go_language_defn): Use it. * f-lang.c (f_language_defn): Update. * defs.h (enum language): Reorder. * d-lang.c (d_sniff_from_mangled_name): New function. (d_language_defn): Use it. * cp-support.h (gdb_sniff_from_mangled_name): Declare. * cp-support.c (gdb_sniff_from_mangled_name): New function. * c-lang.c (c_language_defn, cplus_language_defn) (asm_language_defn, minimal_language_defn): Update. * ada-lang.c (ada_sniff_from_mangled_name): New function. (ada_language_defn): Use it.
This commit is contained in:
parent
56618e20bc
commit
8b302db80c
18 changed files with 225 additions and 99 deletions
18
gdb/defs.h
18
gdb/defs.h
|
@ -194,26 +194,36 @@ extern void quit_serial_event_clear (void);
|
|||
/* * Languages represented in the symbol table and elsewhere.
|
||||
This should probably be in language.h, but since enum's can't
|
||||
be forward declared to satisfy opaque references before their
|
||||
actual definition, needs to be here. */
|
||||
actual definition, needs to be here.
|
||||
|
||||
The constants here are in priority order. In particular,
|
||||
demangling is attempted according to this order.
|
||||
|
||||
Note that there's ambiguity between the mangling schemes of some of
|
||||
these languages, so some symbols could be successfully demangled by
|
||||
several languages. For that reason, the constants here are sorted
|
||||
in the order we'll attempt demangling them. For example: Java and
|
||||
Rust use C++ mangling, so must come after C++; Ada must come last
|
||||
(see ada_sniff_from_mangled_name). */
|
||||
|
||||
enum language
|
||||
{
|
||||
language_unknown, /* Language not known */
|
||||
language_auto, /* Placeholder for automatic setting */
|
||||
language_c, /* C */
|
||||
language_objc, /* Objective-C */
|
||||
language_cplus, /* C++ */
|
||||
language_java, /* Java */
|
||||
language_d, /* D */
|
||||
language_go, /* Go */
|
||||
language_objc, /* Objective-C */
|
||||
language_java, /* Java */
|
||||
language_fortran, /* Fortran */
|
||||
language_m2, /* Modula-2 */
|
||||
language_asm, /* Assembly language */
|
||||
language_pascal, /* Pascal */
|
||||
language_ada, /* Ada */
|
||||
language_opencl, /* OpenCL */
|
||||
language_rust, /* Rust */
|
||||
language_minimal, /* All other languages, minimal support only */
|
||||
language_ada, /* Ada */
|
||||
nr_languages
|
||||
};
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue