aboutsummaryrefslogtreecommitdiff
path: root/gdb/Makefile.in
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-04-16 16:34:07 -0600
committerTom Tromey <tom@tromey.com>2021-04-16 16:34:08 -0600
commit3cbc7ac344cd6b500b54588a9099c037de58e75a (patch)
treed65283bae6379d5781766b52fb72a5b7b9dbe987 /gdb/Makefile.in
parent458620aabb33d9b0efa61d0fb402c8d19e65eabd (diff)
downloadfsf-binutils-gdb-3cbc7ac344cd6b500b54588a9099c037de58e75a.zip
fsf-binutils-gdb-3cbc7ac344cd6b500b54588a9099c037de58e75a.tar.gz
fsf-binutils-gdb-3cbc7ac344cd6b500b54588a9099c037de58e75a.tar.bz2
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.
Diffstat (limited to 'gdb/Makefile.in')
-rw-r--r--gdb/Makefile.in7
1 files changed, 3 insertions, 4 deletions
diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 3318c1a..4904190 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1134,6 +1134,7 @@ COMMON_SFILES = \
reverse.c \
run-on-main-thread.c \
rust-lang.c \
+ rust-parse.c \
sentinel-frame.c \
ser-event.c \
serial.c \
@@ -1200,7 +1201,6 @@ SFILES = \
m2-exp.y \
p-exp.y \
proc-service.list \
- rust-exp.y \
ser-base.c \
ser-unix.c \
sol-thread.c \
@@ -1608,8 +1608,7 @@ YYFILES = \
f-exp.c \
go-exp.c \
m2-exp.c \
- p-exp.c \
- rust-exp.c
+ p-exp.c
# ada-lex.c is included by another file, so it shouldn't wind up as a
# .o itself.
@@ -1969,7 +1968,7 @@ local-maintainer-clean:
rm -f c-exp.c \
cp-name-parser.c \
ada-lex.c ada-exp.c \
- d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c rust-exp.c
+ d-exp.c f-exp.c go-exp.c m2-exp.c p-exp.c
rm -f TAGS
rm -f $(YYFILES)
rm -f nm.h config.status