Rewrite the Rust expression parser
authorTom Tromey <tom@tromey.com>
Fri, 16 Apr 2021 22:34:07 +0000 (16:34 -0600)
committerTom Tromey <tom@tromey.com>
Fri, 16 Apr 2021 22:34:08 +0000 (16:34 -0600)
commit3cbc7ac344cd6b500b54588a9099c037de58e75a
treed65283bae6379d5781766b52fb72a5b7b9dbe987
parent458620aabb33d9b0efa61d0fb402c8d19e65eabd
Rewrite the Rust expression parser

The Rust expression parser was written to construct its own AST, then
lower this to GDB expressions.  I did this primarily because the old
expressions were difficult to work with; after rewriting those, I
realized I could remove the AST from the Rust parser.

After looking at this, I realized it might be simpler to rewrite the
parser.  This patch reimplements it as a recursive-descent parser.  I
kept a fair amount of the existing code -- the lexer is pulled in
nearly unchanged.

There are several benefits to this approach:

* The parser is shorter now (from 2882 LOC to 2351).
* The parser is just ordinary C++ code that can be debugged in the
  usual way.
* Memory management in the parser is now straightforward, as
  parsing methods simply return a unique pointer or vector.

This required a couple of minor changes to the test suite, as some
errors have changed.

While this passes the tests, it's possible there are lurking bugs,
particularly around error handling.

gdb/ChangeLog
2021-04-16  Tom Tromey  <tom@tromey.com>

* rust-parse.c: New file.
* rust-exp.y: Remove.
* Makefile.in (COMMON_SFILES): Add rust-parse.c.
(SFILES): Remove rust-exp.y.
(YYFILES, local-maintainer-clean): Remove rust-exp.c.

gdb/testsuite/ChangeLog
2021-04-16  Tom Tromey  <tom@tromey.com>

* gdb.rust/simple.exp: Change error text.
* gdb.rust/expr.exp: Change error text.
gdb/ChangeLog
gdb/Makefile.in
gdb/rust-exp.y [deleted file]
gdb/rust-parse.c [new file with mode: 0644]
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.rust/expr.exp
gdb/testsuite/gdb.rust/simple.exp