@@ -612,16 +612,20 @@ fn mk_delim(cx: &ExtCtxt, sp: Span, delim: token::DelimToken) -> P<ast::Expr> {
612
612
#[ allow( non_upper_case_globals) ]
613
613
fn expr_mk_token ( cx : & ExtCtxt , sp : Span , tok : & token:: Token ) -> P < ast:: Expr > {
614
614
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
+ ] ) ;
617
620
let suffix = match $suffix {
618
621
Some ( name) => cx. expr_some( sp, mk_name( cx, sp, ast:: Ident :: with_empty_ctxt( name) ) ) ,
619
622
None => cx. expr_none( sp)
620
623
} ;
621
624
cx. expr_call( sp, mk_token_path( cx, sp, "Literal" ) , vec![ inner, suffix] )
622
625
} }
623
626
}
624
- match * tok {
627
+
628
+ let name = match * tok {
625
629
token:: BinOp ( binop) => {
626
630
return cx. expr_call ( sp, mk_token_path ( cx, sp, "BinOp" ) , vec ! [ mk_binop( cx, sp, binop) ] ) ;
627
631
}
@@ -639,34 +643,14 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
639
643
vec ! [ mk_delim( cx, sp, delim) ] ) ;
640
644
}
641
645
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) ,
670
654
671
655
token:: Ident ( ident) => {
672
656
return cx. expr_call ( sp,
@@ -688,10 +672,6 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
688
672
689
673
token:: Interpolated ( _) => panic ! ( "quote! with interpolated token" ) ,
690
674
691
- _ => ( )
692
- }
693
-
694
- let name = match * tok {
695
675
token:: Eq => "Eq" ,
696
676
token:: Lt => "Lt" ,
697
677
token:: Le => "Le" ,
@@ -706,6 +686,7 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
706
686
token:: At => "At" ,
707
687
token:: Dot => "Dot" ,
708
688
token:: DotDot => "DotDot" ,
689
+ token:: DotDotDot => "DotDotDot" ,
709
690
token:: Comma => "Comma" ,
710
691
token:: Semi => "Semi" ,
711
692
token:: Colon => "Colon" ,
@@ -718,7 +699,10 @@ fn expr_mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
718
699
token:: Question => "Question" ,
719
700
token:: Underscore => "Underscore" ,
720
701
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
+ }
722
706
} ;
723
707
mk_token_path ( cx, sp, name)
724
708
}
0 commit comments