@@ -23,8 +23,8 @@ use ptr::P;
23
23
*
24
24
* This is registered as a set of expression syntax extension called quote!
25
25
* that lifts its argument token-tree to an AST representing the
26
- * construction of the same token tree, with ast::TtNonterminal nodes
27
- * interpreted as antiquotes (splices).
26
+ * construction of the same token tree, with token::SubstNt interpreted
27
+ * as antiquotes (splices).
28
28
*
29
29
*/
30
30
@@ -616,20 +616,6 @@ fn mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
616
616
vec ! ( mk_name( cx, sp, ident. ident( ) ) ) ) ;
617
617
}
618
618
619
- token:: MatchNt ( name, kind, name_style, kind_style) => {
620
- return cx. expr_call ( sp,
621
- mk_token_path ( cx, sp, "MatchNt" ) ,
622
- vec ! [ mk_ident( cx, sp, name) ,
623
- mk_ident( cx, sp, kind) ,
624
- match name_style {
625
- ModName => mk_token_path( cx, sp, "ModName" ) ,
626
- Plain => mk_token_path( cx, sp, "Plain" ) ,
627
- } ,
628
- match kind_style {
629
- ModName => mk_token_path( cx, sp, "ModName" ) ,
630
- Plain => mk_token_path( cx, sp, "Plain" ) ,
631
- } ] ) ;
632
- }
633
619
token:: Interpolated ( _) => panic ! ( "quote! with interpolated token" ) ,
634
620
635
621
_ => ( )
@@ -666,7 +652,7 @@ fn mk_token(cx: &ExtCtxt, sp: Span, tok: &token::Token) -> P<ast::Expr> {
666
652
mk_token_path ( cx, sp, name)
667
653
}
668
654
669
- fn mk_tt ( cx : & ExtCtxt , _ : Span , tt : & ast:: TokenTree ) -> Vec < P < ast:: Stmt > > {
655
+ fn mk_tt ( cx : & ExtCtxt , tt : & ast:: TokenTree ) -> Vec < P < ast:: Stmt > > {
670
656
match * tt {
671
657
ast:: TtToken ( sp, SubstNt ( ident, _) ) => {
672
658
// tt.extend($ident.to_tokens(ext_cx).into_iter())
@@ -687,6 +673,13 @@ fn mk_tt(cx: &ExtCtxt, _: Span, tt: &ast::TokenTree) -> Vec<P<ast::Stmt>> {
687
673
688
674
vec ! ( cx. stmt_expr( e_push) )
689
675
}
676
+ ref tt @ ast:: TtToken ( _, MatchNt ( ..) ) => {
677
+ let mut seq = vec ! [ ] ;
678
+ for i in range ( 0 , tt. len ( ) ) {
679
+ seq. push ( tt. get_tt ( i) ) ;
680
+ }
681
+ mk_tts ( cx, seq. as_slice ( ) )
682
+ }
690
683
ast:: TtToken ( sp, ref tok) => {
691
684
let e_sp = cx. expr_ident ( sp, id_ext ( "_sp" ) ) ;
692
685
let e_tok = cx. expr_call ( sp,
@@ -699,21 +692,20 @@ fn mk_tt(cx: &ExtCtxt, _: Span, tt: &ast::TokenTree) -> Vec<P<ast::Stmt>> {
699
692
vec ! ( e_tok) ) ;
700
693
vec ! ( cx. stmt_expr( e_push) )
701
694
} ,
702
- ast:: TtDelimited ( sp , ref delimed) => {
703
- mk_tt ( cx, sp , & delimed. open_tt ( ) ) . into_iter ( )
704
- . chain ( delimed. tts . iter ( ) . flat_map ( |tt| mk_tt ( cx, sp , tt) . into_iter ( ) ) )
705
- . chain ( mk_tt ( cx, sp , & delimed. close_tt ( ) ) . into_iter ( ) )
695
+ ast:: TtDelimited ( _ , ref delimed) => {
696
+ mk_tt ( cx, & delimed. open_tt ( ) ) . into_iter ( )
697
+ . chain ( delimed. tts . iter ( ) . flat_map ( |tt| mk_tt ( cx, tt) . into_iter ( ) ) )
698
+ . chain ( mk_tt ( cx, & delimed. close_tt ( ) ) . into_iter ( ) )
706
699
. collect ( )
707
700
} ,
708
701
ast:: TtSequence ( ..) => panic ! ( "TtSequence in quote!" ) ,
709
702
}
710
703
}
711
704
712
- fn mk_tts ( cx : & ExtCtxt , sp : Span , tts : & [ ast:: TokenTree ] )
713
- -> Vec < P < ast:: Stmt > > {
705
+ fn mk_tts ( cx : & ExtCtxt , tts : & [ ast:: TokenTree ] ) -> Vec < P < ast:: Stmt > > {
714
706
let mut ss = Vec :: new ( ) ;
715
707
for tt in tts. iter ( ) {
716
- ss. extend ( mk_tt ( cx, sp , tt) . into_iter ( ) ) ;
708
+ ss. extend ( mk_tt ( cx, tt) . into_iter ( ) ) ;
717
709
}
718
710
ss
719
711
}
@@ -775,7 +767,7 @@ fn expand_tts(cx: &ExtCtxt, sp: Span, tts: &[ast::TokenTree])
775
767
let stmt_let_tt = cx. stmt_let ( sp, true , id_ext ( "tt" ) , cx. expr_vec_ng ( sp) ) ;
776
768
777
769
let mut vector = vec ! ( stmt_let_sp, stmt_let_tt) ;
778
- vector. extend ( mk_tts ( cx, sp , tts. as_slice ( ) ) . into_iter ( ) ) ;
770
+ vector. extend ( mk_tts ( cx, tts. as_slice ( ) ) . into_iter ( ) ) ;
779
771
let block = cx. expr_block (
780
772
cx. block_all ( sp,
781
773
Vec :: new ( ) ,
0 commit comments