@@ -317,9 +317,7 @@ impl Printer {
317
317
Token :: Eof => {
318
318
if !self . scan_stack_empty {
319
319
self . check_stack ( 0 ) ;
320
- let left = self . token [ self . left ] . clone ( ) ;
321
- let left_size = self . size [ self . left ] ;
322
- try!( self . advance_left ( left, left_size) ) ;
320
+ try!( self . advance_left ( ) ) ;
323
321
}
324
322
self . indent ( 0 ) ;
325
323
Ok ( ( ) )
@@ -370,16 +368,16 @@ impl Printer {
370
368
self . right_total += b. blank_space ;
371
369
Ok ( ( ) )
372
370
}
373
- Token :: String ( ref s, len) => {
371
+ Token :: String ( s, len) => {
374
372
if self . scan_stack_empty {
375
373
debug ! ( "pp String('{}')/print ~[{},{}]" ,
376
- * s, self . left, self . right) ;
377
- self . print ( token . clone ( ) , len)
374
+ s, self . left, self . right) ;
375
+ self . print ( Token :: String ( s , len ) , len)
378
376
} else {
379
377
debug ! ( "pp String('{}')/buffer ~[{},{}]" ,
380
- * s, self . left, self . right) ;
378
+ s, self . left, self . right) ;
381
379
self . advance_right ( ) ;
382
- self . token [ self . right ] = token . clone ( ) ;
380
+ self . token [ self . right ] = Token :: String ( s , len ) ;
383
381
self . size [ self . right ] = len;
384
382
self . right_total += len;
385
383
self . check_stream ( )
@@ -400,9 +398,7 @@ impl Printer {
400
398
self . size [ scanned] = SIZE_INFINITY ;
401
399
}
402
400
}
403
- let left = self . token [ self . left ] . clone ( ) ;
404
- let left_size = self . size [ self . left ] ;
405
- try!( self . advance_left ( left, left_size) ) ;
401
+ try!( self . advance_left ( ) ) ;
406
402
if self . left != self . right {
407
403
try!( self . check_stream ( ) ) ;
408
404
}
@@ -449,29 +445,39 @@ impl Printer {
449
445
self . right %= self . buf_len ;
450
446
assert ! ( ( self . right != self . left) ) ;
451
447
}
452
- pub fn advance_left ( & mut self , x : Token , l : int ) -> io:: IoResult < ( ) > {
448
+ pub fn advance_left ( & mut self ) -> io:: IoResult < ( ) > {
453
449
debug ! ( "advance_left ~[{},{}], sizeof({})={}" , self . left, self . right,
454
- self . left, l) ;
455
- if l >= 0 {
456
- let ret = self . print ( x. clone ( ) , l) ;
457
- match x {
458
- Token :: Break ( b) => self . left_total += b. blank_space ,
459
- Token :: String ( _, len) => {
460
- assert_eq ! ( len, l) ; self . left_total += len;
461
- }
462
- _ => ( )
463
- }
464
- if self . left != self . right {
465
- self . left += 1 u;
466
- self . left %= self . buf_len ;
467
- let left = self . token [ self . left ] . clone ( ) ;
468
- let left_size = self . size [ self . left ] ;
469
- try!( self . advance_left ( left, left_size) ) ;
450
+ self . left, self . size[ self . left] ) ;
451
+
452
+ let mut left_size = self . size [ self . left ] ;
453
+
454
+ while left_size >= 0 {
455
+ let left = self . token [ self . left ] . clone ( ) ;
456
+
457
+ let len = match left {
458
+ Token :: Break ( b) => b. blank_space ,
459
+ Token :: String ( _, len) => {
460
+ assert_eq ! ( len, left_size) ;
461
+ len
462
+ }
463
+ _ => 0
464
+ } ;
465
+
466
+ try!( self . print ( left, left_size) ) ;
467
+
468
+ self . left_total += len;
469
+
470
+ if self . left == self . right {
471
+ break ;
470
472
}
471
- ret
472
- } else {
473
- Ok ( ( ) )
473
+
474
+ self . left += 1 u;
475
+ self . left %= self . buf_len ;
476
+
477
+ left_size = self . size [ self . left ] ;
474
478
}
479
+
480
+ Ok ( ( ) )
475
481
}
476
482
pub fn check_stack ( & mut self , k : int ) {
477
483
if !self . scan_stack_empty {
0 commit comments