From 240f3b2a9fda012a50c66e989b6db7f13cfb961d Mon Sep 17 00:00:00 2001 From: Geoffroy Couprie Date: Fri, 3 Jul 2015 17:19:30 +0200 Subject: [PATCH] Fix map! argument handling Fix #58 --- src/macros.rs | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/macros.rs b/src/macros.rs index 135aaad1b..f8976abac 100644 --- a/src/macros.rs +++ b/src/macros.rs @@ -295,6 +295,22 @@ macro_rules! flat_map( /// maps a function on the result of a parser #[macro_export] macro_rules! map( + ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => ( + map_impl!($i, $submac!($($args)*), call!($g)); + ); + ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => ( + map_impl!($i, $submac!($($args)*), $submac2!($($args2)*),); + ); + ($i:expr, $f:expr, $g:expr) => ( + map_impl!($i, call!($f), call!($g)); + ); + ($i:expr, $f:expr, $submac:ident!( $($args:tt)* )) => ( + map_impl!($i, call!($f), $submac!($($args)*)); + ); +); + +#[macro_export] +macro_rules! map_impl( ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => ( { match $submac!($i, $($args)*) { @@ -305,15 +321,6 @@ macro_rules! map( } } ); - ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => ( - map!($i, $submac!($($args)*), call!($g)); - ); - ($i:expr, $f:expr, $g:expr) => ( - map!($i, call!($f), call!($g)); - ); - ($i:expr, $f:expr, $submac:ident!( $($args:tt)* )) => ( - map!($i, call!($f), $submac!($($args)*)); - ); ); /// maps a function returning a Result on the output of a parser