diff options
author | Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com> | 2023-07-19 13:18:14 +0200 |
---|---|---|
committer | P-E-P <32375388+P-E-P@users.noreply.github.com> | 2023-07-19 15:03:42 +0000 |
commit | b8268b6b7bb7c0353bfda2c88889b0f0ec71e7c8 (patch) | |
tree | 3a34ee04115d870c01279f3667af63032fd3df11 | |
parent | 4332fbfaec8b6b66efa737c92d191003a76264bf (diff) | |
download | gcc-b8268b6b7bb7c0353bfda2c88889b0f0ec71e7c8.zip gcc-b8268b6b7bb7c0353bfda2c88889b0f0ec71e7c8.tar.gz gcc-b8268b6b7bb7c0353bfda2c88889b0f0ec71e7c8.tar.bz2 |
libproc_macro: Change rust Ident definition
Change rust interface Ident definition to match C++ struct definition.
This structure now uses an FFIString instead of raw pointers.
ChangeLog:
* libgrust/libproc_macro/rust/bridge/ident.rs: Change raw
pointer string with an FFIString.
Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
-rw-r--r-- | libgrust/libproc_macro/rust/bridge/ident.rs | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/libgrust/libproc_macro/rust/bridge/ident.rs b/libgrust/libproc_macro/rust/bridge/ident.rs index 4218921..d58896d 100644 --- a/libgrust/libproc_macro/rust/bridge/ident.rs +++ b/libgrust/libproc_macro/rust/bridge/ident.rs @@ -1,11 +1,10 @@ +use bridge::ffistring::FFIString; use bridge::span::Span; -use std::convert::TryInto; -use std::ffi::c_uchar; use std::fmt; extern "C" { - fn Ident__new(string: *const c_uchar, len: u64, span: Span) -> Ident; - fn Ident__new_raw(string: *const c_uchar, len: u64, span: Span) -> Ident; + fn Ident__new(str: FFIString, span: Span) -> Ident; + fn Ident__new_raw(str: FFIString, span: Span) -> Ident; fn Ident__drop(ident: *mut Ident); fn Ident__clone(ident: *const Ident) -> Ident; } @@ -14,18 +13,17 @@ extern "C" { #[derive(Debug)] pub struct Ident { pub(crate) is_raw: bool, - pub(crate) val: *const c_uchar, - len: u64, + value: FFIString, span: Span, } impl Ident { pub fn new(string: &str, span: Span) -> Self { - unsafe { Ident__new(string.as_ptr(), string.len().try_into().unwrap(), span) } + unsafe { Ident__new(string.into(), span) } } pub fn new_raw(string: &str, span: Span) -> Self { - unsafe { Ident__new_raw(string.as_ptr(), string.len().try_into().unwrap(), span) } + unsafe { Ident__new_raw(string.into(), span) } } pub fn span(&self) -> Span { @@ -49,16 +47,7 @@ impl fmt::Display for Ident { if self.is_raw { f.write_str("r#")?; } - fmt::Display::fmt( - unsafe { - std::str::from_utf8(std::slice::from_raw_parts( - self.val, - self.len.try_into().unwrap(), - )) - .unwrap() - }, - f, - ) + self.value.fmt(f) } } |