[breaking-change] remove the sign from integer literals in the ast
This commit is contained in:
parent
625e78b700
commit
bfa66bb389
10 changed files with 55 additions and 82 deletions
|
@ -586,7 +586,7 @@ pub fn integer_lit(s: &str,
|
|||
|
||||
let mut base = 10;
|
||||
let orig = s;
|
||||
let mut ty = ast::UnsuffixedIntLit(ast::Plus);
|
||||
let mut ty = ast::UnsuffixedIntLit;
|
||||
|
||||
if char_at(s, 0) == '0' && s.len() > 1 {
|
||||
match char_at(s, 1) {
|
||||
|
@ -618,11 +618,11 @@ pub fn integer_lit(s: &str,
|
|||
if let Some(ref suf) = suffix {
|
||||
if suf.is_empty() { sd.span_bug(sp, "found empty literal suffix in Some")}
|
||||
ty = match &**suf {
|
||||
"isize" => ast::SignedIntLit(ast::IntTy::Is, ast::Plus),
|
||||
"i8" => ast::SignedIntLit(ast::IntTy::I8, ast::Plus),
|
||||
"i16" => ast::SignedIntLit(ast::IntTy::I16, ast::Plus),
|
||||
"i32" => ast::SignedIntLit(ast::IntTy::I32, ast::Plus),
|
||||
"i64" => ast::SignedIntLit(ast::IntTy::I64, ast::Plus),
|
||||
"isize" => ast::SignedIntLit(ast::IntTy::Is),
|
||||
"i8" => ast::SignedIntLit(ast::IntTy::I8),
|
||||
"i16" => ast::SignedIntLit(ast::IntTy::I16),
|
||||
"i32" => ast::SignedIntLit(ast::IntTy::I32),
|
||||
"i64" => ast::SignedIntLit(ast::IntTy::I64),
|
||||
"usize" => ast::UnsignedIntLit(ast::UintTy::Us),
|
||||
"u8" => ast::UnsignedIntLit(ast::UintTy::U8),
|
||||
"u16" => ast::UnsignedIntLit(ast::UintTy::U16),
|
||||
|
@ -651,9 +651,9 @@ pub fn integer_lit(s: &str,
|
|||
debug!("integer_lit: the type is {:?}, base {:?}, the new string is {:?}, the original \
|
||||
string was {:?}, the original suffix was {:?}", ty, base, s, orig, suffix);
|
||||
|
||||
let res = match u64::from_str_radix(s, base).ok() {
|
||||
Some(r) => r,
|
||||
None => {
|
||||
match u64::from_str_radix(s, base) {
|
||||
Ok(r) => ast::LitInt(r, ty),
|
||||
Err(_) => {
|
||||
// small bases are lexed as if they were base 10, e.g, the string
|
||||
// might be `0b10201`. This will cause the conversion above to fail,
|
||||
// but these cases have errors in the lexer: we don't want to emit
|
||||
|
@ -665,16 +665,8 @@ pub fn integer_lit(s: &str,
|
|||
if !already_errored {
|
||||
sd.span_err(sp, "int literal is too large");
|
||||
}
|
||||
0
|
||||
ast::LitInt(0, ty)
|
||||
}
|
||||
};
|
||||
|
||||
// adjust the sign
|
||||
let sign = ast::Sign::new(res);
|
||||
match ty {
|
||||
ast::SignedIntLit(t, _) => ast::LitInt(res, ast::SignedIntLit(t, sign)),
|
||||
ast::UnsuffixedIntLit(_) => ast::LitInt(res, ast::UnsuffixedIntLit(sign)),
|
||||
us@ast::UnsignedIntLit(_) => ast::LitInt(res, us)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue