@@ -98,26 +98,27 @@ pub fn transcribe(
98
98
} ;
99
99
100
100
match tree {
101
- quoted:: TokenTree :: Sequence ( sp, seq) => {
102
- // FIXME(pcwalton): Bad copy.
103
- match lockstep_iter_size (
104
- & quoted:: TokenTree :: Sequence ( sp, seq. clone ( ) ) ,
105
- & interpolations,
106
- & repeats,
107
- ) {
101
+ seq @ quoted:: TokenTree :: Sequence ( ..) => {
102
+ match lockstep_iter_size ( & seq, interp, & repeats) {
108
103
LockstepIterSize :: Unconstrained => {
109
104
cx. span_fatal (
110
- sp . entire ( ) , /* blame macro writer */
105
+ seq . span ( ) , /* blame macro writer */
111
106
"attempted to repeat an expression \
112
107
containing no syntax \
113
108
variables matched as repeating at this depth",
114
109
) ;
115
110
}
116
111
LockstepIterSize :: Contradiction ( ref msg) => {
117
112
// FIXME #2887 blame macro invoker instead
118
- cx. span_fatal ( sp . entire ( ) , & msg[ ..] ) ;
113
+ cx. span_fatal ( seq . span ( ) , & msg[ ..] ) ;
119
114
}
120
115
LockstepIterSize :: Constraint ( len, _) => {
116
+ let ( sp, seq) = if let quoted:: TokenTree :: Sequence ( sp, seq) = seq {
117
+ ( sp, seq)
118
+ } else {
119
+ unreachable ! ( )
120
+ } ;
121
+
121
122
if len == 0 {
122
123
if seq. op == quoted:: KleeneOp :: OneOrMore {
123
124
// FIXME #2887 blame invoker
@@ -201,10 +202,8 @@ enum LockstepIterSize {
201
202
Contradiction ( String ) ,
202
203
}
203
204
204
- impl Add for LockstepIterSize {
205
- type Output = LockstepIterSize ;
206
-
207
- fn add ( self , other : LockstepIterSize ) -> LockstepIterSize {
205
+ impl LockstepIterSize {
206
+ fn with ( self , other : LockstepIterSize ) -> LockstepIterSize {
208
207
match self {
209
208
LockstepIterSize :: Unconstrained => other,
210
209
LockstepIterSize :: Contradiction ( _) => self ,
0 commit comments