2 use rustc_ast::tokenstream::TokenStream;
3 use rustc_ast::{token, Expr, ExprKind, Ty};
4 use rustc_errors::PResult;
5 use rustc_expand::base::{self, DummyResult, ExtCtxt, MacEager};
8 pub fn expand_type_ascribe(
12 ) -> Box<dyn base::MacResult + 'static> {
13 let (expr, ty) = match parse_ascribe(cx, tts) {
17 return DummyResult::any(span);
21 let asc_expr = cx.expr(span, ExprKind::Type(expr, ty));
23 return MacEager::expr(asc_expr);
26 fn parse_ascribe<'a>(cx: &mut ExtCtxt<'a>, stream: TokenStream) -> PResult<'a, (P<Expr>, P<Ty>)> {
27 let mut parser = cx.new_parser_from_tts(stream);
29 let expr = parser.parse_expr()?;
30 parser.expect(&token::Comma)?;
32 let ty = parser.parse_ty()?;