8271: Fix fail to parse u128  in proc-macro r=edwin0cheng a=edwin0cheng

fixes #8270

bors r+

Co-authored-by: Edwin Cheng <edwin0cheng@gmail.com>
This commit is contained in:
bors[bot] 2021-03-31 12:08:12 +00:00 committed by GitHub
commit aca9004c7e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -534,8 +534,12 @@ fn suffix(&mut self, _literal: &Self::Literal) -> Option<String> {
}
fn integer(&mut self, n: &str) -> Self::Literal {
let n: i128 = n.parse().unwrap();
Literal { text: n.to_string().into(), id: tt::TokenId::unspecified() }
let n = if let Ok(n) = n.parse::<i128>() {
n.to_string()
} else {
n.parse::<u128>().unwrap().to_string()
};
return Literal { text: n.into(), id: tt::TokenId::unspecified() };
}
fn typed_integer(&mut self, n: &str, kind: &str) -> Self::Literal {
@ -757,6 +761,17 @@ fn test_rustc_server_literals() {
assert_eq!(srv.string("hello_world").text, "\"hello_world\"");
assert_eq!(srv.character('c').text, "'c'");
assert_eq!(srv.byte_string(b"1234586\x88").text, "b\"1234586\\x88\"");
// u128::max
assert_eq!(
srv.integer("340282366920938463463374607431768211455").text,
"340282366920938463463374607431768211455"
);
// i128::min
assert_eq!(
srv.integer("-170141183460469231731687303715884105728").text,
"-170141183460469231731687303715884105728"
);
}
#[test]