mirror of
https://github.com/NixOS/nix
synced 2025-06-26 07:31:15 +02:00
Allow using RegisterPrimop to define constants.
This enables plugins to add new constants, as well as new primops.
This commit is contained in:
parent
88cd2d41ac
commit
081f14a169
6 changed files with 15 additions and 6 deletions
|
@ -404,7 +404,7 @@ Path EvalState::toRealPath(const Path & path, const PathSet & context)
|
|||
};
|
||||
|
||||
|
||||
void EvalState::addConstant(const string & name, Value & v)
|
||||
Value * EvalState::addConstant(const string & name, Value & v)
|
||||
{
|
||||
Value * v2 = allocValue();
|
||||
*v2 = v;
|
||||
|
@ -412,12 +412,18 @@ void EvalState::addConstant(const string & name, Value & v)
|
|||
baseEnv.values[baseEnvDispl++] = v2;
|
||||
string name2 = string(name, 0, 2) == "__" ? string(name, 2) : name;
|
||||
baseEnv.values[0]->attrs->push_back(Attr(symbols.create(name2), v2));
|
||||
return v2;
|
||||
}
|
||||
|
||||
|
||||
Value * EvalState::addPrimOp(const string & name,
|
||||
unsigned int arity, PrimOpFun primOp)
|
||||
{
|
||||
if (arity == 0) {
|
||||
Value v;
|
||||
primOp(*this, noPos, nullptr, v);
|
||||
return addConstant(name, v);
|
||||
}
|
||||
Value * v = allocValue();
|
||||
string name2 = string(name, 0, 2) == "__" ? string(name, 2) : name;
|
||||
Symbol sym = symbols.create(name2);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue