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    ExpandResult::Ready(Box::new(base::MacEager {
22        expr: Some(cx.expr(span, ast::ExprKind::GcaMacro(expr.clone()))),
23        ty: Some(cx.ty(span, ast::TyKind::GcaMacro(expr))),
24        ..Default::default()
25    }))
26}