Skip to main content

## 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.