mirror of
https://github.com/NixOS/nix.git
synced 2025-11-16 23:42:43 +01:00
Store short strings in Values
The vast majority of strings are < 16 bytes, and so can be stored directly in a Value. This saves a heap allocation and an indirection.
This commit is contained in:
parent
2160258cc4
commit
742a8046de
10 changed files with 107 additions and 78 deletions
|
|
@ -68,10 +68,11 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
|
|||
doc.writeEmptyElement("bool", singletonAttrs("value", v.boolean ? "true" : "false"));
|
||||
break;
|
||||
|
||||
case tString:
|
||||
case tShortString:
|
||||
case tLongString:
|
||||
/* !!! show the context? */
|
||||
v.getContext(context);
|
||||
doc.writeEmptyElement("string", singletonAttrs("value", v.string.s));
|
||||
doc.writeEmptyElement("string", singletonAttrs("value", v.getString()));
|
||||
break;
|
||||
|
||||
case tPath:
|
||||
|
|
@ -92,15 +93,15 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
|
|||
a = v.attrs->find(state.sDrvPath);
|
||||
if (a != v.attrs->end()) {
|
||||
if (strict) state.forceValue(*a->value);
|
||||
if (a->value->type == tString)
|
||||
xmlAttrs["drvPath"] = drvPath = a->value->string.s;
|
||||
if (a->value->isString())
|
||||
xmlAttrs["drvPath"] = drvPath = a->value->getString();
|
||||
}
|
||||
|
||||
a = v.attrs->find(state.sOutPath);
|
||||
if (a != v.attrs->end()) {
|
||||
if (strict) state.forceValue(*a->value);
|
||||
if (a->value->type == tString)
|
||||
xmlAttrs["outPath"] = a->value->string.s;
|
||||
if (a->value->isString())
|
||||
xmlAttrs["outPath"] = a->value->getString();
|
||||
}
|
||||
|
||||
XMLOpenElement _(doc, "derivation", xmlAttrs);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue