rustc_expand::mbe::transcribe

Function transcribe

source
pub(super) fn transcribe<'a>(
    psess: &'a ParseSess,
    interp: &FxHashMap<MacroRulesNormalizedIdent, NamedMatch>,
    src: &Delimited,
    src_span: DelimSpan,
    transparency: Transparency,
    expand_id: LocalExpnId,
) -> PResult<'a, TokenStream>
Expand description

This can do Macro-By-Example transcription.

  • interp is a map of meta-variables to the tokens (non-terminals) they matched in the invocation. We are assuming we already know there is a match.
  • src is the RHS of the MBE, that is, the “example” we are filling in.

For example,

macro_rules! foo {
    ($id:ident) => { println!("{}", stringify!($id)); }
}

foo!(bar);

interp would contain $id => bar and src would contain println!("{}", stringify!($id));.

transcribe would return a TokenStream containing println!("{}", stringify!(bar));.

Along the way, we do some additional error checking.