use bridge::{ffistring::FFIString, span::Span};
-use std::convert::TryInto;
-use std::ffi::c_uchar;
use std::fmt;
use std::str::FromStr;
use LexError;
extern "C" {
- fn Literal__from_string(str: *const c_uchar, len: u64, lit: *mut Literal) -> bool;
+ fn Literal__from_string(str: FFIString, lit: *mut Literal) -> bool;
}
#[repr(C)]
};
// TODO: We might want to pass a LexError by reference to retrieve
// error information
- if unsafe {
- Literal__from_string(
- string.as_ptr(),
- string.len().try_into().unwrap(),
- &mut lit as *mut Literal,
- )
- } {
+ if unsafe { Literal__from_string(string.into(), &mut lit as *mut Literal) } {
Err(LexError)
} else {
Ok(lit)
-use bridge::{group::Group, ident::Ident, literal::Literal, punct::Punct};
+use bridge::{ffistring::FFIString, group::Group, ident::Ident, literal::Literal, punct::Punct};
use std::convert::TryInto;
-use std::ffi::c_uchar;
use std::fmt;
use std::slice;
use std::str::FromStr;
fn TokenStream__new() -> TokenStream;
fn TokenStream__with_capacity(capacity: u64) -> TokenStream;
fn TokenStream__push(stream: *mut TokenStream, tree: TokenTree);
- fn TokenStream__from_string(str: *const c_uchar, len: u64, ts: *mut TokenStream) -> bool;
+ fn TokenStream__from_string(str: FFIString, ts: *mut TokenStream) -> bool;
fn TokenStream__clone(ts: *const TokenStream) -> TokenStream;
fn TokenStream__drop(stream: *mut TokenStream);
}
type Err = LexError;
fn from_str(string: &str) -> Result<Self, LexError> {
let mut ts = TokenStream::new();
- if unsafe {
- TokenStream__from_string(
- string.as_ptr(),
- string.len().try_into().unwrap(),
- &mut ts as *mut TokenStream,
- )
- } {
+ if unsafe { TokenStream__from_string(string.into(), &mut ts as *mut TokenStream) } {
Err(LexError)
} else {
Ok(ts)