1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-25 10:41:16 +02:00

nix-expr: Add primops to EvalSettings

This commit is contained in:
Robert Hensing 2025-03-26 08:55:44 +00:00
parent 9b0f455609
commit 3c4c0953e0
5 changed files with 30 additions and 3 deletions

View file

@ -103,4 +103,13 @@ Path getNixDefExpr()
: getHome() + "/.nix-defexpr";
}
void EvalSettings::addPrimOp(PrimOp && primOp)
{
extraPrimOps.emplace_back(std::move(primOp));
}
void EvalSettings::addPrimOp(const PrimOp & primOp)
{
extraPrimOps.emplace_back(PrimOp(primOp));
}
} // namespace nix

View file

@ -7,6 +7,7 @@
namespace nix {
class EvalState;
struct PrimOp;
struct EvalSettings : Config
{
@ -50,6 +51,17 @@ struct EvalSettings : Config
LookupPathHooks lookupPathHooks;
std::vector<PrimOp> extraPrimOps;
/**
* Register a primop to be added when an EvalState is created from these settings.
*/
void addPrimOp(PrimOp && primOp);
/**
* Register a primop to be added when an EvalState is created from these settings.
*/
void addPrimOp(const PrimOp & primOp);
Setting<bool> enableNativeCode{this, false, "allow-unsafe-native-code-during-evaluation", R"(
Enable built-in functions that allow executing native code.

View file

@ -353,7 +353,7 @@ EvalState::EvalState(
#include "fetchurl.nix.gen.hh"
);
createBaseEnv();
createBaseEnv(settings);
}

View file

@ -633,7 +633,7 @@ private:
unsigned int baseEnvDispl = 0;
void createBaseEnv();
void createBaseEnv(const EvalSettings & settings);
Value * addConstant(const std::string & name, Value & v, Constant info);

View file

@ -4669,7 +4669,7 @@ RegisterPrimOp::RegisterPrimOp(PrimOp && primOp)
}
void EvalState::createBaseEnv()
void EvalState::createBaseEnv(const EvalSettings & evalSettings)
{
baseEnv.up = 0;
@ -4928,6 +4928,12 @@ void EvalState::createBaseEnv()
addPrimOp(std::move(primOpAdjusted));
}
for (auto & primOp : evalSettings.extraPrimOps) {
auto primOpAdjusted = primOp;
primOpAdjusted.arity = std::max(primOp.args.size(), primOp.arity);
addPrimOp(std::move(primOpAdjusted));
}
/* Add a wrapper around the derivation primop that computes the
`drvPath' and `outPath' attributes lazily.