aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjade <lix@jade.fyi>2024-05-31 18:57:13 +0000
committerGerrit Code Review <gerrit@lix-systems>2024-05-31 18:57:13 +0000
commita75d7a5777a1f84bdc773c52e5534e08f44a1c5b (patch)
tree118dd9fdbacf88c1512f0c8c5a266cb082980268 /src
parentff08d954206a557ec7afe7301cdb4bb72114875f (diff)
parentac78c1dcd501233339f6a2f2e67651c2eeac6498 (diff)
Merge "libutil: fix args assert being thrown on Darwin in nix-eval-jobs" into main
Diffstat (limited to 'src')
-rw-r--r--src/libutil/args.cc2
-rw-r--r--src/libutil/args.hh7
-rw-r--r--src/libutil/args/root.hh4
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);