diff --git a/crates/sol-type-parser/src/error.rs b/crates/sol-type-parser/src/error.rs index b4ca646e6..3812fd0b9 100644 --- a/crates/sol-type-parser/src/error.rs +++ b/crates/sol-type-parser/src/error.rs @@ -1,4 +1,4 @@ -use alloc::boxed::Box; +use alloc::{boxed::Box, string::String}; use core::fmt; /// Parser result @@ -59,12 +59,13 @@ impl Error { #[inline(never)] #[cold] pub fn _new(s: &str, e: &dyn fmt::Display) -> Self { - Self(Repr(format!("{s}{e}").into_boxed_str())) + Self(Repr(Box::new(format!("{s}{e}")))) } } #[derive(Clone, PartialEq, Eq)] -struct Repr(Box); +#[allow(clippy::box_collection)] // `Box` is smaller than `String` or `Box`. +struct Repr(Box); impl fmt::Display for Repr { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { diff --git a/crates/sol-type-parser/src/input.rs b/crates/sol-type-parser/src/input.rs index d15bbdaf2..475304d6e 100644 --- a/crates/sol-type-parser/src/input.rs +++ b/crates/sol-type-parser/src/input.rs @@ -3,14 +3,10 @@ // Recursion implementation modified from `toml`: https://github.com/toml-rs/toml/blob/a02cbf46cab4a8683e641efdba648a31498f7342/crates/toml_edit/src/parser/mod.rs#L99 use core::fmt; -use winnow::{ - error::{ContextError, FromExternalError}, - Parser, -}; +use winnow::{error::ContextError, Parser}; -#[allow(dead_code)] #[derive(Clone, Debug, PartialEq, Eq)] -enum CustomError { +pub enum CustomError { RecursionLimitExceeded, } @@ -35,9 +31,16 @@ pub fn check_recursion<'a, O>( mut parser: impl Parser, O, ContextError>, ) -> impl Parser, O, ContextError> { move |input: &mut Input<'a>| { - input.state.enter().map_err(|err| { - winnow::error::ErrMode::from_external_error(input, winnow::error::ErrorKind::Eof, err) - .cut() + input.state.enter().map_err(|_err| { + // TODO: Very weird bug with features: https://github.com/alloy-rs/core/issues/717 + // use winnow::error::FromExternalError; + // let err = winnow::error::ContextError::from_external_error( + // input, + // winnow::error::ErrorKind::Eof, + // _err, + // ); + let err = winnow::error::ContextError::new(); + winnow::error::ErrMode::Cut(err) })?; let result = parser.parse_next(input); input.state.exit();