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/value-to-xml.cc | |
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/value-to-xml.cc')
-rw-r--r-- | src/libexpr/value-to-xml.cc | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/libexpr/value-to-xml.cc b/src/libexpr/value-to-xml.cc index 8955a8a33931..1bb200fb858b 100644 --- a/src/libexpr/value-to-xml.cc +++ b/src/libexpr/value-to-xml.cc @@ -45,7 +45,7 @@ static void showAttrs(EvalState & state, bool strict, bool location, XMLOpenElement _(doc, "attr", xmlAttrs); printValueAsXML(state, strict, location, - a.value, doc, context, drvsSeen); + *a.value, doc, context, drvsSeen); } } @@ -90,16 +90,16 @@ static void printValueAsXML(EvalState & state, bool strict, bool location, Path drvPath; a = v.attrs->find(state.sDrvPath); if (a != v.attrs->end()) { - if (strict) state.forceValue(a->second.value); - if (a->second.value.type == tString) - xmlAttrs["drvPath"] = drvPath = a->second.value.string.s; + if (strict) state.forceValue(*a->second.value); + if (a->second.value->type == tString) + xmlAttrs["drvPath"] = drvPath = a->second.value->string.s; } a = v.attrs->find(state.sOutPath); if (a != v.attrs->end()) { - if (strict) state.forceValue(a->second.value); - if (a->second.value.type == tString) - xmlAttrs["outPath"] = a->second.value.string.s; + if (strict) state.forceValue(*a->second.value); + if (a->second.value->type == tString) + xmlAttrs["outPath"] = a->second.value->string.s; } XMLOpenElement _(doc, "derivation", xmlAttrs); |