diff --git a/src/lib.rs b/src/lib.rs index 82f0815..983ba06 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -164,8 +164,18 @@ use std::panic; pub fn paste(input: TokenStream) -> TokenStream { let mut contains_paste = false; let flatten_single_interpolation = true; - match expand(input, &mut contains_paste, flatten_single_interpolation) { - Ok(expanded) => expanded, + match expand( + input.clone(), + &mut contains_paste, + flatten_single_interpolation, + ) { + Ok(expanded) => { + if contains_paste { + expanded + } else { + input + } + } Err(err) => err.to_compile_error(), } } diff --git a/tests/test_expr.rs b/tests/test_expr.rs index 3d3b977..8ad5de9 100644 --- a/tests/test_expr.rs +++ b/tests/test_expr.rs @@ -247,3 +247,26 @@ mod test_local_setter { assert_eq!(a.val, 42); } } + +// https://github.com/dtolnay/paste/issues/85 +#[test] +fn test_top_level_none_delimiter() { + macro_rules! clone { + ($val:expr) => { + paste! { + $val.clone() + } + }; + } + + #[derive(Clone)] + struct A; + + impl A { + fn consume_self(self) { + let _ = self; + } + } + + clone!(&A).consume_self(); +}