@@ -434,10 +434,17 @@ pub fn each_split_within<'a>(ss: &'a str,
434
434
let mut last_start = 0 ;
435
435
let mut last_end = 0 ;
436
436
let mut state = A ;
437
+ let mut fake_i = ss. len ( ) ;
438
+ let mut lim = lim;
437
439
438
440
let mut cont = true ;
439
441
let slice: & fn ( ) = || { cont = it ( ss. slice ( slice_start, last_end) ) } ;
440
442
443
+ // if the limit is larger than the string, lower it to save cycles
444
+ if ( lim >= fake_i) {
445
+ lim = fake_i;
446
+ }
447
+
441
448
let machine: & fn ( ( uint , char ) ) -> bool = |( i, c) | {
442
449
let whitespace = if char:: is_whitespace ( c) { Ws } else { Cr } ;
443
450
let limit = if ( i - slice_start + 1 ) <= lim { UnderLim } else { OverLim } ;
@@ -466,7 +473,6 @@ pub fn each_split_within<'a>(ss: &'a str,
466
473
ss. iter ( ) . enumerate ( ) . advance ( machine) ;
467
474
468
475
// Let the automaton 'run out' by supplying trailing whitespace
469
- let mut fake_i = ss. len ( ) ;
470
476
while cont && match state { B | C => true , A => false } {
471
477
machine ( ( fake_i, ' ' ) ) ;
472
478
fake_i += 1 ;
@@ -2299,6 +2305,7 @@ mod tests {
2299
2305
use libc;
2300
2306
use ptr;
2301
2307
use str::*;
2308
+ use uint;
2302
2309
use vec;
2303
2310
use vec::{ImmutableVector, CopyableVector};
2304
2311
use cmp::{TotalOrd, Less, Equal, Greater};
@@ -2444,6 +2451,8 @@ mod tests {
2444
2451
t(" hello", 15, [~" hello"]);
2445
2452
t("\n Mary had a little lamb\n Little lamb\n " , 15 ,
2446
2453
[ ~"Mary had a", ~" little lamb", ~" Little lamb"]);
2454
+ t("\n Mary had a little lamb\n Little lamb\n " , uint:: max_value,
2455
+ [ ~"Mary had a little lamb\n Little lamb"]);
2447
2456
}
2448
2457
2449
2458
#[test]
0 commit comments