Auto merge of #24792 - alexcrichton:issue-24748, r=alexcrichton

Ensures that the same error type is propagated throughout. Unnecessary leakage
of the internals is prevented through the usage of stability attributes.

Closes #24748
This commit is contained in:
bors
2015-05-02 01:03:43 +00:00
6 changed files with 22 additions and 47 deletions

View File

@@ -35,8 +35,8 @@ macro_rules! from_str_radix_float_impl {
}
let (is_positive, src) = match src.slice_shift_char() {
None => return Err(PFE { kind: Empty }),
Some(('-', "")) => return Err(PFE { kind: Empty }),
None => return Err(PFE { __kind: Empty }),
Some(('-', "")) => return Err(PFE { __kind: Empty }),
Some(('-', src)) => (false, src),
Some((_, _)) => (true, src),
};
@@ -88,7 +88,7 @@ macro_rules! from_str_radix_float_impl {
break; // start of fractional part
},
_ => {
return Err(PFE { kind: Invalid });
return Err(PFE { __kind: Invalid });
},
},
}
@@ -122,7 +122,7 @@ macro_rules! from_str_radix_float_impl {
break; // start of exponent
},
_ => {
return Err(PFE { kind: Invalid });
return Err(PFE { __kind: Invalid });
},
},
}
@@ -135,7 +135,7 @@ macro_rules! from_str_radix_float_impl {
let base = match c {
'E' | 'e' if radix == 10 => 10.0,
'P' | 'p' if radix == 16 => 2.0,
_ => return Err(PFE { kind: Invalid }),
_ => return Err(PFE { __kind: Invalid }),
};
// Parse the exponent as decimal integer
@@ -144,13 +144,13 @@ macro_rules! from_str_radix_float_impl {
Some(('-', src)) => (false, src.parse::<usize>()),
Some(('+', src)) => (true, src.parse::<usize>()),
Some((_, _)) => (true, src.parse::<usize>()),
None => return Err(PFE { kind: Invalid }),
None => return Err(PFE { __kind: Invalid }),
};
match (is_positive, exp) {
(true, Ok(exp)) => base.powi(exp as i32),
(false, Ok(exp)) => 1.0 / base.powi(exp as i32),
(_, Err(_)) => return Err(PFE { kind: Invalid }),
(_, Err(_)) => return Err(PFE { __kind: Invalid }),
}
},
None => 1.0, // no exponent

View File

@@ -1524,7 +1524,11 @@ impl fmt::Display for ParseIntError {
/// An error which can be returned when parsing a float.
#[derive(Debug, Clone, PartialEq)]
pub struct ParseFloatError { pub kind: FloatErrorKind }
#[stable(feature = "rust1", since = "1.0.0")]
pub struct ParseFloatError {
#[doc(hidden)]
pub __kind: FloatErrorKind
}
#[derive(Debug, Clone, PartialEq)]
pub enum FloatErrorKind {
@@ -1533,9 +1537,9 @@ pub enum FloatErrorKind {
}
impl ParseFloatError {
#[unstable(feature = "core", reason = "available through Error trait")]
pub fn description(&self) -> &str {
match self.kind {
#[doc(hidden)]
pub fn __description(&self) -> &str {
match self.__kind {
FloatErrorKind::Empty => "cannot parse float from empty string",
FloatErrorKind::Invalid => "invalid float literal",
}
@@ -1545,6 +1549,6 @@ impl ParseFloatError {
#[stable(feature = "rust1", since = "1.0.0")]
impl fmt::Display for ParseFloatError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
self.description().fmt(f)
self.__description().fmt(f)
}
}