Enhance the menu to select function overloads with signatures
authorPierre-Marie de Rodat <derodat@adacore.com>
Thu, 3 Sep 2015 15:34:58 +0000 (17:34 +0200)
committerPierre-Marie de Rodat <derodat@adacore.com>
Mon, 7 Dec 2015 12:32:43 +0000 (13:32 +0100)
commitd72413e64a3444868e72e315ba2ceaf5a9d2bf6f
tree694d66bcd4e6f944f1a3f1948c101d0f7d3c5e89
parent1b36b65787bcb905fb6a2c7b790b07dcaacbe1cb
Enhance the menu to select function overloads with signatures

So far, trying to evaluate an expression involving a function call for
which GDB could find multiple function candidates outputs a menu so that
the user can select the one to run.  For instance, with the two
following functions:

    type New_Integer is new Integer;

    function F (I : Integer) return Boolean;
    function F (I : New_Integer) return Boolean;

Then we get the following GDB session:

    (gdb) print f(1)
    Multiple matches for f
    [0] cancel
    [1] foo.f at foo.adb:23
    [2] foo.f at foo.adb.28
    >

While the source location information is sufficient in order to
determine which one to select, one has to look for them in source files,
which is not convenient.

This commit tunes this menu in order to also include the list of formal
and return types (if any) in each entry.  The above then becomes:

    (gdb) print f(1)
    Multiple matches for f
    [0] cancel
    [1] foo.f (integer) return boolean at foo.adb:23
    [2] foo.f (foo.new_integer) return boolean at foo.adb.28
    >

Since this output is more verbose than previously, this change also
introduces an option (set/show ada print-signatures) to get the original
output.

gdb/ChangeLog:

* ada-lang.c (print_signatures): New.
(ada_print_symbol_signature): New.
(user_select_syms): Add signatures to the output of candidate
symbols using ada_print_symbol_signature.
(_initialize_ada_language): Add a "set/show ada
print-signatures" boolean option.

gdb/testsuite/ChangeLog:

* gdb.ada/fun_overload_menu.exp: New testcase.
* gdb.ada/fun_overload_menu/foo.adb: New testcase.

Tested on x86_64-linux, no regression.
gdb/ChangeLog
gdb/ada-lang.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.ada/fun_overload_menu.exp [new file with mode: 0644]
gdb/testsuite/gdb.ada/fun_overload_menu/foo.adb [new file with mode: 0644]