@@ -243,31 +243,24 @@ pub mod ct {
243
243
}
244
244
pub fn parse_flags(s: &str, i: uint, lim: uint) ->
245
245
Parsed<~[Flag]> {
246
- let noflags: ~[Flag] = ~[];
247
- if i >= lim { return Parsed::new(move noflags, i); }
248
-
249
- fn more(f: Flag, s: &str, i: uint, lim: uint) ->
250
- Parsed<~[Flag]> {
251
- let next = parse_flags(s, i + 1u, lim);
252
- let rest = copy next.val;
253
- let j = next.next;
254
- let curr: ~[Flag] = ~[f];
255
- return Parsed::new(vec::append(move curr, rest), j);
246
+ let mut i = i;
247
+ let mut flags = ~[];
248
+
249
+ while i < lim {
250
+ let f = match s[i] {
251
+ '-' as u8 => FlagLeftJustify,
252
+ '0' as u8 => FlagLeftZeroPad,
253
+ ' ' as u8 => FlagSpaceForSign,
254
+ '+' as u8 => FlagSignAlways,
255
+ '#' as u8 => FlagAlternate,
256
+ _ => break
257
+ };
258
+
259
+ flags.push(f);
260
+ i += 1;
256
261
}
257
- // Unfortunate, but because s is borrowed, can't use a closure
258
- // fn more(f: Flag, s: &str) { more_(f, s, i, lim); }
259
- let f = s[i];
260
- return if f == '-' as u8 {
261
- more(FlagLeftJustify, s, i, lim)
262
- } else if f == '0' as u8 {
263
- more(FlagLeftZeroPad, s, i, lim)
264
- } else if f == ' ' as u8 {
265
- more(FlagSpaceForSign, s, i, lim)
266
- } else if f == '+' as u8 {
267
- more(FlagSignAlways, s, i, lim)
268
- } else if f == '#' as u8 {
269
- more(FlagAlternate, s, i, lim)
270
- } else { Parsed::new(move noflags, i) };
262
+
263
+ Parsed::new(flags, i)
271
264
}
272
265
pub fn parse_count(s: &str, i: uint, lim: uint)
273
266
-> Parsed<Count> {
0 commit comments