From 83189189a1b032e1a3c508cd81a1126d1eca38b2 Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Sat, 13 Sep 2025 10:23:41 -0700 Subject: [PATCH] Remove get_dynamic_spec --- include/fmt/format.h | 35 +++++++++++------------------------ include/fmt/printf.h | 4 +++- 2 files changed, 14 insertions(+), 25 deletions(-) diff --git a/include/fmt/format.h b/include/fmt/format.h index b861fe99..8c1c070f 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -1893,7 +1893,7 @@ template class digit_grouping { return count; } - // Applies grouping to digits and write the output to out. + // Applies grouping to digits and writes the output to out. template auto apply(Out out, basic_string_view digits) const -> Out { auto num_digits = static_cast(digits.size()); @@ -3696,32 +3696,18 @@ struct dynamic_spec_getter { } }; -template -FMT_CONSTEXPR auto get_arg(Context& ctx, ID id) -> basic_format_arg { - auto arg = ctx.arg(id); - if (!arg) report_error("argument not found"); - return arg; -} - -template -FMT_CONSTEXPR auto get_dynamic_spec( - arg_id_kind kind, const arg_ref& ref, - Context& ctx) -> int { - FMT_ASSERT(kind != arg_id_kind::none, ""); - auto arg = - kind == arg_id_kind::index ? ctx.arg(ref.index) : ctx.arg(ref.name); - if (!arg) report_error("argument not found"); - unsigned long long value = arg.visit(dynamic_spec_getter()); - if (value > to_unsigned(max_value())) - report_error("width/precision is out of range"); - return static_cast(value); -} - template FMT_CONSTEXPR void handle_dynamic_spec( arg_id_kind kind, int& value, const arg_ref& ref, Context& ctx) { - if (kind != arg_id_kind::none) value = get_dynamic_spec(kind, ref, ctx); + if (kind == arg_id_kind::none) return; + auto arg = + kind == arg_id_kind::index ? ctx.arg(ref.index) : ctx.arg(ref.name); + if (!arg) report_error("argument not found"); + unsigned long long result = arg.visit(dynamic_spec_getter()); + if (result > to_unsigned(max_value())) + report_error("width/precision is out of range"); + value = static_cast(result); } #if FMT_USE_NONTYPE_TEMPLATE_ARGS @@ -3785,7 +3771,8 @@ template struct format_handler { auto on_format_specs(int id, const Char* begin, const Char* end) -> const Char* { - auto arg = get_arg(ctx, id); + auto arg = ctx.arg(id); + if (!arg) report_error("argument not found"); // Not using a visitor for custom types gives better codegen. if (arg.format_custom(begin, parse_ctx, ctx)) return parse_ctx.begin(); diff --git a/include/fmt/printf.h b/include/fmt/printf.h index ab3f2774..cc066d8c 100644 --- a/include/fmt/printf.h +++ b/include/fmt/printf.h @@ -403,7 +403,9 @@ void vprintf(buffer& buf, basic_string_view format, arg_index = parse_ctx.next_arg_id(); else parse_ctx.check_arg_id(--arg_index); - return detail::get_arg(context, arg_index); + auto arg = context.arg(arg_index); + if (!arg) report_error("argument not found"); + return arg; }; const Char* start = parse_ctx.begin();