diff --git a/mono-fmt-macro/src/lib.rs b/mono-fmt-macro/src/lib.rs index 849f7a2..2ba2dc1 100644 --- a/mono-fmt-macro/src/lib.rs +++ b/mono-fmt-macro/src/lib.rs @@ -53,7 +53,7 @@ impl Parse for Input { enum FmtPart { Literal(Ident, String), - Spec(Ident, FmtSpec, Expr), + Spec(Ident, FmtSpec, Box), } impl std::fmt::Debug for FmtPart { @@ -101,7 +101,7 @@ where let argument = self.fmt_spec()?; let expr = self.expect_expr(); self.fmt_parts - .push(FmtPart::Spec(self.crate_ident.clone(), argument, expr)); + .push(FmtPart::Spec(self.crate_ident.clone(), argument, Box::new(expr))); } other => { next_string.push(other); @@ -230,6 +230,11 @@ mod tests { syn::parse_str("1").unwrap() } + + fn fake_expr_box() -> Box { + Box::new(syn::parse_str("1").unwrap()) + } + fn fake_exprs(count: usize) -> Vec { vec![fake_expr(); count] } @@ -258,7 +263,7 @@ mod tests { FmtSpec { ..FmtSpec::default() }, - fake_expr() + fake_expr_box() )] ); } @@ -274,7 +279,7 @@ mod tests { kind: FmtType::Debug, ..FmtSpec::default() }, - fake_expr() + fake_expr_box() )] ); } @@ -295,7 +300,7 @@ mod tests { kind: FmtType::Debug, ..FmtSpec::default() }, - fake_expr() + fake_expr_box() )] ); } diff --git a/mono-fmt-macro/src/parser.rs b/mono-fmt-macro/src/parser.rs index cf0638f..f507d45 100644 --- a/mono-fmt-macro/src/parser.rs +++ b/mono-fmt-macro/src/parser.rs @@ -15,7 +15,7 @@ impl Error { pub type Result = std::result::Result; -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub enum Alignment { Left, Center, @@ -33,13 +33,13 @@ impl Alignment { } } -#[derive(Debug, Clone, Copy, PartialEq)] +#[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct Align { pub kind: Alignment, pub fill: Option, } -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq, Eq, Default)] pub enum Argument { #[default] Positional, @@ -47,7 +47,7 @@ pub enum Argument { Keyword(String), } -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq, Eq, Default)] pub enum FmtType { #[default] Default, @@ -57,13 +57,13 @@ pub enum FmtType { Other(String), } -#[derive(Debug, PartialEq)] +#[derive(Debug, PartialEq, Eq)] pub enum Precision { Num(usize), Asterisk, } -#[derive(Debug, PartialEq, Default)] +#[derive(Debug, PartialEq, Eq, Default)] pub struct FmtSpec { pub arg: Argument, pub align: Option, diff --git a/src/std_impl/mod.rs b/src/std_impl/mod.rs index 0e012aa..2890fb9 100644 --- a/src/std_impl/mod.rs +++ b/src/std_impl/mod.rs @@ -32,12 +32,10 @@ mod numfmt { } else { 3 } + } else if v < 10_000 { + 4 } else { - if v < 10_000 { - 4 - } else { - 5 - } + 5 } } Part::Copy(buf) => buf.len(), @@ -223,15 +221,15 @@ impl Formatter { // remaining parts go through the ordinary padding process. let len = formatted.len(); - let ret = if width <= len { + + if width <= len { // no padding self.write_formatted_parts(&formatted) } else { let post_padding = self.padding(width - len, the_align, the_fill, the_align)?; self.write_formatted_parts(&formatted)?; post_padding.write(self) - }; - ret + } } else { // this is the common case and we take a shortcut self.write_formatted_parts(formatted) diff --git a/src/std_impl/num.rs b/src/std_impl/num.rs index 3bd1ad7..7a75838 100644 --- a/src/std_impl/num.rs +++ b/src/std_impl/num.rs @@ -502,7 +502,7 @@ fn parse_u64_into(mut n: u64, buf: &mut [MaybeUninit; N], cu *curr -= 16; - ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr + 0), 2); + ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d2 as isize), buf_ptr.offset(*curr + 2), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d3 as isize), buf_ptr.offset(*curr + 4), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d4 as isize), buf_ptr.offset(*curr + 6), 2); @@ -522,7 +522,7 @@ fn parse_u64_into(mut n: u64, buf: &mut [MaybeUninit; N], cu let d4 = ((to_parse / 1e0 as u64) % 100) << 1; *curr -= 8; - ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr + 0), 2); + ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d2 as isize), buf_ptr.offset(*curr + 2), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d3 as isize), buf_ptr.offset(*curr + 4), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d4 as isize), buf_ptr.offset(*curr + 6), 2); @@ -537,7 +537,7 @@ fn parse_u64_into(mut n: u64, buf: &mut [MaybeUninit; N], cu let d2 = (to_parse % 100) << 1; *curr -= 4; - ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr + 0), 2); + ptr::copy_nonoverlapping(lut_ptr.offset(d1 as isize), buf_ptr.offset(*curr), 2); ptr::copy_nonoverlapping(lut_ptr.offset(d2 as isize), buf_ptr.offset(*curr + 2), 2); }