@@ -612,16 +612,20 @@ fn mk_delim(cx: &ExtCtxt, sp: Span, delim: token::DelimToken) -> P<ast::Expr> {
612612#[ allow( non_upper_case_globals) ]
613613fn expr_mk_token ( cx : & ExtCtxt , sp : Span , tok : & token:: Token ) -> P < ast:: Expr > {
614614 macro_rules! mk_lit {
615- ( $name: expr, $suffix: expr, $( $args: expr) ,* ) => { {
616- let inner = cx. expr_call( sp, mk_token_path( cx, sp, $name) , vec![ $( $args) ,* ] ) ;
615+ ( $name: expr, $suffix: expr, $content: expr $( , $count: expr) * ) => { {
616+ let name = mk_name( cx, sp, ast:: Ident :: with_empty_ctxt( $content) ) ;
617+ let inner = cx. expr_call( sp, mk_token_path( cx, sp, $name) , vec![
618+ name $( , cx. expr_usize( sp, $count) ) *
619+ ] ) ;
617620 let suffix = match $suffix {
618621 Some ( name) => cx. expr_some( sp, mk_name( cx, sp, ast:: Ident :: with_empty_ctxt( name) ) ) ,
619622 None => cx. expr_none( sp)
620623 } ;
621624 cx. expr_call( sp, mk_token_path( cx, sp, "Literal" ) , vec![ inner, suffix] )
622625 } }
623626 }
624- match * tok {
627+
628+ let name = match * tok {
625629 token:: BinOp ( binop) => {
626630 return cx. expr_call ( sp, mk_token_path ( cx, sp, "BinOp" ) , vec ! [ mk_binop( cx, sp, binop) ] ) ;
627631 }
@@ -639,34 +643,14 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
639643 vec ! [ mk_delim( cx, sp, delim) ] ) ;
640644 }
641645
642- token:: Literal ( token:: Byte ( i) , suf) => {
643- let e_byte = mk_name ( cx, sp, ast:: Ident :: with_empty_ctxt ( i) ) ;
644- return mk_lit ! ( "Byte" , suf, e_byte) ;
645- }
646-
647- token:: Literal ( token:: Char ( i) , suf) => {
648- let e_char = mk_name ( cx, sp, ast:: Ident :: with_empty_ctxt ( i) ) ;
649- return mk_lit ! ( "Char" , suf, e_char) ;
650- }
651-
652- token:: Literal ( token:: Integer ( i) , suf) => {
653- let e_int = mk_name ( cx, sp, ast:: Ident :: with_empty_ctxt ( i) ) ;
654- return mk_lit ! ( "Integer" , suf, e_int) ;
655- }
656-
657- token:: Literal ( token:: Float ( fident) , suf) => {
658- let e_fident = mk_name ( cx, sp, ast:: Ident :: with_empty_ctxt ( fident) ) ;
659- return mk_lit ! ( "Float" , suf, e_fident) ;
660- }
661-
662- token:: Literal ( token:: Str_ ( ident) , suf) => {
663- return mk_lit ! ( "Str_" , suf, mk_name( cx, sp, ast:: Ident :: with_empty_ctxt( ident) ) )
664- }
665-
666- token:: Literal ( token:: StrRaw ( ident, n) , suf) => {
667- return mk_lit ! ( "StrRaw" , suf, mk_name( cx, sp, ast:: Ident :: with_empty_ctxt( ident) ) ,
668- cx. expr_usize( sp, n) )
669- }
646+ token:: Literal ( token:: Byte ( i) , suf) => return mk_lit ! ( "Byte" , suf, i) ,
647+ token:: Literal ( token:: Char ( i) , suf) => return mk_lit ! ( "Char" , suf, i) ,
648+ token:: Literal ( token:: Integer ( i) , suf) => return mk_lit ! ( "Integer" , suf, i) ,
649+ token:: Literal ( token:: Float ( i) , suf) => return mk_lit ! ( "Float" , suf, i) ,
650+ token:: Literal ( token:: Str_ ( i) , suf) => return mk_lit ! ( "Str_" , suf, i) ,
651+ token:: Literal ( token:: StrRaw ( i, n) , suf) => return mk_lit ! ( "StrRaw" , suf, i, n) ,
652+ token:: Literal ( token:: ByteStr ( i) , suf) => return mk_lit ! ( "ByteStr" , suf, i) ,
653+ token:: Literal ( token:: ByteStrRaw ( i, n) , suf) => return mk_lit ! ( "ByteStrRaw" , suf, i, n) ,
670654
671655 token:: Ident ( ident) => {
672656 return cx. expr_call ( sp,
@@ -688,10 +672,6 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
688672
689673 token:: Interpolated ( _) => panic ! ( "quote! with interpolated token" ) ,
690674
691- _ => ( )
692- }
693-
694- let name = match * tok {
695675 token:: Eq => "Eq" ,
696676 token:: Lt => "Lt" ,
697677 token:: Le => "Le" ,
@@ -706,6 +686,7 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
706686 token:: At => "At" ,
707687 token:: Dot => "Dot" ,
708688 token:: DotDot => "DotDot" ,
689+ token:: DotDotDot => "DotDotDot" ,
709690 token:: Comma => "Comma" ,
710691 token:: Semi => "Semi" ,
711692 token:: Colon => "Colon" ,
@@ -718,7 +699,10 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
718699 token:: Question => "Question" ,
719700 token:: Underscore => "Underscore" ,
720701 token:: Eof => "Eof" ,
721- _ => panic ! ( "unhandled token in quote!" ) ,
702+
703+ token:: Whitespace | token:: SubstNt ( _) | token:: Comment | token:: Shebang ( _) => {
704+ panic ! ( "unhandled token in quote!" ) ;
705+ }
722706 } ;
723707 mk_token_path ( cx, sp, name)
724708}
0 commit comments