drop num_traits dependency for hex literal parsing
This commit is contained in:
parent
6211888086
commit
f6596b13ec
@ -27,7 +27,6 @@ regex = { version = "1.5.5", optional = true}
|
|||||||
serde = { version = "1.0.133", optional = true}
|
serde = { version = "1.0.133", optional = true}
|
||||||
serde_derive = { version = "1.0.133", optional = true}
|
serde_derive = { version = "1.0.133", optional = true}
|
||||||
rand = { version = "0.8.5", optional = true}
|
rand = { version = "0.8.5", optional = true}
|
||||||
num-traits = "0.2.15"
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
serde_support = ["serde", "serde_derive"]
|
serde_support = ["serde", "serde_derive"]
|
||||||
|
@ -348,7 +348,7 @@ fn partial_tokens_to_tokens(mut tokens: &[PartialToken]) -> EvalexprResult<Vec<T
|
|||||||
},
|
},
|
||||||
PartialToken::Literal(literal) => {
|
PartialToken::Literal(literal) => {
|
||||||
cutoff = 1;
|
cutoff = 1;
|
||||||
if let Ok(number) = literal.parse_dec_or_hex::<IntType>() {
|
if let Ok(number) = parse_dec_or_hex(&literal) {
|
||||||
Some(Token::Int(number))
|
Some(Token::Int(number))
|
||||||
} else if let Ok(number) = literal.parse::<FloatType>() {
|
} else if let Ok(number) = literal.parse::<FloatType>() {
|
||||||
Some(Token::Float(number))
|
Some(Token::Float(number))
|
||||||
@ -442,18 +442,11 @@ pub(crate) fn tokenize(string: &str) -> EvalexprResult<Vec<Token>> {
|
|||||||
partial_tokens_to_tokens(&str_to_partial_tokens(string)?)
|
partial_tokens_to_tokens(&str_to_partial_tokens(string)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Helper trait to parse strings to integer from both decimal or hex
|
fn parse_dec_or_hex(literal: &str) -> Result<IntType, std::num::ParseIntError> {
|
||||||
trait ParseDecOrHex {
|
if literal.starts_with("0x") {
|
||||||
fn parse_dec_or_hex<T: num_traits::Num>(&self) -> Result<T, T::FromStrRadixErr>;
|
IntType::from_str_radix(&literal[2..], 16)
|
||||||
}
|
|
||||||
|
|
||||||
impl ParseDecOrHex for str {
|
|
||||||
fn parse_dec_or_hex<T: num_traits::Num>(&self) -> Result<T, T::FromStrRadixErr> {
|
|
||||||
if self.starts_with("0x") {
|
|
||||||
T::from_str_radix(&self[2..], 16)
|
|
||||||
} else {
|
} else {
|
||||||
T::from_str_radix(&self, 10)
|
IntType::from_str_radix(&literal, 10)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user