Skip to content

Commit d868f01

Browse files
committed
Remove null-terminator from rcc tokens
1 parent 1d098b1 commit d868f01

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/clang.rs

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -697,7 +697,7 @@ impl Cursor {
697697

698698
/// Gets the tokens that correspond to that cursor as `rcc` tokens.
699699
pub fn rcc_tokens<'a>(self) -> Vec<rcc::Locatable<rcc::Token>> {
700-
use rcc::{Files, Lexer};
700+
use rcc::{Literal, Token, Files, Lexer};
701701

702702
self.tokens()
703703
.iter()
@@ -713,7 +713,13 @@ impl Cursor {
713713
let mut files = Files::new();
714714
let id = files.add("", "".into());
715715
let mut lexer = Lexer::new(id, spelling, false);
716-
Some(lexer.next().unwrap().expect("rcc failed to parse clang token"))
716+
let mut token = lexer.next().unwrap().expect("rcc failed to parse clang token");
717+
// rcc generates null-terminated string immediately,
718+
// but bindgen only adds the null-terminator during codegen.
719+
if let Token::Literal(Literal::Str(ref mut string)) = &mut token.data {
720+
assert_eq!(string.pop(), Some(b'\0'));
721+
}
722+
Some(token)
717723
}
718724
_ => {
719725
error!("Found unexpected token kind: {:?}", token);

0 commit comments

Comments
 (0)