Вызвать макрос внутри / перед другим макросом - PullRequest
4 голосов
/ 25 апреля 2020

Я создал функциональный процедурный макрос. Я называю это декларативным макросом в качестве параметра. Я надеялся найти способ расширения декларативного макроса перед обработкой процедурного макроса (или развернуть его внутри процедурного макроса). Пример (код также доступен на https://github.com/Jasperav/rec_macro):

Звоните на сайт:

macro_rules! t {
    ($e:expr) => {
        $e.to_string() + " I am a macro"
    }
}

fn main() {
    re!(t!("hi"));
}

Pro c ящик для макросов:

#[proc_macro_hack]
pub fn re(input: TokenStream) -> TokenStream {
    panic!("{:#?}", input) // I can see "hi" and something like t!, but not the result of the macro expansion
}

Внутри сообщения panic я вижу, что декларативный макрос (t) находится внутри. Я просто хочу необработанное значение hi I am a macro в этом случае (или некоторый тип syn). В моем случае декларативный макрос всегда должен расширяться до &str или String.

Можно ли расширить t перед вызовом re или расширить t вручную внутри программы? c макрос? Я хочу увидеть результат макроса (в данном случае: «Привет, я макрос») внутри моего про c функционала, похожего на макрос.

Спасибо.

...