diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-10-22T14·47+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2010-10-22T14·47+0000 |
commit | 41c45a9b319a5578e2731505ca3de2b9c50b4988 (patch) | |
tree | 8bc5da0b8bcb62393a7f143611d6627b03589400 /src/libexpr/eval.hh | |
parent | 64c3325b0bef8c0234bf797033e129323b36ad1e (diff) |
* Store Value nodes outside of attribute sets. I.e., Attr now stores
a pointer to a Value, rather than the Value directly. This improves the effectiveness of garbage collection a lot: if the Value is stored inside the set directly, then any live pointer to the Value causes all other attributes in the set to be live as well.
Diffstat (limited to 'src/libexpr/eval.hh')
-rw-r--r-- | src/libexpr/eval.hh | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/libexpr/eval.hh b/src/libexpr/eval.hh index 738ca9439f6d..ee7db91a08b2 100644 --- a/src/libexpr/eval.hh +++ b/src/libexpr/eval.hh @@ -122,7 +122,7 @@ struct Env struct Attr { - Value value; + Value * value; Pos * pos; Attr() : pos(&noPos) { }; }; @@ -294,12 +294,15 @@ public: /* Automatically call a function for which each argument has a default value or has a binding in the `args' map. */ - void autoCallFunction(const Bindings & args, Value & fun, Value & res); + void autoCallFunction(Bindings & args, Value & fun, Value & res); /* Allocation primitives. */ + Value * allocValue(); Value * allocValues(unsigned int count); Env & allocEnv(unsigned int size); + Value * allocAttr(Value & vAttrs, const Symbol & name); + void mkList(Value & v, unsigned int length); void mkAttrs(Value & v); void mkThunk_(Value & v, Expr * expr); |