Fix Rust parser bug with function fields
authorTom Tromey <tom@tromey.com>
Tue, 25 Jan 2022 01:02:38 +0000 (18:02 -0700)
committerTom Tromey <tom@tromey.com>
Sun, 6 Feb 2022 20:13:31 +0000 (13:13 -0700)
commitc1f5e54825e4ac2d64b267578fd87409e0ea901c
tree01213bc6d20465dfc76a90363288a6fc8e86f278
parenta92613915ec2f38e1ab62ab254dde2a1ad4ad408
Fix Rust parser bug with function fields

In Rust, 'obj.f()' is a method call -- but '(obj.f)()' is a call of a
function-valued field 'f' in 'obj'.  The Rust parser in gdb currently
gets this wrong.  This is PR rust/24082.

The expression and Rust parser rewrites made this simple to fix --
simply wrapping a parenthesized expression in a new operation handles
it.  This patch has a slight hack because I didn't want to introduce a
new exp_opcode enumeration constant just for this.  IMO this doesn't
matter, since we should work toward removing dependencies on these
opcodes anyway; but let me know what you think of this.

Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=24082
gdb/rust-exp.h
gdb/rust-parse.c
gdb/testsuite/gdb.rust/fnfield.exp [new file with mode: 0644]
gdb/testsuite/gdb.rust/fnfield.rs [new file with mode: 0644]