1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-06-25 14:51:16 +02:00

Allow external code using libnixexpr to add types

Code that links to libnixexpr (e.g. plugins loaded with importNative, or
nix-exec) may want to provide custom value types and operations on
values of those types. For example, nix-exec is currently using sets
where a custom IO value type would be more appropriate. This commit
provides a generic hook for such types in the form of tExternal and the
ExternalBase virtual class, which contains all functions necessary for
libnixexpr's type-polymorphic functions (e.g. `showType`) to be
implemented.
This commit is contained in:
Shea Levy 2014-11-30 13:16:19 -05:00
parent 5f04da905f
commit 320659b0cd
5 changed files with 108 additions and 0 deletions

View file

@ -144,12 +144,23 @@ static void printValueAsXML(EvalState & state, bool strict, bool location,
break;
}
case tExternal:
v.external->printValueAsXML(state, strict, location, doc, context, drvsSeen);
break;
default:
doc.writeEmptyElement("unevaluated");
}
}
void ExternalValueBase::printValueAsXML(EvalState & state, bool strict,
bool location, XMLWriter & doc, PathSet & context, PathSet & drvsSeen)
{
doc.writeEmptyElement("unevaluated");
}
void printValueAsXML(EvalState & state, bool strict, bool location,
Value & v, std::ostream & out, PathSet & context)
{