@@ -84,7 +84,7 @@ pub struct BeginToken {
84
84
85
85
#[ deriving( Clone ) ]
86
86
pub enum Token {
87
- String ( @ str , int ) ,
87
+ String ( ~ str , int ) ,
88
88
Break ( BreakToken ) ,
89
89
Begin ( BeginToken ) ,
90
90
End ,
@@ -131,7 +131,7 @@ pub fn buf_str(toks: ~[Token], szs: ~[int], left: uint, right: uint,
131
131
if i != left {
132
132
s.push_str(" , ");
133
133
}
134
- s.push_str(format!(" { } ={ } ", szs[ i] , tok_str ( toks[ i] ) ) ) ;
134
+ s.push_str(format!(" { } ={ } ", szs[ i] , tok_str ( toks[ i] . clone ( ) ) ) ) ;
135
135
i += 1 u;
136
136
i %= n;
137
137
}
@@ -285,7 +285,9 @@ pub struct Printer {
285
285
}
286
286
287
287
impl Printer {
288
- pub fn last_token ( & mut self ) -> Token { self . token [ self . right ] }
288
+ pub fn last_token ( & mut self ) -> Token {
289
+ self . token [ self . right ] . clone ( )
290
+ }
289
291
// be very careful with this!
290
292
pub fn replace_last_token ( & mut self , t : Token ) {
291
293
self . token [ self . right ] = t;
@@ -296,8 +298,8 @@ impl Printer {
296
298
Eof => {
297
299
if !self . scan_stack_empty {
298
300
self . check_stack ( 0 ) ;
299
- self . advance_left ( self . token [ self . left ] ,
300
- self . size [ self . left ] ) ;
301
+ let left = self . token [ self . left ] . clone ( ) ;
302
+ self . advance_left ( left , self . size [ self . left ] ) ;
301
303
}
302
304
self . indent ( 0 ) ;
303
305
}
@@ -341,16 +343,16 @@ impl Printer {
341
343
self . size [ self . right ] = -self . right_total ;
342
344
self . right_total += b. blank_space ;
343
345
}
344
- String ( s, len) => {
346
+ String ( ref s, len) => {
345
347
if self . scan_stack_empty {
346
348
debug ! ( "pp String('{}')/print ~[{},{}]" ,
347
- s, self . left, self . right) ;
348
- self . print ( t, len) ;
349
+ * s, self . left, self . right) ;
350
+ self . print ( t. clone ( ) , len) ;
349
351
} else {
350
352
debug ! ( "pp String('{}')/buffer ~[{},{}]" ,
351
- s, self . left, self . right) ;
353
+ * s, self . left, self . right) ;
352
354
self . advance_right ( ) ;
353
- self . token [ self . right ] = t;
355
+ self . token [ self . right ] = t. clone ( ) ;
354
356
self . size [ self . right ] = len;
355
357
self . right_total += len;
356
358
self . check_stream ( ) ;
@@ -370,7 +372,8 @@ impl Printer {
370
372
self . size [ self . scan_pop_bottom ( ) ] = SIZE_INFINITY ;
371
373
}
372
374
}
373
- self . advance_left ( self . token [ self . left ] , self . size [ self . left ] ) ;
375
+ let left = self . token [ self . left ] . clone ( ) ;
376
+ self . advance_left ( left, self . size [ self . left ] ) ;
374
377
if self . left != self . right { self . check_stream ( ) ; }
375
378
}
376
379
}
@@ -414,7 +417,7 @@ impl Printer {
414
417
debug ! ( "advnce_left ~[{},{}], sizeof({})={}" , self . left, self . right,
415
418
self . left, L ) ;
416
419
if L >= 0 {
417
- self . print ( x, L ) ;
420
+ self . print ( x. clone ( ) , L ) ;
418
421
match x {
419
422
Break ( b) => self . left_total += b. blank_space ,
420
423
String ( _, len) => {
@@ -425,8 +428,8 @@ impl Printer {
425
428
if self . left != self . right {
426
429
self . left += 1 u;
427
430
self . left %= self . buf_len ;
428
- self . advance_left ( self . token [ self . left ] ,
429
- self . size [ self . left ] ) ;
431
+ let left = self . token [ self . left ] . clone ( ) ;
432
+ self . advance_left ( left , self . size [ self . left ] ) ;
430
433
}
431
434
}
432
435
}
@@ -483,7 +486,7 @@ impl Printer {
483
486
write ! ( self . out, "{}" , s) ;
484
487
}
485
488
pub fn print ( & mut self , x : Token , L : int ) {
486
- debug ! ( "print {} {} (remaining line space={})" , tok_str( x) , L ,
489
+ debug ! ( "print {} {} (remaining line space={})" , tok_str( x. clone ( ) ) , L ,
487
490
self . space) ;
488
491
debug ! ( "{}" , buf_str( self . token. clone( ) ,
489
492
self . size. clone( ) ,
@@ -583,15 +586,15 @@ pub fn end(p: &mut Printer) { p.pretty_print(End); }
583
586
pub fn eof ( p : & mut Printer ) { p. pretty_print ( Eof ) ; }
584
587
585
588
pub fn word ( p : & mut Printer , wrd : & str ) {
586
- p. pretty_print ( String ( /* bad */ wrd. to_managed ( ) , wrd. len ( ) as int ) ) ;
589
+ p. pretty_print ( String ( /* bad */ wrd. to_str ( ) , wrd. len ( ) as int ) ) ;
587
590
}
588
591
589
592
pub fn huge_word ( p : & mut Printer , wrd : & str ) {
590
- p. pretty_print ( String ( /* bad */ wrd. to_managed ( ) , SIZE_INFINITY ) ) ;
593
+ p. pretty_print ( String ( /* bad */ wrd. to_str ( ) , SIZE_INFINITY ) ) ;
591
594
}
592
595
593
596
pub fn zero_word ( p : & mut Printer , wrd : & str ) {
594
- p. pretty_print ( String ( /* bad */ wrd. to_managed ( ) , 0 ) ) ;
597
+ p. pretty_print ( String ( /* bad */ wrd. to_str ( ) , 0 ) ) ;
595
598
}
596
599
597
600
pub fn spaces ( p : & mut Printer , n : uint ) { break_offset ( p, n, 0 ) ; }
0 commit comments