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}