Commit Message
Arthur Cohen
Aug. 1, 2024, 2:56 p.m. UTC
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 f6ee8a20913..511e94740c5 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 50aeff6433e..0bf9695bb6d 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 9b2bffed05d..eb3e1060e5d 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())