about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEthan Brierley <ethanboxx@gmail.com>2020-10-06 19:05:25 +0100
committerEthan Brierley <ethanboxx@gmail.com>2020-10-06 19:05:25 +0100
commit83d294f06a8f78f4956333a5285bb2c4f7b8a6a9 (patch)
treef704a3faec6d3c397256d7919cf964575d545306
parentc027844795e427e63ef917ba40c71d0559d88b79 (diff)
downloadrust-83d294f06a8f78f4956333a5285bb2c4f7b8a6a9.tar.gz
rust-83d294f06a8f78f4956333a5285bb2c4f7b8a6a9.zip
Bring char along with InvalidDigit
-rw-r--r--compiler/rustc_middle/src/middle/limits.rs2
-rw-r--r--library/core/src/num/error.rs6
-rw-r--r--library/core/src/num/mod.rs4
-rw-r--r--library/core/tests/nonzero.rs2
-rw-r--r--library/core/tests/num/mod.rs10
5 files changed, 12 insertions, 12 deletions
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<T: FromStrRadixHelper>(src: &str, radix: u32) -> Result<T, Par
         for &c in digits {
             let x = match (c as char).to_digit(radix) {
                 Some(x) => 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<T: FromStrRadixHelper>(src: &str, radix: u32) -> Result<T, Par
         for &c in digits {
             let x = match (c as char).to_digit(radix) {
                 Some(x) => 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::<NonZeroU8>().err().map(|e| e.kind().clone()), Some(IntErrorKind::Zero));
     assert_eq!(
         "-1".parse::<NonZeroU8>().err().map(|e| e.kind().clone()),
-        Some(IntErrorKind::InvalidDigit)
+        Some(IntErrorKind::InvalidDigit('-'))
     );
     assert_eq!(
         "-129".parse::<NonZeroI8>().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::<i8>("--129", Err(IntErrorKind::InvalidDigit));
-    test_parse::<i8>("++129", Err(IntErrorKind::InvalidDigit));
-    test_parse::<u8>("Съешь", Err(IntErrorKind::InvalidDigit));
-    // is this the correct error here. Maybe need a reapeat sign error here
-    test_parse::<i8>("--", Err(IntErrorKind::InvalidDigit));
+    test_parse::<i8>("--129", Err(IntErrorKind::InvalidDigit('-')));
+    test_parse::<i8>("++129", Err(IntErrorKind::InvalidDigit('+')));
+    test_parse::<u8>("Съешь", Err(IntErrorKind::InvalidDigit('Ð')));
+    test_parse::<u8>("123Hello", Err(IntErrorKind::InvalidDigit('H')));
+    test_parse::<i8>("--", Err(IntErrorKind::InvalidDigit('-')));
 }
 
 #[test]