1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-10 04:43:53 +02:00

printValueAsJSON(): Don't devirtualize

This is already done by consumers of builtins.toJSON (like
builtins.toFile or builtins.derivation), so we can delay this until
it's actually needed.
This commit is contained in:
Eelco Dolstra 2025-05-08 15:33:14 +02:00
parent 2bbf755bee
commit 6023688c6c
3 changed files with 10 additions and 7 deletions

View file

@ -249,7 +249,11 @@ private:
void printString(Value & v)
{
printLiteralString(output, v.string_view(), options.maxStringLength, options.ansiColors);
NixStringContext context;
copyContext(v, context);
std::ostringstream s;
printLiteralString(s, v.string_view(), options.maxStringLength, options.ansiColors);
output << state.devirtualize(s.str(), context);
}
void printPath(Value & v)

View file

@ -32,11 +32,7 @@ json printValueAsJSON(EvalState & state, bool strict,
case nString:
copyContext(v, context);
// FIXME: only use the context from `v`.
// FIXME: make devirtualization configurable?
// FIXME: don't devirtualize here? It's redundant if
// 'toFile' or 'derivation' also do it.
out = state.devirtualize(v.c_str(), context);
out = v.c_str();
break;
case nPath:

View file

@ -122,7 +122,10 @@ struct CmdEval : MixJSON, InstallableValueCommand, MixReadOnlyOption
}
else if (json) {
logger->cout("%s", printValueAsJSON(*state, true, *v, pos, context, false));
logger->cout("%s",
state->devirtualize(
printValueAsJSON(*state, true, *v, pos, context, false).dump(),
context));
}
else {