From 8089af3bb07bfb9982c028aa1f384b43f459a183 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Tue, 13 Jan 2026 13:12:15 -0500 Subject: [PATCH] Better type for `NarMemberConstructor::regular` This makes some invariants clearer and more local. --- src/libutil/nar-listing.cc | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/libutil/nar-listing.cc b/src/libutil/nar-listing.cc index 4a946e379..1483c7a0c 100644 --- a/src/libutil/nar-listing.cc +++ b/src/libutil/nar-listing.cc @@ -12,32 +12,27 @@ NarListing parseNarListing(Source & source) { private: - NarListing & narMember; + NarListing::Regular & regular; uint64_t & pos; public: - NarMemberConstructor(NarListing & nm, uint64_t & pos) - : narMember(nm) + NarMemberConstructor(NarListing::Regular & reg, uint64_t & pos) + : regular(reg) , pos(pos) { } void isExecutable() override { - auto * reg = std::get_if(&narMember.raw); - if (reg) - reg->executable = true; + regular.executable = true; } void preallocateContents(uint64_t size) override { - auto * reg = std::get_if(&narMember.raw); - if (reg) { - reg->contents.fileSize = size; - reg->contents.narOffset = pos; - } + regular.contents.fileSize = size; + regular.contents.narOffset = pos; } void operator()(std::string_view data) override {} @@ -99,7 +94,9 @@ NarListing parseNarListing(Source & source) .narOffset = pos, }, }); - NarMemberConstructor nmc{nm, pos}; + /* We know the downcast will succeed because we just added this */ + auto & reg = std::get(nm.raw); + NarMemberConstructor nmc{reg, pos}; nmc.skipContents = true; /* Don't care about contents. */ func(nmc); }