//! Simulates unhygienic macro to make parser's code cleaner.
//! It lives here because it's not a generic purpose macro (at all).
//!
//! This can't be implemented with macro_rule! because
//! rust does not support token munching (destructing `$b:block` into `{
//! $($t:tt)* }`).
extern crate proc_macro;
use ToTokensExt;
use TokenStream;
use *;
use syn;
/// This attribute macro injects first argument of function (typically `self`)
/// to all **known** macros invocation in a function.