@@ -48,6 +48,23 @@ impl<'a> ExtCtxt<'a> {
4848 ast:: Path { span, segments, tokens : None }
4949 }
5050
51+ pub fn macro_call (
52+ & self ,
53+ span : Span ,
54+ path : ast:: Path ,
55+ delim : ast:: token:: Delimiter ,
56+ tokens : ast:: tokenstream:: TokenStream ,
57+ ) -> P < ast:: MacCall > {
58+ P ( ast:: MacCall {
59+ path,
60+ args : P ( ast:: DelimArgs {
61+ dspan : ast:: tokenstream:: DelimSpan { open : span, close : span } ,
62+ delim,
63+ tokens,
64+ } ) ,
65+ } )
66+ }
67+
5168 pub fn ty_mt ( & self , ty : P < ast:: Ty > , mutbl : ast:: Mutability ) -> ast:: MutTy {
5269 ast:: MutTy { ty, mutbl }
5370 }
@@ -265,6 +282,10 @@ impl<'a> ExtCtxt<'a> {
265282 self . expr ( span, ast:: ExprKind :: Field ( expr, field) )
266283 }
267284
285+ pub fn expr_macro_call ( & self , span : Span , call : P < ast:: MacCall > ) -> P < ast:: Expr > {
286+ self . expr ( span, ast:: ExprKind :: MacCall ( call) )
287+ }
288+
268289 pub fn expr_binary (
269290 & self ,
270291 sp : Span ,
@@ -410,18 +431,21 @@ impl<'a> ExtCtxt<'a> {
410431 self . expr ( sp, ast:: ExprKind :: Tup ( exprs) )
411432 }
412433
413- pub fn expr_fail ( & self , span : Span , msg : Symbol ) -> P < ast:: Expr > {
414- self . expr_call_global (
434+ pub fn expr_unreachable ( & self , span : Span ) -> P < ast:: Expr > {
435+ self . expr_macro_call (
415436 span,
416- [ sym:: std, sym:: rt, sym:: begin_panic] . iter ( ) . map ( |s| Ident :: new ( * s, span) ) . collect ( ) ,
417- thin_vec ! [ self . expr_str( span, msg) ] ,
437+ self . macro_call (
438+ span,
439+ self . path_global (
440+ span,
441+ [ sym:: std, sym:: unreachable] . map ( |s| Ident :: new ( s, span) ) . to_vec ( ) ,
442+ ) ,
443+ ast:: token:: Delimiter :: Parenthesis ,
444+ ast:: tokenstream:: TokenStream :: default ( ) ,
445+ ) ,
418446 )
419447 }
420448
421- pub fn expr_unreachable ( & self , span : Span ) -> P < ast:: Expr > {
422- self . expr_fail ( span, Symbol :: intern ( "internal error: entered unreachable code" ) )
423- }
424-
425449 pub fn expr_ok ( & self , sp : Span , expr : P < ast:: Expr > ) -> P < ast:: Expr > {
426450 let ok = self . std_path ( & [ sym:: result, sym:: Result , sym:: Ok ] ) ;
427451 self . expr_call_global ( sp, ok, thin_vec ! [ expr] )
0 commit comments