From 294572426b3775a07cb3370b91d9be5547f66905 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Wed, 3 Apr 2019 08:02:56 -0700 Subject: [PATCH] Simplify implementation of join macro --- src/join.rs | 59 ++++++++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/src/join.rs b/src/join.rs index fd45363..25f46f5 100644 --- a/src/join.rs +++ b/src/join.rs @@ -1,5 +1,5 @@ #[doc(hidden)] -#[macro_export(local_inner_macros)] +#[macro_export] macro_rules! join { { $caller:tt @@ -13,41 +13,44 @@ macro_rules! join { { $caller:tt sep = [{ $($sep:tt)* }] - item = [{ $($head:tt)* }] - $( - item = [{ $($tail:tt)* }] - )+ + item = [{ $($first:tt)* }] } => { - $crate::tt_call::tt_call! { - macro = [{ $crate::join }] - sep = [{ $($sep)* }] - $( - item = [{ $($tail)* }] - )+ - ~~> $crate::join! { - $caller - prepend = [{ $($head)* $($sep)* }] - } + $crate::tt_call::tt_return! { + $caller + joined = [{ $($first)* }] } }; { $caller:tt sep = [{ $($sep:tt)* }] - item = [{ $($head:tt)* }] + item = [{ $($first:tt)* }] + item = [{ $($second:tt)* }] + $( + item = [{ $($rest:tt)* }] + )* } => { - $crate::tt_call::tt_return! { + $crate::join! { $caller - joined = [{ $($head)* }] - } - }; - { - $caller:tt - prepend = [{ $($prepend:tt)* }] - joined = [{ $($joined:tt)* }] - } => { - $crate::tt_call::tt_return! { - $caller - joined = [{ $($prepend)* $($joined)* }] + sep = [{ $($sep)* }] + item = [{ $($first)* $($sep)* $($second)* }] + $( + item = [{ $($rest)* }] + )* } }; } + +#[test] +fn test_join() { + use tt_call::*; + + let s = tt_call! { + macro = [{ join }] + sep = [{ .chars().rev().collect::() + "_" + & }] + item = [{ "first " }] + item = [{ "second ".trim() }] + item = [{ "third " }] + }; + + assert_eq!(s, " tsrif_dnoces_third "); +}