diff options
author | jade <lix@jade.fyi> | 2024-05-31 18:57:13 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@lix-systems> | 2024-05-31 18:57:13 +0000 |
commit | a75d7a5777a1f84bdc773c52e5534e08f44a1c5b (patch) | |
tree | 118dd9fdbacf88c1512f0c8c5a266cb082980268 | |
parent | ff08d954206a557ec7afe7301cdb4bb72114875f (diff) | |
parent | ac78c1dcd501233339f6a2f2e67651c2eeac6498 (diff) |
Merge "libutil: fix args assert being thrown on Darwin in nix-eval-jobs" into main
-rw-r--r-- | src/libutil/args.cc | 2 | ||||
-rw-r--r-- | src/libutil/args.hh | 7 | ||||
-rw-r--r-- | src/libutil/args/root.hh | 4 |
3 files changed, 12 insertions, 1 deletions
diff --git a/src/libutil/args.cc b/src/libutil/args.cc index 655b3e82f..1342e7c6a 100644 --- a/src/libutil/args.cc +++ b/src/libutil/args.cc @@ -64,7 +64,7 @@ RootArgs & Args::getRoot() while (p->parent) p = p->parent; - auto * res = dynamic_cast<RootArgs *>(p); + auto res = p->asRootArgs(); assert(res); return *res; } diff --git a/src/libutil/args.hh b/src/libutil/args.hh index 35a5238c0..71f8f88fa 100644 --- a/src/libutil/args.hh +++ b/src/libutil/args.hh @@ -244,6 +244,13 @@ protected: */ virtual void initialFlagsProcessed() {} + /** + * Returns this Args as a RootArgs if it is one, or \ref std::nullopt otherwise. + */ + virtual std::optional<std::reference_wrapper<RootArgs>> asRootArgs() { + return std::nullopt; + } + public: void addFlag(Flag && flag); diff --git a/src/libutil/args/root.hh b/src/libutil/args/root.hh index f8124eaff..499ee6df4 100644 --- a/src/libutil/args/root.hh +++ b/src/libutil/args/root.hh @@ -65,6 +65,10 @@ protected: */ std::set<ExperimentalFeature> flagExperimentalFeatures; + virtual std::optional<std::reference_wrapper<RootArgs>> asRootArgs() override { + return *this; + } + private: std::optional<std::string> needsCompletion(std::string_view s); |