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()?
;