1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-26 20:01:15 +02:00

Move attribute set data structures into their own header file.

This modification moves Attr and Bindings structures into their own header
file which is dedicated to the attribute set representation. The goal of to
isolate pieces of code which are related to the attribute set
representation. Thus future modifications of the attribute set
representation will only have to modify these files, and not every other
file across the evaluator.
This commit is contained in:
Nicolas B. Pierron 2015-07-14 19:18:56 +02:00
parent 467977f203
commit db21cfa688
4 changed files with 142 additions and 94 deletions

View file

@ -55,12 +55,6 @@ static void * allocBytes(size_t n)
}
void Bindings::sort()
{
std::sort(begin(), end());
}
static void printValue(std::ostream & str, std::set<const Value *> & active, const Value & v)
{
if (active.find(&v) != active.end()) {
@ -503,20 +497,6 @@ Env & EvalState::allocEnv(unsigned int size)
}
Value * EvalState::allocAttr(Value & vAttrs, const Symbol & name)
{
Value * v = allocValue();
vAttrs.attrs->push_back(Attr(name, v));
return v;
}
Bindings * EvalState::allocBindings(Bindings::size_t capacity)
{
return new (allocBytes(sizeof(Bindings) + sizeof(Attr) * capacity)) Bindings(capacity);
}
void EvalState::mkList(Value & v, unsigned int length)
{
clearValue(v);
@ -527,16 +507,6 @@ void EvalState::mkList(Value & v, unsigned int length)
}
void EvalState::mkAttrs(Value & v, unsigned int expected)
{
clearValue(v);
v.type = tAttrs;
v.attrs = allocBindings(expected);
nrAttrsets++;
nrAttrsInAttrsets += expected;
}
unsigned long nrThunks = 0;
static inline void mkThunk(Value & v, Env & env, Expr * expr)