rustc_builtin_macros/
trace_macros.rs

1use rustc_ast::tokenstream::{TokenStream, TokenTree};
2use rustc_expand::base::{DummyResult, ExpandResult, ExtCtxt, MacroExpanderResult};
3use rustc_span::{Span, kw};
4
5use crate::errors;
6
7pub(crate) fn expand_trace_macros(
8    cx: &mut ExtCtxt<'_>,
9    sp: Span,
10    tt: TokenStream,
11) -> MacroExpanderResult<'static> {
12    let mut iter = tt.iter();
13    let mut err = false;
14    let value = match iter.next() {
15        Some(TokenTree::Token(token, _)) if token.is_keyword(kw::True) => true,
16        Some(TokenTree::Token(token, _)) if token.is_keyword(kw::False) => false,
17        _ => {
18            err = true;
19            false
20        }
21    };
22    err |= iter.next().is_some();
23    if err {
24        cx.dcx().emit_err(errors::TraceMacros { span: sp });
25    } else {
26        cx.set_trace_macros(value);
27    }
28
29    ExpandResult::Ready(DummyResult::any_valid(sp))
30}