fn u64.to_str(u64: u Arr: chars) -> [Str] { chars::size 20 < if { "Must provide at least 20 chars of buffer to copy u64" println 1 exit } 0 u == if { "0" as [str] { str::size str::data } chars::data memcpy 1 chars::data cast(Str) } else { 19 u while dup 0 != do { as [i x] x 10 % cast(char) '0' + chars::data i ptr+_mut ! i 1 - x 10 / } drop as [i] 19 i - chars::data i 1 + ptr+ cast(Str) } } impl Write { fn write(u64: n u64: fd) { var char[32]: buffer n buffer @ u64.to_str fd write } } impl Add { u64: Output inline fn Op.add(u64: left u8: right) -> [u64] { left right cast(u64) + } } impl Add { u64: Output inline fn Op.add(u64 u64) -> [u64] { + } } impl Sub { u64: Output inline fn Op.sub(u64: left u8: right) -> [u64] { left right cast(u64) - } } impl Sub { u64: Output inline fn Op.sub(u64 u64) -> [u64] { - } } impl Div { u64: Output inline fn Op.div(u64: left u8: right) -> [u64] { left right cast(u64) / } } impl Div { u64: Output inline fn Op.div(u64 u64) -> [u64] { / } } impl Mul { u64: Output inline fn Op.mul(u64: left u8: right) -> [u64] { left right cast(u64) * } } impl Mul { u64: Output inline fn Op.mul(u64 u64) -> [u64] { * } } impl ToString { inline fn to_string(u64) -> [String] { var char[32]: buffer buffer @ u64.to_str String.new } } impl ToString<&u64> { inline fn to_string(&u64) -> [String] { @ to_string } } impl Format { inline fn fmt(String u64) -> [String] { var char[32]: buffer buffer @ u64.to_str String.push_str } } impl Format<&u64> { inline fn fmt(String &u64) -> [String] { @ fmt } }