remove is_float field of ParsedNumber

This commit is contained in:
ConnorSkees 2020-04-28 15:28:50 -04:00
parent bcbf3f4a90
commit bc09e49c89
4 changed files with 24 additions and 8 deletions

View File

@ -1,4 +1,5 @@
//! A color is internally represented as either RGBA or HSLA. //! A color is internally represented as either RGBA or HSLA.
//!
//! Colors can be constructed in SASS through names (e.g. red, blue, aqua) //! Colors can be constructed in SASS through names (e.g. red, blue, aqua)
//! or the builtin functions `rgb()`, `rgba()`, `hsl()`, and `hsla()`, //! or the builtin functions `rgb()`, `rgba()`, `hsl()`, and `hsla()`,
//! all of which can accept 1-4 arguments. //! all of which can accept 1-4 arguments.

View File

@ -9,12 +9,28 @@ use crate::Token;
#[derive(Debug)] #[derive(Debug)]
pub(crate) struct ParsedNumber { pub(crate) struct ParsedNumber {
/// The full number excluding the decimal
///
/// E.g. for `1.23`, this would be `"123"`
pub num: String, pub num: String,
/// The length of the decimal
///
/// E.g. for `1.23`, this would be `2`
pub dec_len: usize, pub dec_len: usize,
/// The number following e in a scientific notated number
///
/// E.g. for `1e23`, this would be `"23"`,
/// for `1`, this would be an empty string
// TODO: maybe we just return a bigint? // TODO: maybe we just return a bigint?
pub times_ten: String, pub times_ten: String,
/// Whether or not `times_ten` is negative
///
/// E.g. for `1e-23` this would be `true`,
/// for `1e23` this would be `false`
pub times_ten_is_postive: bool, pub times_ten_is_postive: bool,
pub is_float: bool,
} }
impl ParsedNumber { impl ParsedNumber {
@ -23,14 +39,12 @@ impl ParsedNumber {
dec_len: usize, dec_len: usize,
times_ten: String, times_ten: String,
times_ten_is_postive: bool, times_ten_is_postive: bool,
is_float: bool,
) -> Self { ) -> Self {
Self { Self {
num, num,
dec_len, dec_len,
times_ten, times_ten,
times_ten_is_postive, times_ten_is_postive,
is_float,
} }
} }
} }
@ -49,7 +63,7 @@ pub(crate) fn eat_number<I: Iterator<Item = Token>>(
if toks.peek().is_none() { if toks.peek().is_none() {
return Ok(Spanned { return Ok(Spanned {
node: ParsedNumber::new(whole, 0, String::new(), true, false), node: ParsedNumber::new(whole, 0, String::new(), true),
span, span,
}); });
} }
@ -110,7 +124,7 @@ pub(crate) fn eat_number<I: Iterator<Item = Token>>(
whole.push_str(&dec); whole.push_str(&dec);
Ok(Spanned { Ok(Spanned {
node: ParsedNumber::new(whole, dec.len(), times_ten, times_ten_is_postive, is_float), node: ParsedNumber::new(whole, dec.len(), times_ten, times_ten_is_postive),
span, span,
}) })
} }

View File

@ -643,10 +643,10 @@ impl Value {
) )
}; };
let n = if val.is_float { let n = if val.dec_len == 0 {
BigRational::new(val.num.parse().unwrap(), pow(BigInt::from(10), val.dec_len))
} else {
BigRational::new_raw(val.num.parse::<BigInt>().unwrap(), BigInt::one()) BigRational::new_raw(val.num.parse::<BigInt>().unwrap(), BigInt::one())
} else {
BigRational::new(val.num.parse().unwrap(), pow(BigInt::from(10), val.dec_len))
} * if val.times_ten_is_postive { } * if val.times_ten_is_postive {
BigRational::new_raw(times_ten, BigInt::one()) BigRational::new_raw(times_ten, BigInt::one())
} else { } else {

View File

@ -20,6 +20,7 @@ use crate::selector::Selector;
use crate::value::Value; use crate::value::Value;
/// A SASS function /// A SASS function
///
/// See toplevel documentation for more information /// See toplevel documentation for more information
/// ///
/// The function name is stored in addition to the body /// The function name is stored in addition to the body