Skip to main content

rustc_builtin_macros/
gca.rs

1use rustc_ast::ast;
2use rustc_ast::tokenstream::TokenStream;
3use rustc_expand::base::{self, DummyResult, ExpandResult, ExtCtxt, MacroExpanderResult};
4use rustc_span::Span;
5
6use crate::util::get_single_expr_from_tts;
7
8pub(crate) fn expand<'cx>(
9    cx: &'cx mut ExtCtxt<'_>,
10    span: Span,
11    tts: TokenStream,
12) -> MacroExpanderResult<'cx> {
13    let ExpandResult::Ready(expr) = get_single_expr_from_tts(cx, span, tts, "gca!") else {
14        return ExpandResult::Retry(());
15    };
16    let expr = match expr {
17        Ok(expr) => expr,
18        Err(err) => return ExpandResult::Ready(DummyResult::any(span, err)),
19    };
20
21    let id = ast::DUMMY_NODE_ID;
22    ExpandResult::Ready(Box::new(base::MacEager {
23        expr: Some(Box::new(ast::Expr {
24            id,
25            kind: ast::ExprKind::GcaMacro(expr.clone()),
26            span,
27            attrs: Default::default(),
28            tokens: None,
29        })),
30        ty: Some(Box::new(ast::Ty { id, kind: ast::TyKind::GcaMacro(expr), span })),
31        ..Default::default()
32    }))
33}