aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr
diff options
context:
space:
mode:
Diffstat (limited to 'src/libexpr')
-rw-r--r--src/libexpr/eval-cache.cc2
-rw-r--r--src/libexpr/eval.cc2
-rw-r--r--src/libexpr/flake/flakeref.cc2
-rw-r--r--src/libexpr/primops.cc14
-rw-r--r--src/libexpr/primops/context.cc6
-rw-r--r--src/libexpr/tests/value/context.cc8
-rw-r--r--src/libexpr/value/context.cc2
-rw-r--r--src/libexpr/value/context.hh94
8 files changed, 59 insertions, 71 deletions
diff --git a/src/libexpr/eval-cache.cc b/src/libexpr/eval-cache.cc
index 6a60ba87b..2c9aa5532 100644
--- a/src/libexpr/eval-cache.cc
+++ b/src/libexpr/eval-cache.cc
@@ -604,7 +604,7 @@ string_t AttrCursor::getStringWithContext()
[&](const NixStringContextElem::Opaque & o) -> const StorePath & {
return o.path;
},
- }, c.raw());
+ }, c.raw);
if (!root->state.store->isValidPath(path)) {
valid = false;
break;
diff --git a/src/libexpr/eval.cc b/src/libexpr/eval.cc
index 79e2c4727..7e839dbe7 100644
--- a/src/libexpr/eval.cc
+++ b/src/libexpr/eval.cc
@@ -2364,7 +2364,7 @@ std::pair<SingleDerivedPath, std::string_view> EvalState::coerceToSingleDerivedP
[&](NixStringContextElem::Built && b) -> SingleDerivedPath {
return std::move(b);
},
- }, ((NixStringContextElem &&) *context.begin()).raw());
+ }, ((NixStringContextElem &&) *context.begin()).raw);
return {
std::move(derivedPath),
std::move(s),
diff --git a/src/libexpr/flake/flakeref.cc b/src/libexpr/flake/flakeref.cc
index d3fa1d557..e1bce90bc 100644
--- a/src/libexpr/flake/flakeref.cc
+++ b/src/libexpr/flake/flakeref.cc
@@ -246,7 +246,7 @@ std::tuple<FlakeRef, std::string, ExtendedOutputsSpec> parseFlakeRefWithFragment
{
auto [prefix, extendedOutputsSpec] = ExtendedOutputsSpec::parse(url);
auto [flakeRef, fragment] = parseFlakeRefWithFragment(std::string { prefix }, baseDir, allowMissing, isFlake);
- return {std::move(flakeRef), fragment, extendedOutputsSpec};
+ return {std::move(flakeRef), fragment, std::move(extendedOutputsSpec)};
}
}
diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc
index 283f99a48..5067da449 100644
--- a/src/libexpr/primops.cc
+++ b/src/libexpr/primops.cc
@@ -69,7 +69,7 @@ StringMap EvalState::realiseContext(const NixStringContext & context)
res.insert_or_assign(ctxS, ctxS);
ensureValid(d.drvPath);
},
- }, c.raw());
+ }, c.raw);
}
if (drvs.empty()) return {};
@@ -1265,7 +1265,7 @@ drvName, Bindings * attrs, Value & v)
[&](const NixStringContextElem::Opaque & o) {
drv.inputSrcs.insert(o.path);
},
- }, c.raw());
+ }, c.raw);
}
/* Do we have all required attributes? */
@@ -1334,13 +1334,13 @@ drvName, Bindings * attrs, Value & v)
if (isImpure)
drv.outputs.insert_or_assign(i,
DerivationOutput::Impure {
- .method = method.raw,
+ .method = method,
.hashType = ht,
});
else
drv.outputs.insert_or_assign(i,
DerivationOutput::CAFloating {
- .method = method.raw,
+ .method = method,
.hashType = ht,
});
}
@@ -1373,7 +1373,7 @@ drvName, Bindings * attrs, Value & v)
drv.env[i] = state.store->printStorePath(outPath);
drv.outputs.insert_or_assign(
i,
- DerivationOutputInputAddressed {
+ DerivationOutput::InputAddressed {
.path = std::move(outPath),
});
}
@@ -1381,7 +1381,7 @@ drvName, Bindings * attrs, Value & v)
;
case DrvHash::Kind::Deferred:
for (auto & i : outputs) {
- drv.outputs.insert_or_assign(i, DerivationOutputDeferred {});
+ drv.outputs.insert_or_assign(i, DerivationOutput::Deferred {});
}
}
}
@@ -2054,7 +2054,7 @@ static void prim_toFile(EvalState & state, const PosIdx pos, Value * * args, Val
StorePathSet refs;
for (auto c : context) {
- if (auto p = std::get_if<NixStringContextElem::Opaque>(&c))
+ if (auto p = std::get_if<NixStringContextElem::Opaque>(&c.raw))
refs.insert(p->path);
else
state.debugThrowLastTrace(EvalError({
diff --git a/src/libexpr/primops/context.cc b/src/libexpr/primops/context.cc
index bfc731744..e8542503a 100644
--- a/src/libexpr/primops/context.cc
+++ b/src/libexpr/primops/context.cc
@@ -51,13 +51,13 @@ static void prim_unsafeDiscardOutputDependency(EvalState & state, const PosIdx p
NixStringContext context2;
for (auto && c : context) {
- if (auto * ptr = std::get_if<NixStringContextElem::DrvDeep>(&c)) {
+ if (auto * ptr = std::get_if<NixStringContextElem::DrvDeep>(&c.raw)) {
context2.emplace(NixStringContextElem::Opaque {
.path = ptr->drvPath
});
} else {
/* Can reuse original item */
- context2.emplace(std::move(c));
+ context2.emplace(std::move(c).raw);
}
}
@@ -114,7 +114,7 @@ static void prim_getContext(EvalState & state, const PosIdx pos, Value * * args,
[&](NixStringContextElem::Opaque && o) {
contextInfos[std::move(o.path)].path = true;
},
- }, ((NixStringContextElem &&) i).raw());
+ }, ((NixStringContextElem &&) i).raw);
}
auto attrs = state.buildBindings(contextInfos.size());
diff --git a/src/libexpr/tests/value/context.cc b/src/libexpr/tests/value/context.cc
index c56b50b59..19407d071 100644
--- a/src/libexpr/tests/value/context.cc
+++ b/src/libexpr/tests/value/context.cc
@@ -47,7 +47,7 @@ TEST(NixStringContextElemTest, slash_invalid) {
TEST(NixStringContextElemTest, opaque) {
std::string_view opaque = "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-x";
auto elem = NixStringContextElem::parse(opaque);
- auto * p = std::get_if<NixStringContextElem::Opaque>(&elem);
+ auto * p = std::get_if<NixStringContextElem::Opaque>(&elem.raw);
ASSERT_TRUE(p);
ASSERT_EQ(p->path, StorePath { opaque });
ASSERT_EQ(elem.to_string(), opaque);
@@ -60,7 +60,7 @@ TEST(NixStringContextElemTest, opaque) {
TEST(NixStringContextElemTest, drvDeep) {
std::string_view drvDeep = "=g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-x.drv";
auto elem = NixStringContextElem::parse(drvDeep);
- auto * p = std::get_if<NixStringContextElem::DrvDeep>(&elem);
+ auto * p = std::get_if<NixStringContextElem::DrvDeep>(&elem.raw);
ASSERT_TRUE(p);
ASSERT_EQ(p->drvPath, StorePath { drvDeep.substr(1) });
ASSERT_EQ(elem.to_string(), drvDeep);
@@ -73,7 +73,7 @@ TEST(NixStringContextElemTest, drvDeep) {
TEST(NixStringContextElemTest, built_opaque) {
std::string_view built = "!foo!g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-x.drv";
auto elem = NixStringContextElem::parse(built);
- auto * p = std::get_if<NixStringContextElem::Built>(&elem);
+ auto * p = std::get_if<NixStringContextElem::Built>(&elem.raw);
ASSERT_TRUE(p);
ASSERT_EQ(p->output, "foo");
ASSERT_EQ(*p->drvPath, ((SingleDerivedPath) SingleDerivedPath::Opaque {
@@ -96,7 +96,7 @@ TEST(NixStringContextElemTest, built_built) {
std::string_view built = "!foo!bar!g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-x.drv";
auto elem = NixStringContextElem::parse(built, mockXpSettings);
- auto * p = std::get_if<NixStringContextElem::Built>(&elem);
+ auto * p = std::get_if<NixStringContextElem::Built>(&elem.raw);
ASSERT_TRUE(p);
ASSERT_EQ(p->output, "foo");
auto * drvPath = std::get_if<SingleDerivedPath::Built>(&*p->drvPath);
diff --git a/src/libexpr/value/context.cc b/src/libexpr/value/context.cc
index d8116011e..22361d8fa 100644
--- a/src/libexpr/value/context.cc
+++ b/src/libexpr/value/context.cc
@@ -99,7 +99,7 @@ std::string NixStringContextElem::to_string() const
res += '=';
res += d.drvPath.to_string();
},
- }, raw());
+ }, raw);
return res;
}
diff --git a/src/libexpr/value/context.hh b/src/libexpr/value/context.hh
index a1b71695b..9f1d59317 100644
--- a/src/libexpr/value/context.hh
+++ b/src/libexpr/value/context.hh
@@ -4,8 +4,7 @@
#include "util.hh"
#include "comparator.hh"
#include "derived-path.hh"
-
-#include <variant>
+#include "variant-wrapper.hh"
#include <nlohmann/json_fwd.hpp>
@@ -26,58 +25,47 @@ public:
}
};
-/**
- * Plain opaque path to some store object.
- *
- * Encoded as just the path: ‘<path>’.
- */
-typedef SingleDerivedPath::Opaque NixStringContextElem_Opaque;
-
-/**
- * Path to a derivation and its entire build closure.
- *
- * The path doesn't just refer to derivation itself and its closure, but
- * also all outputs of all derivations in that closure (including the
- * root derivation).
- *
- * Encoded in the form ‘=<drvPath>’.
- */
-struct NixStringContextElem_DrvDeep {
- StorePath drvPath;
-
- GENERATE_CMP(NixStringContextElem_DrvDeep, me->drvPath);
-};
+struct NixStringContextElem {
+ /**
+ * Plain opaque path to some store object.
+ *
+ * Encoded as just the path: ‘<path>’.
+ */
+ using Opaque = SingleDerivedPath::Opaque;
-/**
- * Derivation output.
- *
- * Encoded in the form ‘!<output>!<drvPath>’.
- */
-typedef SingleDerivedPath::Built NixStringContextElem_Built;
-
-using _NixStringContextElem_Raw = std::variant<
- NixStringContextElem_Opaque,
- NixStringContextElem_DrvDeep,
- NixStringContextElem_Built
->;
-
-struct NixStringContextElem : _NixStringContextElem_Raw {
- using Raw = _NixStringContextElem_Raw;
- using Raw::Raw;
-
- using Opaque = NixStringContextElem_Opaque;
- using DrvDeep = NixStringContextElem_DrvDeep;
- using Built = NixStringContextElem_Built;
-
- inline const Raw & raw() const & {
- return static_cast<const Raw &>(*this);
- }
- inline Raw & raw() & {
- return static_cast<Raw &>(*this);
- }
- inline Raw && raw() && {
- return static_cast<Raw &&>(*this);
- }
+ /**
+ * Path to a derivation and its entire build closure.
+ *
+ * The path doesn't just refer to derivation itself and its closure, but
+ * also all outputs of all derivations in that closure (including the
+ * root derivation).
+ *
+ * Encoded in the form ‘=<drvPath>’.
+ */
+ struct DrvDeep {
+ StorePath drvPath;
+
+ GENERATE_CMP(DrvDeep, me->drvPath);
+ };
+
+ /**
+ * Derivation output.
+ *
+ * Encoded in the form ‘!<output>!<drvPath>’.
+ */
+ using Built = SingleDerivedPath::Built;
+
+ using Raw = std::variant<
+ Opaque,
+ DrvDeep,
+ Built
+ >;
+
+ Raw raw;
+
+ GENERATE_CMP(NixStringContextElem, me->raw);
+
+ MAKE_WRAPPER_CONSTRUCTOR(NixStringContextElem);
/**
* Decode a context string, one of: