From 231f3cc15a063f2516edd507ef385e7cf81afbc0 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 15 Mar 2019 23:22:05 +0000 Subject: [PATCH] %h support in fmt.printf for hexadecimal floats --- core/fmt/fmt.odin | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index db825663d..68cde1ec3 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -619,6 +619,25 @@ fmt_float :: proc(fi: ^Info, v: f64, bit_size: int, verb: rune) { _pad(fi, str[1:]); } + case 'h', 'H': + prev_fi := fi^; + defer fi^ = prev_fi; + fi.hash = false; + fi.width = bit_size; + fi.zero = true; + fi.plus = false; + + u: u64; + switch bit_size { + case 32: u = u64(transmute(u32)f32(v)); + case 64: u = transmute(u64)v; + case: panic("Unhandled float size"); + } + + strings.write_string(fi.buf, "0h"); + _fmt_int(fi, u, 16, false, bit_size, verb == 'h' ? __DIGITS_LOWER : __DIGITS_UPPER); + + case: fmt_bad_verb(fi, verb); }