diff options
| author | Andrew Paseltiner <apaseltiner@gmail.com> | 2013-01-07 14:36:46 -0500 |
|---|---|---|
| committer | Andrew Paseltiner <apaseltiner@gmail.com> | 2013-01-07 17:22:01 -0500 |
| commit | 51b141e3e499558ddfece1f00dd6714f442c2404 (patch) | |
| tree | 9918034b617e065fa76c0a554545f4e357b50cf0 | |
| parent | 0a17ab2a9cb4a9c1ce34da670127e45c70e2b99f (diff) | |
| download | rust-51b141e3e499558ddfece1f00dd6714f442c2404.tar.gz rust-51b141e3e499558ddfece1f00dd6714f442c2404.zip | |
fmt: simplify parse_type
| -rw-r--r-- | src/libcore/extfmt.rs | 41 |
1 files changed, 15 insertions, 26 deletions
diff --git a/src/libcore/extfmt.rs b/src/libcore/extfmt.rs index 98cd9910f50..3cc7e2458b2 100644 --- a/src/libcore/extfmt.rs +++ b/src/libcore/extfmt.rs @@ -310,34 +310,23 @@ pub mod ct { pub fn parse_type(s: &str, i: uint, lim: uint, err: ErrorFn) -> Parsed<Ty> { if i >= lim { err(~"missing type in conversion"); } - let tstr = str::slice(s, i, i+1u); // FIXME (#2249): Do we really want two signed types here? // How important is it to be printf compatible? - let t = - if tstr == ~"b" { - TyBool - } else if tstr == ~"s" { - TyStr - } else if tstr == ~"c" { - TyChar - } else if tstr == ~"d" || tstr == ~"i" { - TyInt(Signed) - } else if tstr == ~"u" { - TyInt(Unsigned) - } else if tstr == ~"x" { - TyHex(CaseLower) - } else if tstr == ~"X" { - TyHex(CaseUpper) - } else if tstr == ~"t" { - TyBits - } else if tstr == ~"o" { - TyOctal - } else if tstr == ~"f" { - TyFloat - } else if tstr == ~"?" { - TyPoly - } else { err(~"unknown type in conversion: " + tstr) }; - return Parsed::new(t, i + 1u); + let t = match s[i] { + 'b' as u8 => TyBool, + 's' as u8 => TyStr, + 'c' as u8 => TyChar, + 'd' as u8 | 'i' as u8 => TyInt(Signed), + 'u' as u8 => TyInt(Unsigned), + 'x' as u8 => TyHex(CaseLower), + 'X' as u8 => TyHex(CaseUpper), + 't' as u8 => TyBits, + 'o' as u8 => TyOctal, + 'f' as u8 => TyFloat, + '?' as u8 => TyPoly, + _ => err(~"unknown type in conversion: " + s.substr(i, 1)) + }; + Parsed::new(t, i + 1) } } |
