diff --git a/AK/Format.cpp b/AK/Format.cpp index fece3b2e64..45188c752b 100644 --- a/AK/Format.cpp +++ b/AK/Format.cpp @@ -549,6 +549,17 @@ void Formatter::value>::Type>::format(TypeEra builder.put_i64(value, base, m_alternative_form, upper_case, m_zero_pad, m_align, width, m_fill, m_sign_mode); } +void Formatter::format(TypeErasedFormatParams& params, FormatBuilder& builder, char value) +{ + if (m_mode == Mode::Binary || m_mode == Mode::BinaryUppercase || m_mode == Mode::Decimal || m_mode == Mode::Octal || m_mode == Mode::Hexadecimal || m_mode == Mode::HexadecimalUppercase) { + // Trick: signed char != char. (Sometimes weird features are actually helpful.) + Formatter formatter { *this }; + return formatter.format(params, builder, static_cast(value)); + } else { + Formatter formatter { *this }; + return formatter.format(params, builder, { &value, 1 }); + } +} void Formatter::format(TypeErasedFormatParams& params, FormatBuilder& builder, bool value) { if (m_mode == Mode::Binary || m_mode == Mode::BinaryUppercase || m_mode == Mode::Decimal || m_mode == Mode::Octal || m_mode == Mode::Hexadecimal || m_mode == Mode::HexadecimalUppercase) { diff --git a/AK/Format.h b/AK/Format.h index d66e9b607c..2b800111f1 100644 --- a/AK/Format.h +++ b/AK/Format.h @@ -295,13 +295,9 @@ struct Formatter : StandardFormatter { }; template<> -struct Formatter : Formatter { - void format(TypeErasedFormatParams& params, FormatBuilder& builder, char value) - { - Formatter::format(params, builder, { &value, 1 }); - } +struct Formatter : StandardFormatter { + void format(TypeErasedFormatParams&, FormatBuilder&, char value); }; - template<> struct Formatter : StandardFormatter { void format(TypeErasedFormatParams&, FormatBuilder&, bool value);