@@ -883,9 +883,15 @@ class parser {
883
883
/* `!`, as an operator, is prefix, so we know this isn't that */
884
884
if self . token == token:: NOT {
885
885
self . bump ( ) ;
886
- let tts = self . parse_unspanned_seq (
887
- token:: LBRACE , token:: RBRACE , seq_sep_none ( ) ,
888
- |p| p. parse_token_tree ( ) ) ;
886
+ let tts = alt self . token {
887
+ token:: LPAREN | token:: LBRACE | token:: LBRACKET {
888
+ let ket = token:: flip_delimiter ( self . token ) ;
889
+ self . parse_unspanned_seq ( copy self . token , ket,
890
+ seq_sep_none ( ) ,
891
+ |p| p. parse_token_tree ( ) )
892
+ }
893
+ _ { self. fatal ( ~"expected open delimiter") ; }
894
+ } ;
889
895
let hi = self . span . hi ;
890
896
891
897
ret pexpr ( self . mk_mac_expr ( lo, hi, mac_invoc_tt ( pth, tts) ) ) ;
@@ -1083,16 +1089,6 @@ class parser {
1083
1089
}
1084
1090
1085
1091
fn parse_token_tree ( ) -> token_tree {
1086
- /// what's the opposite delimiter?
1087
- fn flip ( & t: token:: token ) -> token:: token {
1088
- alt t {
1089
- token : : LPAREN { token : : RPAREN }
1090
- token:: LBRACE { token : : RBRACE }
1091
- token:: LBRACKET { token : : RBRACKET }
1092
- _ { fail }
1093
- }
1094
- }
1095
-
1096
1092
fn parse_tt_tok ( p : parser , delim_ok : bool ) -> token_tree {
1097
1093
alt p. token {
1098
1094
token:: RPAREN | token:: RBRACE | token:: RBRACKET
@@ -1127,7 +1123,7 @@ class parser {
1127
1123
1128
1124
ret alt self.token {
1129
1125
token::LPAREN | token::LBRACE | token::LBRACKET {
1130
- let ket = flip (self.token);
1126
+ let ket = token::flip_delimiter (self.token);
1131
1127
tt_delim(vec::append(
1132
1128
~[parse_tt_tok(self, true)],
1133
1129
vec::append(
@@ -2718,9 +2714,15 @@ class parser {
2718
2714
let pth = self . parse_path_without_tps ( ) ;
2719
2715
self . expect ( token:: NOT ) ;
2720
2716
let id = self . parse_ident ( ) ;
2721
- let tts = self . parse_unspanned_seq ( token:: LBRACE , token:: RBRACE ,
2722
- seq_sep_none ( ) ,
2723
- |p| p. parse_token_tree ( ) ) ;
2717
+ let tts = alt self . token {
2718
+ token:: LPAREN | token:: LBRACE | token:: LBRACKET {
2719
+ let ket = token:: flip_delimiter ( self . token ) ;
2720
+ self . parse_unspanned_seq ( copy self . token , ket,
2721
+ seq_sep_none ( ) ,
2722
+ |p| p. parse_token_tree ( ) )
2723
+ }
2724
+ _ { self. fatal ( ~"expected open delimiter") ; }
2725
+ } ;
2724
2726
let m = ast:: mac_invoc_tt ( pth, tts) ;
2725
2727
let m: ast:: mac = { node: m,
2726
2728
span : { lo : self . span . lo ,
0 commit comments