| ... | @@ -211,8 +211,8 @@ pub struct InStream { | ... | @@ -211,8 +211,8 @@ pub struct InStream { |
| 211 | pub error InvalidChar; | 211 | pub error InvalidChar; |
| 212 | pub error Overflow; | 212 | pub error Overflow; |
| 213 | | 213 | |
| 214 | pub fn parse_u64(buf: []u8, radix: u8) -> %u64 { | 214 | pub fn parse_unsigned(T: type)(buf: []u8, radix: u8) -> %T { |
| 215 | var x : u64 = 0; | 215 | var x: T = 0; |
| 216 | | 216 | |
| 217 | for (buf) |c| { | 217 | for (buf) |c| { |
| 218 | const digit = char_to_digit(c); | 218 | const digit = char_to_digit(c); |
| ... | @@ -222,12 +222,12 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 { | ... | @@ -222,12 +222,12 @@ pub fn parse_u64(buf: []u8, radix: u8) -> %u64 { |
| 222 | } | 222 | } |
| 223 | | 223 | |
| 224 | // x *= radix | 224 | // x *= radix |
| 225 | if (@mul_with_overflow(u64, x, radix, &x)) { | 225 | if (@mul_with_overflow(T, x, radix, &x)) { |
| 226 | return error.Overflow; | 226 | return error.Overflow; |
| 227 | } | 227 | } |
| 228 | | 228 | |
| 229 | // x += digit | 229 | // x += digit |
| 230 | if (@add_with_overflow(u64, x, digit, &x)) { | 230 | if (@add_with_overflow(T, x, digit, &x)) { |
| 231 | return error.Overflow; | 231 | return error.Overflow; |
| 232 | } | 232 | } |
| 233 | } | 233 | } |
| ... | @@ -404,7 +404,7 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize { | ... | @@ -404,7 +404,7 @@ pub fn buf_print_f64(out_buf: []u8, x: f64, decimals: isize) -> isize { |
| 404 | | 404 | |
| 405 | #attribute("test") | 405 | #attribute("test") |
| 406 | fn parse_u64_digit_too_big() { | 406 | fn parse_u64_digit_too_big() { |
| 407 | parse_u64("123a", 10) %% |err| { | 407 | parse_unsigned(u64)("123a", 10) %% |err| { |
| 408 | if (err == error.InvalidChar) return; | 408 | if (err == error.InvalidChar) return; |
| 409 | unreachable{}; | 409 | unreachable{}; |
| 410 | }; | 410 | }; |