diff --git a/compiler/rustc_middle/src/middle/limits.rs b/compiler/rustc_middle/src/middle/limits.rs index 6b6df3a303c..f03f439f73b 100644 --- a/compiler/rustc_middle/src/middle/limits.rs +++ b/compiler/rustc_middle/src/middle/limits.rs @@ -52,7 +52,7 @@ fn update_limit( IntErrorKind::Empty | IntErrorKind::OnlySign => { "`limit` must be a non-negative integer" } - IntErrorKind::InvalidDigit => "not a valid integer", + IntErrorKind::InvalidDigit(_) => "not a valid integer", IntErrorKind::NegOverflow => bug!("`limit` should never underflow"), IntErrorKind::Zero => bug!("zero is a valid `limit`"), kind => bug!("unimplemented IntErrorKind variant: {:?}", kind), diff --git a/library/core/src/num/error.rs b/library/core/src/num/error.rs index 9705226ba24..ba7c94656ce 100644 --- a/library/core/src/num/error.rs +++ b/library/core/src/num/error.rs @@ -92,12 +92,12 @@ pub enum IntErrorKind { /// Among other causes, this variant will be constructed when parsing an empty string. #[stable(feature = "int_error_matching", since = "1.47.0")] Empty, - /// Contains an invalid digit. + /// Contains an digit invalid in its context. /// /// Among other causes, this variant will be constructed when parsing a string that /// contains a letter. #[stable(feature = "int_error_matching", since = "1.47.0")] - InvalidDigit, + InvalidDigit(#[stable(feature = "int_error_matching", since = "1.47.0")] char), /// Integer is too large to store in target integer type. #[stable(feature = "int_error_matching", since = "1.47.0")] PosOverflow, @@ -131,7 +131,7 @@ impl ParseIntError { pub fn __description(&self) -> &str { match self.kind { IntErrorKind::Empty => "cannot parse integer from empty string", - IntErrorKind::InvalidDigit => "invalid digit found in string", + IntErrorKind::InvalidDigit(_) => "invalid digit found in string", IntErrorKind::PosOverflow => "number too large to fit in target type", IntErrorKind::NegOverflow => "number too small to fit in target type", IntErrorKind::Zero => "number would be zero for non-zero type", diff --git a/library/core/src/num/mod.rs b/library/core/src/num/mod.rs index 67b4b885dd2..a438f3161a3 100644 --- a/library/core/src/num/mod.rs +++ b/library/core/src/num/mod.rs @@ -845,7 +845,7 @@ fn from_str_radix(src: &str, radix: u32) -> Result x, - None => return Err(PIE { kind: InvalidDigit }), + None => return Err(PIE { kind: InvalidDigit(c as char) }), }; result = match result.checked_mul(radix) { Some(result) => result, @@ -861,7 +861,7 @@ fn from_str_radix(src: &str, radix: u32) -> Result x, - None => return Err(PIE { kind: InvalidDigit }), + None => return Err(PIE { kind: InvalidDigit(c as char) }), }; result = match result.checked_mul(radix) { Some(result) => result, diff --git a/library/core/tests/nonzero.rs b/library/core/tests/nonzero.rs index fb1293c99bb..949d4ea32f0 100644 --- a/library/core/tests/nonzero.rs +++ b/library/core/tests/nonzero.rs @@ -131,7 +131,7 @@ fn test_from_str() { assert_eq!("0".parse::().err().map(|e| e.kind().clone()), Some(IntErrorKind::Zero)); assert_eq!( "-1".parse::().err().map(|e| e.kind().clone()), - Some(IntErrorKind::InvalidDigit) + Some(IntErrorKind::InvalidDigit('-')) ); assert_eq!( "-129".parse::().err().map(|e| e.kind().clone()), diff --git a/library/core/tests/num/mod.rs b/library/core/tests/num/mod.rs index d6f92f25e78..a93cd38160b 100644 --- a/library/core/tests/num/mod.rs +++ b/library/core/tests/num/mod.rs @@ -117,11 +117,11 @@ fn test_leading_plus() { #[test] fn test_invalid() { - test_parse::("--129", Err(IntErrorKind::InvalidDigit)); - test_parse::("++129", Err(IntErrorKind::InvalidDigit)); - test_parse::("Съешь", Err(IntErrorKind::InvalidDigit)); - // is this the correct error here. Maybe need a reapeat sign error here - test_parse::("--", Err(IntErrorKind::InvalidDigit)); + test_parse::("--129", Err(IntErrorKind::InvalidDigit('-'))); + test_parse::("++129", Err(IntErrorKind::InvalidDigit('+'))); + test_parse::("Съешь", Err(IntErrorKind::InvalidDigit('Ð'))); + test_parse::("123Hello", Err(IntErrorKind::InvalidDigit('H'))); + test_parse::("--", Err(IntErrorKind::InvalidDigit('-'))); } #[test]