@@ -206,7 +206,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
206
206
}
207
207
208
208
/// Feed an input string into the tokenizer.
209
- pub fn feed ( & mut self , input : & mut BufferQueue ) -> TokenizerResult < Sink :: Handle > {
209
+ pub fn feed ( & mut self , input : & BufferQueue ) -> TokenizerResult < Sink :: Handle > {
210
210
if input. is_empty ( ) {
211
211
return TokenizerResult :: Done ;
212
212
}
@@ -248,7 +248,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
248
248
//§ preprocessing-the-input-stream
249
249
// Get the next input character, which might be the character
250
250
// 'c' that we already consumed from the buffers.
251
- fn get_preprocessed_char ( & mut self , mut c : char , input : & mut BufferQueue ) -> Option < char > {
251
+ fn get_preprocessed_char ( & mut self , mut c : char , input : & BufferQueue ) -> Option < char > {
252
252
if self . ignore_lf {
253
253
self . ignore_lf = false ;
254
254
if c == '\n' {
@@ -283,7 +283,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
283
283
284
284
//§ tokenization
285
285
// Get the next input character, if one is available.
286
- fn get_char ( & mut self , input : & mut BufferQueue ) -> Option < char > {
286
+ fn get_char ( & mut self , input : & BufferQueue ) -> Option < char > {
287
287
if self . reconsume {
288
288
self . reconsume = false ;
289
289
Some ( self . current_char )
@@ -294,7 +294,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
294
294
}
295
295
}
296
296
297
- fn pop_except_from ( & mut self , input : & mut BufferQueue , set : SmallCharSet ) -> Option < SetResult > {
297
+ fn pop_except_from ( & mut self , input : & BufferQueue , set : SmallCharSet ) -> Option < SetResult > {
298
298
// Bail to the slow path for various corner cases.
299
299
// This means that `FromSet` can contain characters not in the set!
300
300
// It shouldn't matter because the fallback `FromSet` case should
@@ -319,12 +319,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
319
319
// BufferQueue::eat.
320
320
//
321
321
// NB: this doesn't set the current input character.
322
- fn eat (
323
- & mut self ,
324
- input : & mut BufferQueue ,
325
- pat : & str ,
326
- eq : fn ( & u8 , & u8 ) -> bool ,
327
- ) -> Option < bool > {
322
+ fn eat ( & mut self , input : & BufferQueue , pat : & str , eq : fn ( & u8 , & u8 ) -> bool ) -> Option < bool > {
328
323
if self . ignore_lf {
329
324
self . ignore_lf = false ;
330
325
if self . peek ( input) == Some ( '\n' ) {
@@ -336,15 +331,17 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
336
331
match input. eat ( pat, eq) {
337
332
None if self . at_eof => Some ( false ) ,
338
333
None => {
339
- self . temp_buf . extend ( input) ;
334
+ while let Some ( data) = input. next ( ) {
335
+ self . temp_buf . push_char ( data) ;
336
+ }
340
337
None
341
338
} ,
342
339
Some ( matched) => Some ( matched) ,
343
340
}
344
341
}
345
342
346
343
/// Run the state machine for as long as we can.
347
- fn run ( & mut self , input : & mut BufferQueue ) -> TokenizerResult < Sink :: Handle > {
344
+ fn run ( & mut self , input : & BufferQueue ) -> TokenizerResult < Sink :: Handle > {
348
345
if self . opts . profile {
349
346
loop {
350
347
let state = self . state ;
@@ -567,7 +564,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
567
564
}
568
565
}
569
566
570
- fn discard_char ( & mut self , input : & mut BufferQueue ) {
567
+ fn discard_char ( & mut self , input : & BufferQueue ) {
571
568
// peek() deals in un-processed characters (no newline normalization), while get_char()
572
569
// does.
573
570
//
@@ -696,7 +693,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
696
693
// Return true if we should be immediately re-invoked
697
694
// (this just simplifies control flow vs. break / continue).
698
695
#[ allow( clippy:: never_loop) ]
699
- fn step ( & mut self , input : & mut BufferQueue ) -> ProcessResult < Sink :: Handle > {
696
+ fn step ( & mut self , input : & BufferQueue ) -> ProcessResult < Sink :: Handle > {
700
697
if self . char_ref_tokenizer . is_some ( ) {
701
698
return self . step_char_ref_tokenizer ( input) ;
702
699
}
@@ -1382,7 +1379,7 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
1382
1379
}
1383
1380
}
1384
1381
1385
- fn step_char_ref_tokenizer ( & mut self , input : & mut BufferQueue ) -> ProcessResult < Sink :: Handle > {
1382
+ fn step_char_ref_tokenizer ( & mut self , input : & BufferQueue ) -> ProcessResult < Sink :: Handle > {
1386
1383
// FIXME HACK: Take and replace the tokenizer so we don't
1387
1384
// double-mut-borrow self. This is why it's boxed.
1388
1385
let mut tok = self . char_ref_tokenizer . take ( ) . unwrap ( ) ;
@@ -1432,19 +1429,19 @@ impl<Sink: TokenSink> Tokenizer<Sink> {
1432
1429
pub fn end ( & mut self ) {
1433
1430
// Handle EOF in the char ref sub-tokenizer, if there is one.
1434
1431
// Do this first because it might un-consume stuff.
1435
- let mut input = BufferQueue :: default ( ) ;
1432
+ let input = BufferQueue :: default ( ) ;
1436
1433
match self . char_ref_tokenizer . take ( ) {
1437
1434
None => ( ) ,
1438
1435
Some ( mut tok) => {
1439
- tok. end_of_file ( self , & mut input) ;
1436
+ tok. end_of_file ( self , & input) ;
1440
1437
self . process_char_ref ( tok. get_result ( ) ) ;
1441
1438
} ,
1442
1439
}
1443
1440
1444
1441
// Process all remaining buffered input.
1445
1442
// If we're waiting for lookahead, we're not gonna get it.
1446
1443
self . at_eof = true ;
1447
- assert ! ( matches!( self . run( & mut input) , TokenizerResult :: Done ) ) ;
1444
+ assert ! ( matches!( self . run( & input) , TokenizerResult :: Done ) ) ;
1448
1445
assert ! ( input. is_empty( ) ) ;
1449
1446
1450
1447
loop {
@@ -1668,10 +1665,10 @@ mod test {
1668
1665
fn tokenize ( input : Vec < StrTendril > , opts : TokenizerOpts ) -> Vec < ( Token , u64 ) > {
1669
1666
let sink = LinesMatch :: new ( ) ;
1670
1667
let mut tok = Tokenizer :: new ( sink, opts) ;
1671
- let mut buffer = BufferQueue :: default ( ) ;
1668
+ let buffer = BufferQueue :: default ( ) ;
1672
1669
for chunk in input. into_iter ( ) {
1673
1670
buffer. push_back ( chunk) ;
1674
- let _ = tok. feed ( & mut buffer) ;
1671
+ let _ = tok. feed ( & buffer) ;
1675
1672
}
1676
1673
tok. end ( ) ;
1677
1674
tok. sink . lines
0 commit comments