From a3930cb470dee93d79a1feb923b9a47a72e1e83a Mon Sep 17 00:00:00 2001 From: gingerBill Date: Fri, 13 Aug 2021 12:44:55 +0100 Subject: [PATCH] Improve `fmt._user_formatters` logic --- core/fmt/fmt.odin | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/fmt/fmt.odin b/core/fmt/fmt.odin index 96a120c2f..4e19d7d19 100644 --- a/core/fmt/fmt.odin +++ b/core/fmt/fmt.odin @@ -27,6 +27,7 @@ Info :: struct { reordered: bool, good_arg_index: bool, + ignore_user_formatters: bool, writer: io.Writer, arg: any, // Temporary @@ -1267,15 +1268,18 @@ fmt_value :: proc(fi: ^Info, v: any, verb: rune) { return; } - if _user_formatters != nil { + if _user_formatters != nil && !fi.ignore_user_formatters { formatter := _user_formatters[v.id]; if formatter != nil { + fi.ignore_user_formatters = false; if ok := formatter(fi, v, verb); !ok { + fi.ignore_user_formatters = true; fmt_bad_verb(fi, verb); } return; } } + fi.ignore_user_formatters = false; type_info := type_info_of(v.id); switch info in type_info.variant {