diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core.rs | 50 | 
1 files changed, 27 insertions, 23 deletions
| diff --git a/src/core.rs b/src/core.rs index 3afddb5..9758830 100644 --- a/src/core.rs +++ b/src/core.rs @@ -342,8 +342,14 @@ impl<'i, S, A: Display> Expr<'i, S, A> {                  write!(f, ") → ")?;                  d.fmt_b(f)              } -            &ListLit(_, _) => f.write_str("ListLit"), -            &OptionalLit(_, _) => f.write_str("OptionalLit"), +            &ListLit(ref t, ref es) => { +                fmt_list("[", "] : List ", es, f, |e, f| e.fmt(f))?; +                t.fmt_e(f) +            } +            &OptionalLit(ref t, ref es) => { +                fmt_list("[", "] : Optional ", es, f, |e, f| e.fmt(f))?; +                t.fmt_e(f) +            }              &Merge(ref a, ref b, ref c) => {                  write!(f, "merge ")?;                  a.fmt_e(f)?; @@ -388,27 +394,6 @@ impl<'i, S, A: Display> Expr<'i, S, A> {      fn fmt_f(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {          use Expr::*; -        fn fmt_list<T, -                    I: IntoIterator<Item = T>, -                    F: Fn(T, &mut fmt::Formatter) -> Result<(), fmt::Error>> -            (open: &str, -             close: &str, -             it: I, -             f: &mut fmt::Formatter, -             func: F) -             -> Result<(), fmt::Error> -            where I: IntoIterator<Item = T>, -                  F: Fn(T, &mut fmt::Formatter) -> Result<(), fmt::Error> -        { -            f.write_str(open)?; -            for (i, x) in it.into_iter().enumerate() { -                if i > 0 { -                    f.write_str(", ")?; -                } -                func(x, f)?; -            } -            f.write_str(close) -        }          match self {              &Var(a) => a.fmt(f),              &Const(k) => k.fmt(f), @@ -440,6 +425,25 @@ impl<'i, S, A: Display> Expr<'i, S, A> {      }  } +fn fmt_list<T, I, F>(open: &str, +                     close: &str, +                     it: I, +                     f: &mut fmt::Formatter, +                     func: F) +                     -> Result<(), fmt::Error> +    where I: IntoIterator<Item = T>, +          F: Fn(T, &mut fmt::Formatter) -> Result<(), fmt::Error> +{ +    f.write_str(open)?; +    for (i, x) in it.into_iter().enumerate() { +        if i > 0 { +            f.write_str(", ")?; +        } +        func(x, f)?; +    } +    f.write_str(close) +} +  impl Display for Const {      fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {          <Self as fmt::Debug>::fmt(self, f) | 
