From 0f9668507c9843a773af794ed8d0b0de3fa8b5cf Mon Sep 17 00:00:00 2001 From: Arthur Cohen <arthur.cohen@embecosm.com> Date: Tue, 13 Feb 2024 16:31:25 +0100 Subject: [PATCH] gccrs: rust-fmt: Store parsed string in Pieces struct gcc/rust/ChangeLog: * ast/rust-fmt.cc (Pieces::collect): Fix signature to take ownership of the given string. * ast/rust-fmt.h (struct Pieces): Store parsed string in the struct. libgrust/ChangeLog: * libformat_parser/src/lib.rs: Add debug prompt. --- gcc/rust/ast/rust-fmt.cc | 4 ++-- gcc/rust/ast/rust-fmt.h | 7 +++++-- libgrust/libformat_parser/src/lib.rs | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/gcc/rust/ast/rust-fmt.cc b/gcc/rust/ast/rust-fmt.cc index f6ee8a209137..511e94740c5e 100644 --- a/gcc/rust/ast/rust-fmt.cc +++ b/gcc/rust/ast/rust-fmt.cc @@ -23,7 +23,7 @@ namespace Rust { namespace Fmt { Pieces -Pieces::collect (const std::string &to_parse) +Pieces::collect (std::string &&to_parse) { auto piece_slice = collect_pieces (to_parse.c_str ()); @@ -34,7 +34,7 @@ Pieces::collect (const std::string &to_parse) // auto pieces = std::vector<Piece> (piece_slice.base_ptr, // piece_slice.base_ptr + piece_slice.len); - return Pieces (piece_slice); + return Pieces (piece_slice, std::move (to_parse)); } Pieces::~Pieces () { destroy_pieces (slice); } diff --git a/gcc/rust/ast/rust-fmt.h b/gcc/rust/ast/rust-fmt.h index 50aeff6433ee..0bf9695bb6d2 100644 --- a/gcc/rust/ast/rust-fmt.h +++ b/gcc/rust/ast/rust-fmt.h @@ -251,13 +251,16 @@ void destroy_pieces (PieceSlice); struct Pieces { - static Pieces collect (const std::string &to_parse); + static Pieces collect (std::string &&to_parse); ~Pieces (); private: - Pieces (PieceSlice slice) : slice (slice) {} + Pieces (PieceSlice slice, std::string &&to_parse) + : slice (slice), to_parse (std::move (to_parse)) + {} PieceSlice slice; + std::string to_parse; }; } // namespace Fmt diff --git a/libgrust/libformat_parser/src/lib.rs b/libgrust/libformat_parser/src/lib.rs index 9b2bffed05d4..eb3e1060e5d8 100644 --- a/libgrust/libformat_parser/src/lib.rs +++ b/libgrust/libformat_parser/src/lib.rs @@ -340,6 +340,7 @@ pub struct PieceSlice { pub extern "C" fn collect_pieces(input: *const libc::c_char) -> PieceSlice { // FIXME: Add comment let str = unsafe { CStr::from_ptr(input) }; + dbg!(str); // FIXME: No unwrap let pieces: Vec<ffi::Piece<'_>> = rust::collect_pieces(str.to_str().unwrap()) -- GitLab