forked from lix-project/lix
primops: Explicit registering of primops
Change-Id: I05e72d2bfdc715d9e27cc672ac35619310b0864d
This commit is contained in:
parent
09139554a8
commit
5541723b60
|
@ -18,6 +18,114 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of primops to be regisered explicitely
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern PrimOp primop_abort;
|
||||||
|
extern PrimOp primop_add;
|
||||||
|
extern PrimOp primop_addDrvOutputDependencies;
|
||||||
|
extern PrimOp primop_addErrorContext;
|
||||||
|
extern PrimOp primop_all;
|
||||||
|
extern PrimOp primop_any;
|
||||||
|
extern PrimOp primop_appendContext;
|
||||||
|
extern PrimOp primop_attrNames;
|
||||||
|
extern PrimOp primop_attrValues;
|
||||||
|
extern PrimOp primop_baseNameOf;
|
||||||
|
extern PrimOp primop_bitAnd;
|
||||||
|
extern PrimOp primop_bitOr;
|
||||||
|
extern PrimOp primop_bitXor;
|
||||||
|
extern PrimOp primop_break;
|
||||||
|
extern PrimOp primop_catAttrs;
|
||||||
|
extern PrimOp primop_ceil;
|
||||||
|
extern PrimOp primop_compareVersions;
|
||||||
|
extern PrimOp primop_concatLists;
|
||||||
|
extern PrimOp primop_concatMap;
|
||||||
|
extern PrimOp primop_concatStringsSep;
|
||||||
|
extern PrimOp primop_deepSeq;
|
||||||
|
extern PrimOp primop_derivationStrict;
|
||||||
|
extern PrimOp primop_dirOf;
|
||||||
|
extern PrimOp primop_div;
|
||||||
|
extern PrimOp primop_elem;
|
||||||
|
extern PrimOp primop_elemAt;
|
||||||
|
extern PrimOp primop_fetchClosure;
|
||||||
|
extern PrimOp primop_fetchGit;
|
||||||
|
extern PrimOp primop_fetchMercurial;
|
||||||
|
extern PrimOp primop_fetchTarball;
|
||||||
|
extern PrimOp primop_fetchTree;
|
||||||
|
extern PrimOp primop_fetchurl;
|
||||||
|
extern PrimOp primop_filter;
|
||||||
|
extern PrimOp primop_filterSource;
|
||||||
|
extern PrimOp primop_findFile;
|
||||||
|
extern PrimOp primop_floor;
|
||||||
|
extern PrimOp primop_foldlStrict;
|
||||||
|
extern PrimOp primop_fromJSON;
|
||||||
|
extern PrimOp primop_fromTOML;
|
||||||
|
extern PrimOp primop_functionArgs;
|
||||||
|
extern PrimOp primop_genericClosure;
|
||||||
|
extern PrimOp primop_genList;
|
||||||
|
extern PrimOp primop_getAttr;
|
||||||
|
extern PrimOp primop_getContext;
|
||||||
|
extern PrimOp primop_getEnv;
|
||||||
|
extern PrimOp primop_groupBy;
|
||||||
|
extern PrimOp primop_hasAttr;
|
||||||
|
extern PrimOp primop_hasContext;
|
||||||
|
extern PrimOp primop_hashFile;
|
||||||
|
extern PrimOp primop_hashString;
|
||||||
|
extern PrimOp primop_head;
|
||||||
|
extern PrimOp primop_import;
|
||||||
|
extern PrimOp primop_intersectAttrs;
|
||||||
|
extern PrimOp primop_isAttrs;
|
||||||
|
extern PrimOp primop_isBool;
|
||||||
|
extern PrimOp primop_isFloat;
|
||||||
|
extern PrimOp primop_isFunction;
|
||||||
|
extern PrimOp primop_isInt;
|
||||||
|
extern PrimOp primop_isList;
|
||||||
|
extern PrimOp primop_isNull;
|
||||||
|
extern PrimOp primop_isPath;
|
||||||
|
extern PrimOp primop_isString;
|
||||||
|
extern PrimOp primop_length;
|
||||||
|
extern PrimOp primop_lessThan;
|
||||||
|
extern PrimOp primop_listToAttrs;
|
||||||
|
extern PrimOp primop_map;
|
||||||
|
extern PrimOp primop_mapAttrs;
|
||||||
|
extern PrimOp primop_match;
|
||||||
|
extern PrimOp primop_mul;
|
||||||
|
extern PrimOp primop_outputOf;
|
||||||
|
extern PrimOp primop_parseDrvName;
|
||||||
|
extern PrimOp primop_partition;
|
||||||
|
extern PrimOp primop_path;
|
||||||
|
extern PrimOp primop_pathExists;
|
||||||
|
extern PrimOp primop_placeholder;
|
||||||
|
extern PrimOp primop_readDir;
|
||||||
|
extern PrimOp primop_readFile;
|
||||||
|
extern PrimOp primop_readFileType;
|
||||||
|
extern PrimOp primop_removeAttrs;
|
||||||
|
extern PrimOp primop_replaceStrings;
|
||||||
|
extern PrimOp primop_scopedImport;
|
||||||
|
extern PrimOp primop_seq;
|
||||||
|
extern PrimOp primop_sort;
|
||||||
|
extern PrimOp primop_split;
|
||||||
|
extern PrimOp primop_splitVersion;
|
||||||
|
extern PrimOp primop_storePath;
|
||||||
|
extern PrimOp primop_stringLength;
|
||||||
|
extern PrimOp primop_sub;
|
||||||
|
extern PrimOp primop_substring;
|
||||||
|
extern PrimOp primop_tail;
|
||||||
|
extern PrimOp primop_throw;
|
||||||
|
extern PrimOp primop_toFile;
|
||||||
|
extern PrimOp primop_toJSON;
|
||||||
|
extern PrimOp primop_toPath;
|
||||||
|
extern PrimOp primop_toString;
|
||||||
|
extern PrimOp primop_toXML;
|
||||||
|
extern PrimOp primop_trace;
|
||||||
|
extern PrimOp primop_tryEval;
|
||||||
|
extern PrimOp primop_typeOf;
|
||||||
|
extern PrimOp primop_unsafeDiscardOutputDependency;
|
||||||
|
extern PrimOp primop_unsafeDiscardStringContext;
|
||||||
|
extern PrimOp primop_unsafeGetAttrPos;
|
||||||
|
extern PrimOp primop_zipAttrsWith;
|
||||||
|
|
||||||
RegisterPrimOp::PrimOps * RegisterPrimOp::primOps;
|
RegisterPrimOp::PrimOps * RegisterPrimOp::primOps;
|
||||||
|
|
||||||
RegisterPrimOp::RegisterPrimOp(PrimOp && primOp)
|
RegisterPrimOp::RegisterPrimOp(PrimOp && primOp)
|
||||||
|
@ -312,6 +420,124 @@ void EvalState::createBaseEnv()
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
auto registerPrimOp = [this](PrimOp & p) {
|
||||||
|
// Only register the primop if the associated experimental feature is enabled
|
||||||
|
if (experimentalFeatureSettings.isEnabled(p.experimentalFeature)) {
|
||||||
|
auto adjusted = p;
|
||||||
|
adjusted.arity = std::max(p.args.size(), p.arity); // Don't trust what is defined
|
||||||
|
addPrimOp(std::move(adjusted));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Register the primops explicitely
|
||||||
|
*/
|
||||||
|
|
||||||
|
registerPrimOp(primop_abort);
|
||||||
|
registerPrimOp(primop_add);
|
||||||
|
registerPrimOp(primop_addDrvOutputDependencies);
|
||||||
|
registerPrimOp(primop_addErrorContext);
|
||||||
|
registerPrimOp(primop_all);
|
||||||
|
registerPrimOp(primop_any);
|
||||||
|
registerPrimOp(primop_appendContext);
|
||||||
|
registerPrimOp(primop_attrNames);
|
||||||
|
registerPrimOp(primop_attrValues);
|
||||||
|
registerPrimOp(primop_baseNameOf);
|
||||||
|
registerPrimOp(primop_bitAnd);
|
||||||
|
registerPrimOp(primop_bitOr);
|
||||||
|
registerPrimOp(primop_bitXor);
|
||||||
|
registerPrimOp(primop_break);
|
||||||
|
registerPrimOp(primop_catAttrs);
|
||||||
|
registerPrimOp(primop_ceil);
|
||||||
|
registerPrimOp(primop_compareVersions);
|
||||||
|
registerPrimOp(primop_concatLists);
|
||||||
|
registerPrimOp(primop_concatMap);
|
||||||
|
registerPrimOp(primop_concatStringsSep);
|
||||||
|
registerPrimOp(primop_deepSeq);
|
||||||
|
registerPrimOp(primop_derivationStrict);
|
||||||
|
registerPrimOp(primop_dirOf);
|
||||||
|
registerPrimOp(primop_div);
|
||||||
|
registerPrimOp(primop_elem);
|
||||||
|
registerPrimOp(primop_elemAt);
|
||||||
|
registerPrimOp(primop_fetchClosure);
|
||||||
|
registerPrimOp(primop_fetchGit);
|
||||||
|
registerPrimOp(primop_fetchMercurial);
|
||||||
|
registerPrimOp(primop_fetchTarball);
|
||||||
|
registerPrimOp(primop_fetchTree);
|
||||||
|
registerPrimOp(primop_fetchurl);
|
||||||
|
registerPrimOp(primop_filter);
|
||||||
|
registerPrimOp(primop_filterSource);
|
||||||
|
registerPrimOp(primop_findFile);
|
||||||
|
registerPrimOp(primop_floor);
|
||||||
|
registerPrimOp(primop_foldlStrict);
|
||||||
|
registerPrimOp(primop_fromJSON);
|
||||||
|
registerPrimOp(primop_fromTOML);
|
||||||
|
registerPrimOp(primop_functionArgs);
|
||||||
|
registerPrimOp(primop_genericClosure);
|
||||||
|
registerPrimOp(primop_genList);
|
||||||
|
registerPrimOp(primop_getAttr);
|
||||||
|
registerPrimOp(primop_getContext);
|
||||||
|
registerPrimOp(primop_getEnv);
|
||||||
|
registerPrimOp(primop_groupBy);
|
||||||
|
registerPrimOp(primop_hasAttr);
|
||||||
|
registerPrimOp(primop_hasContext);
|
||||||
|
registerPrimOp(primop_hashFile);
|
||||||
|
registerPrimOp(primop_hashString);
|
||||||
|
registerPrimOp(primop_head);
|
||||||
|
registerPrimOp(primop_import);
|
||||||
|
registerPrimOp(primop_intersectAttrs);
|
||||||
|
registerPrimOp(primop_isAttrs);
|
||||||
|
registerPrimOp(primop_isBool);
|
||||||
|
registerPrimOp(primop_isFloat);
|
||||||
|
registerPrimOp(primop_isFunction);
|
||||||
|
registerPrimOp(primop_isInt);
|
||||||
|
registerPrimOp(primop_isList);
|
||||||
|
registerPrimOp(primop_isNull);
|
||||||
|
registerPrimOp(primop_isPath);
|
||||||
|
registerPrimOp(primop_isString);
|
||||||
|
registerPrimOp(primop_length);
|
||||||
|
registerPrimOp(primop_lessThan);
|
||||||
|
registerPrimOp(primop_listToAttrs);
|
||||||
|
registerPrimOp(primop_map);
|
||||||
|
registerPrimOp(primop_mapAttrs);
|
||||||
|
registerPrimOp(primop_match);
|
||||||
|
registerPrimOp(primop_mul);
|
||||||
|
registerPrimOp(primop_outputOf);
|
||||||
|
registerPrimOp(primop_parseDrvName);
|
||||||
|
registerPrimOp(primop_partition);
|
||||||
|
registerPrimOp(primop_path);
|
||||||
|
registerPrimOp(primop_pathExists);
|
||||||
|
registerPrimOp(primop_placeholder);
|
||||||
|
registerPrimOp(primop_readDir);
|
||||||
|
registerPrimOp(primop_readFile);
|
||||||
|
registerPrimOp(primop_readFileType);
|
||||||
|
registerPrimOp(primop_removeAttrs);
|
||||||
|
registerPrimOp(primop_replaceStrings);
|
||||||
|
registerPrimOp(primop_scopedImport);
|
||||||
|
registerPrimOp(primop_seq);
|
||||||
|
registerPrimOp(primop_sort);
|
||||||
|
registerPrimOp(primop_split);
|
||||||
|
registerPrimOp(primop_splitVersion);
|
||||||
|
registerPrimOp(primop_storePath);
|
||||||
|
registerPrimOp(primop_stringLength);
|
||||||
|
registerPrimOp(primop_sub);
|
||||||
|
registerPrimOp(primop_substring);
|
||||||
|
registerPrimOp(primop_tail);
|
||||||
|
registerPrimOp(primop_throw);
|
||||||
|
registerPrimOp(primop_toFile);
|
||||||
|
registerPrimOp(primop_toJSON);
|
||||||
|
registerPrimOp(primop_toPath);
|
||||||
|
registerPrimOp(primop_toString);
|
||||||
|
registerPrimOp(primop_toXML);
|
||||||
|
registerPrimOp(primop_trace);
|
||||||
|
registerPrimOp(primop_tryEval);
|
||||||
|
registerPrimOp(primop_typeOf);
|
||||||
|
registerPrimOp(primop_unsafeDiscardOutputDependency);
|
||||||
|
registerPrimOp(primop_unsafeDiscardStringContext);
|
||||||
|
registerPrimOp(primop_unsafeGetAttrPos);
|
||||||
|
registerPrimOp(primop_zipAttrsWith);
|
||||||
|
|
||||||
|
// Legacy way of registering primops, using c++ arcanes
|
||||||
if (RegisterPrimOp::primOps) {
|
if (RegisterPrimOp::primOps) {
|
||||||
for (auto & primOp : *RegisterPrimOp::primOps) {
|
for (auto & primOp : *RegisterPrimOp::primOps) {
|
||||||
if (experimentalFeatureSettings.isEnabled(primOp.experimentalFeature)) {
|
if (experimentalFeatureSettings.isEnabled(primOp.experimentalFeature)) {
|
||||||
|
|
|
@ -25,7 +25,7 @@ static void prim_add(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_add({
|
PrimOp primop_add({
|
||||||
.name = "__add",
|
.name = "__add",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -52,7 +52,7 @@ static void prim_bitAnd(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_bitAnd({
|
PrimOp primop_bitAnd({
|
||||||
.name = "__bitAnd",
|
.name = "__bitAnd",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -77,7 +77,7 @@ static void prim_bitOr(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_bitOr({
|
PrimOp primop_bitOr({
|
||||||
.name = "__bitOr",
|
.name = "__bitOr",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -102,7 +102,7 @@ static void prim_bitXor(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_bitXor({
|
PrimOp primop_bitXor({
|
||||||
.name = "__bitXor",
|
.name = "__bitXor",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -125,7 +125,7 @@ static void prim_ceil(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
v.mkInt(ceil(value));
|
v.mkInt(ceil(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_ceil({
|
PrimOp primop_ceil({
|
||||||
.name = "__ceil",
|
.name = "__ceil",
|
||||||
.args = {"double"},
|
.args = {"double"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -172,7 +172,7 @@ static void prim_div(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_div({
|
PrimOp primop_div({
|
||||||
.name = "__div",
|
.name = "__div",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -195,7 +195,7 @@ static void prim_floor(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
v.mkInt(floor(value));
|
v.mkInt(floor(value));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_floor({
|
PrimOp primop_floor({
|
||||||
.name = "__floor",
|
.name = "__floor",
|
||||||
.args = {"double"},
|
.args = {"double"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -221,7 +221,7 @@ void prim_lessThan(EvalState & state, const PosIdx pos, Value ** args, Value & v
|
||||||
v.mkBool(comp(args[0], args[1]));
|
v.mkBool(comp(args[0], args[1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_lessThan({
|
PrimOp primop_lessThan({
|
||||||
.name = "__lessThan",
|
.name = "__lessThan",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -259,7 +259,7 @@ static void prim_mul(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_mul({
|
PrimOp primop_mul({
|
||||||
.name = "__mul",
|
.name = "__mul",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -295,7 +295,7 @@ static void prim_sub(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_sub({
|
PrimOp primop_sub({
|
||||||
.name = "__sub",
|
.name = "__sub",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -35,7 +35,7 @@ static void prim_attrNames(EvalState & state, const PosIdx pos, Value ** args, V
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_attrNames({
|
PrimOp primop_attrNames({
|
||||||
.name = "__attrNames",
|
.name = "__attrNames",
|
||||||
.args = {"set"},
|
.args = {"set"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -72,7 +72,7 @@ static void prim_attrValues(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_attrValues({
|
PrimOp primop_attrValues({
|
||||||
.name = "__attrValues",
|
.name = "__attrValues",
|
||||||
.args = {"set"},
|
.args = {"set"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -116,7 +116,7 @@ static void prim_catAttrs(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_catAttrs({
|
PrimOp primop_catAttrs({
|
||||||
.name = "__catAttrs",
|
.name = "__catAttrs",
|
||||||
.args = {"attr", "list"},
|
.args = {"attr", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -239,7 +239,7 @@ static void prim_genericClosure(EvalState & state, const PosIdx pos, Value ** ar
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_genericClosure(PrimOp{
|
PrimOp primop_genericClosure(PrimOp{
|
||||||
.name = "__genericClosure",
|
.name = "__genericClosure",
|
||||||
.args = {"attrset"},
|
.args = {"attrset"},
|
||||||
.arity = 1,
|
.arity = 1,
|
||||||
|
@ -298,7 +298,7 @@ void prim_getAttr(EvalState & state, const PosIdx pos, Value ** args, Value & v)
|
||||||
v = *i->value;
|
v = *i->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_getAttr({
|
PrimOp primop_getAttr({
|
||||||
.name = "__getAttr",
|
.name = "__getAttr",
|
||||||
.args = {"s", "set"},
|
.args = {"s", "set"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -350,7 +350,7 @@ static void prim_groupBy(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
v.mkAttrs(attrs2.alreadySorted());
|
v.mkAttrs(attrs2.alreadySorted());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_groupBy({
|
PrimOp primop_groupBy({
|
||||||
.name = "__groupBy",
|
.name = "__groupBy",
|
||||||
.args = {"f", "list"},
|
.args = {"f", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -389,7 +389,7 @@ static void prim_hasAttr(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
v.mkBool(args[1]->attrs->find(state.symbols.create(attr)) != args[1]->attrs->end());
|
v.mkBool(args[1]->attrs->find(state.symbols.create(attr)) != args[1]->attrs->end());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_hasAttr({
|
PrimOp primop_hasAttr({
|
||||||
.name = "__hasAttr",
|
.name = "__hasAttr",
|
||||||
.args = {"s", "set"},
|
.args = {"s", "set"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -475,7 +475,7 @@ static void prim_intersectAttrs(EvalState & state, const PosIdx pos, Value ** ar
|
||||||
v.mkAttrs(attrs.alreadySorted());
|
v.mkAttrs(attrs.alreadySorted());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_intersectAttrs({
|
PrimOp primop_intersectAttrs({
|
||||||
.name = "__intersectAttrs",
|
.name = "__intersectAttrs",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -510,7 +510,7 @@ static void prim_mapAttrs(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
v.mkAttrs(attrs.alreadySorted());
|
v.mkAttrs(attrs.alreadySorted());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_mapAttrs({
|
PrimOp primop_mapAttrs({
|
||||||
.name = "__mapAttrs",
|
.name = "__mapAttrs",
|
||||||
.args = {"f", "attrset"},
|
.args = {"f", "attrset"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -568,7 +568,7 @@ static void prim_removeAttrs(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
v.mkAttrs(attrs.alreadySorted());
|
v.mkAttrs(attrs.alreadySorted());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_removeAttrs({
|
PrimOp primop_removeAttrs({
|
||||||
.name = "removeAttrs",
|
.name = "removeAttrs",
|
||||||
.args = {"set", "list"},
|
.args = {"set", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -647,7 +647,7 @@ static void prim_zipAttrsWith(EvalState & state, const PosIdx pos, Value ** args
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_zipAttrsWith({
|
PrimOp primop_zipAttrsWith({
|
||||||
.name = "__zipAttrsWith",
|
.name = "__zipAttrsWith",
|
||||||
.args = {"f", "list"},
|
.args = {"f", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -159,7 +159,7 @@ prim_addDrvOutputDependencies(EvalState & state, const PosIdx pos, Value ** args
|
||||||
v.mkString(*s, context2);
|
v.mkString(*s, context2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_addDrvOutputDependencies(
|
PrimOp primop_addDrvOutputDependencies(
|
||||||
{.name = "__addDrvOutputDependencies",
|
{.name = "__addDrvOutputDependencies",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -202,7 +202,7 @@ static void prim_addErrorContext(EvalState & state, const PosIdx pos, Value ** a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_addErrorContext(PrimOp{
|
PrimOp primop_addErrorContext(PrimOp{
|
||||||
.name = "__addErrorContext",
|
.name = "__addErrorContext",
|
||||||
.arity = 2,
|
.arity = 2,
|
||||||
.fun = prim_addErrorContext,
|
.fun = prim_addErrorContext,
|
||||||
|
@ -310,7 +310,7 @@ static void prim_appendContext(EvalState & state, const PosIdx pos, Value ** arg
|
||||||
v.mkString(orig, context);
|
v.mkString(orig, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_appendContext({
|
PrimOp primop_appendContext({
|
||||||
.name = "__appendContext",
|
.name = "__appendContext",
|
||||||
.arity = 2,
|
.arity = 2,
|
||||||
.fun = prim_appendContext,
|
.fun = prim_appendContext,
|
||||||
|
@ -397,7 +397,7 @@ static void prim_getContext(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_getContext({
|
PrimOp primop_getContext({
|
||||||
.name = "__getContext",
|
.name = "__getContext",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -435,7 +435,7 @@ static void prim_hasContext(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
v.mkBool(!context.empty());
|
v.mkBool(!context.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_hasContext(
|
PrimOp primop_hasContext(
|
||||||
{.name = "__hasContext",
|
{.name = "__hasContext",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -487,7 +487,7 @@ prim_unsafeDiscardOutputDependency(EvalState & state, const PosIdx pos, Value **
|
||||||
v.mkString(*s, context2);
|
v.mkString(*s, context2);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_unsafeDiscardOutputDependency(
|
PrimOp primop_unsafeDiscardOutputDependency(
|
||||||
{.name = "__unsafeDiscardOutputDependency",
|
{.name = "__unsafeDiscardOutputDependency",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -523,7 +523,7 @@ prim_unsafeDiscardStringContext(EvalState & state, const PosIdx pos, Value ** ar
|
||||||
v.mkString(*s);
|
v.mkString(*s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_unsafeDiscardStringContext({
|
PrimOp primop_unsafeDiscardStringContext({
|
||||||
.name = "__unsafeDiscardStringContext",
|
.name = "__unsafeDiscardStringContext",
|
||||||
.arity = 1,
|
.arity = 1,
|
||||||
.fun = prim_unsafeDiscardStringContext,
|
.fun = prim_unsafeDiscardStringContext,
|
||||||
|
|
|
@ -22,7 +22,7 @@ static void prim_abort(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
.debugThrow();
|
.debugThrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_abort({
|
PrimOp primop_abort({
|
||||||
.name = "abort",
|
.name = "abort",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -52,7 +52,7 @@ static void prim_break(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
v = *args[0];
|
v = *args[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_break({
|
PrimOp primop_break({
|
||||||
.name = "break",
|
.name = "break",
|
||||||
.args = {"v"},
|
.args = {"v"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -78,7 +78,7 @@ static void prim_throw(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
state.error<ThrownError>(s).debugThrow();
|
state.error<ThrownError>(s).debugThrow();
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_throw({
|
PrimOp primop_throw({
|
||||||
.name = "throw",
|
.name = "throw",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -126,7 +126,7 @@ static void prim_tryEval(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_tryEval({
|
PrimOp primop_tryEval({
|
||||||
.name = "__tryEval",
|
.name = "__tryEval",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -72,7 +72,7 @@ static void prim_deepSeq(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
v = *args[1];
|
v = *args[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_deepSeq({
|
PrimOp primop_deepSeq({
|
||||||
.name = "__deepSeq",
|
.name = "__deepSeq",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -94,7 +94,7 @@ static void prim_seq(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
v = *args[1];
|
v = *args[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_seq({
|
PrimOp primop_seq({
|
||||||
.name = "__seq",
|
.name = "__seq",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -124,7 +124,7 @@ void prim_trace(EvalState & state, const PosIdx pos, Value ** args, Value & v)
|
||||||
v = *args[1];
|
v = *args[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_trace({
|
PrimOp primop_trace({
|
||||||
.name = "__trace",
|
.name = "__trace",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -161,7 +161,7 @@ static void prim_unsafeGetAttrPos(EvalState & state, const PosIdx pos, Value **
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_unsafeGetAttrPos(PrimOp{
|
PrimOp primop_unsafeGetAttrPos(PrimOp{
|
||||||
.name = "__unsafeGetAttrPos",
|
.name = "__unsafeGetAttrPos",
|
||||||
.arity = 2,
|
.arity = 2,
|
||||||
.fun = prim_unsafeGetAttrPos,
|
.fun = prim_unsafeGetAttrPos,
|
||||||
|
|
|
@ -389,7 +389,7 @@ static void prim_derivationStrict(EvalState & state, const PosIdx pos, Value * *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_derivationStrict(PrimOp {
|
PrimOp primop_derivationStrict(PrimOp {
|
||||||
.name = "derivationStrict",
|
.name = "derivationStrict",
|
||||||
.arity = 1,
|
.arity = 1,
|
||||||
.fun = prim_derivationStrict,
|
.fun = prim_derivationStrict,
|
||||||
|
|
|
@ -207,7 +207,7 @@ static void prim_fetchClosure(EvalState & state, const PosIdx pos, Value * * arg
|
||||||
runFetchClosureWithContentAddressedPath(state, pos, *fromStore, *fromPath, v);
|
runFetchClosureWithContentAddressedPath(state, pos, *fromStore, *fromPath, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fetchClosure({
|
PrimOp primop_fetchClosure({
|
||||||
.name = "__fetchClosure",
|
.name = "__fetchClosure",
|
||||||
.args = {"args"},
|
.args = {"args"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -83,7 +83,7 @@ static void prim_fetchMercurial(EvalState & state, const PosIdx pos, Value * * a
|
||||||
state.allowPath(tree.storePath);
|
state.allowPath(tree.storePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp r_fetchMercurial({
|
PrimOp primop_fetchMercurial({
|
||||||
.name = "fetchMercurial",
|
.name = "fetchMercurial",
|
||||||
.arity = 1,
|
.arity = 1,
|
||||||
.fun = prim_fetchMercurial
|
.fun = prim_fetchMercurial
|
||||||
|
|
|
@ -198,7 +198,7 @@ static void prim_fetchTree(EvalState & state, const PosIdx pos, Value * * args,
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: document
|
// FIXME: document
|
||||||
static RegisterPrimOp primop_fetchTree({
|
PrimOp primop_fetchTree({
|
||||||
.name = "fetchTree",
|
.name = "fetchTree",
|
||||||
.arity = 1,
|
.arity = 1,
|
||||||
.fun = prim_fetchTree
|
.fun = prim_fetchTree
|
||||||
|
@ -290,7 +290,7 @@ static void prim_fetchurl(EvalState & state, const PosIdx pos, Value * * args, V
|
||||||
fetch(state, pos, args, v, "fetchurl", false, "");
|
fetch(state, pos, args, v, "fetchurl", false, "");
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fetchurl({
|
PrimOp primop_fetchurl({
|
||||||
.name = "__fetchurl",
|
.name = "__fetchurl",
|
||||||
.args = {"url"},
|
.args = {"url"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -306,7 +306,7 @@ static void prim_fetchTarball(EvalState & state, const PosIdx pos, Value * * arg
|
||||||
fetch(state, pos, args, v, "fetchTarball", true, "source");
|
fetch(state, pos, args, v, "fetchTarball", true, "source");
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fetchTarball({
|
PrimOp primop_fetchTarball({
|
||||||
.name = "fetchTarball",
|
.name = "fetchTarball",
|
||||||
.args = {"args"},
|
.args = {"args"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -356,7 +356,7 @@ static void prim_fetchGit(EvalState & state, const PosIdx pos, Value * * args, V
|
||||||
fetchTree(state, pos, args, v, "git", FetchTreeParams { .emptyRevFallback = true, .allowNameArgument = true });
|
fetchTree(state, pos, args, v, "git", FetchTreeParams { .emptyRevFallback = true, .allowNameArgument = true });
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fetchGit({
|
PrimOp primop_fetchGit({
|
||||||
.name = "fetchGit",
|
.name = "fetchGit",
|
||||||
.args = {"args"},
|
.args = {"args"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -86,7 +86,7 @@ static void prim_fromTOML(EvalState & state, const PosIdx pos, Value * * args, V
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fromTOML({
|
PrimOp primop_fromTOML({
|
||||||
.name = "fromTOML",
|
.name = "fromTOML",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -22,7 +22,7 @@ static void prim_hashFile(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
v.mkString(hashString(*ht, path.readFile()).to_string(Base16, false));
|
v.mkString(hashString(*ht, path.readFile()).to_string(Base16, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_hashFile({
|
PrimOp primop_hashFile({
|
||||||
.name = "__hashFile",
|
.name = "__hashFile",
|
||||||
.args = {"type", "p"},
|
.args = {"type", "p"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -55,7 +55,7 @@ static void prim_hashString(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
v.mkString(hashString(*ht, s).to_string(Base16, false));
|
v.mkString(hashString(*ht, s).to_string(Base16, false));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_hashString({
|
PrimOp primop_hashString({
|
||||||
.name = "__hashString",
|
.name = "__hashString",
|
||||||
.args = {"type", "s"},
|
.args = {"type", "s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -150,7 +150,7 @@ static void prim_import(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
import(state, pos, *args[0], nullptr, v);
|
import(state, pos, *args[0], nullptr, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_import({
|
PrimOp primop_import({
|
||||||
.name = "import",
|
.name = "import",
|
||||||
.args = {"path"},
|
.args = {"path"},
|
||||||
// TODO turn "normal path values" into link below
|
// TODO turn "normal path values" into link below
|
||||||
|
@ -261,7 +261,7 @@ static void prim_scopedImport(EvalState & state, const PosIdx pos, Value ** args
|
||||||
import(state, pos, *args[1], args[0], v);
|
import(state, pos, *args[1], args[0], v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_scopedImport(PrimOp{
|
PrimOp primop_scopedImport(PrimOp{
|
||||||
.name = "scopedImport",
|
.name = "scopedImport",
|
||||||
.arity = 2,
|
.arity = 2,
|
||||||
.fun = prim_scopedImport,
|
.fun = prim_scopedImport,
|
||||||
|
|
|
@ -21,7 +21,7 @@ static void prim_fromJSON(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_fromJSON({
|
PrimOp primop_fromJSON({
|
||||||
.name = "__fromJSON",
|
.name = "__fromJSON",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -48,7 +48,7 @@ static void prim_toJSON(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
v.mkString(out.str(), context);
|
v.mkString(out.str(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_toJSON({
|
PrimOp primop_toJSON({
|
||||||
.name = "__toJSON",
|
.name = "__toJSON",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -45,7 +45,7 @@ static void prim_all(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
anyOrAll(false, state, pos, args, v);
|
anyOrAll(false, state, pos, args, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_all({
|
PrimOp primop_all({
|
||||||
.name = "__all",
|
.name = "__all",
|
||||||
.args = {"pred", "list"},
|
.args = {"pred", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -64,7 +64,7 @@ static void prim_any(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
anyOrAll(true, state, pos, args, v);
|
anyOrAll(true, state, pos, args, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_any({
|
PrimOp primop_any({
|
||||||
.name = "__any",
|
.name = "__any",
|
||||||
.args = {"pred", "list"},
|
.args = {"pred", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -92,7 +92,7 @@ static void prim_concatLists(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_concatLists({
|
PrimOp primop_concatLists({
|
||||||
.name = "__concatLists",
|
.name = "__concatLists",
|
||||||
.args = {"lists"},
|
.args = {"lists"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -142,7 +142,7 @@ static void prim_concatMap(EvalState & state, const PosIdx pos, Value ** args, V
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_concatMap({
|
PrimOp primop_concatMap({
|
||||||
.name = "__concatMap",
|
.name = "__concatMap",
|
||||||
.args = {"f", "list"},
|
.args = {"f", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -175,7 +175,7 @@ static void prim_elem(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
v.mkBool(res);
|
v.mkBool(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_elem({
|
PrimOp primop_elem({
|
||||||
.name = "__elem",
|
.name = "__elem",
|
||||||
.args = {"x", "xs"},
|
.args = {"x", "xs"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -202,7 +202,7 @@ static void prim_elemAt(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_elemAt({
|
PrimOp primop_elemAt({
|
||||||
.name = "__elemAt",
|
.name = "__elemAt",
|
||||||
.args = {"xs", "n"},
|
.args = {"xs", "n"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -287,7 +287,7 @@ static void prim_foldlStrict(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_foldlStrict({
|
PrimOp primop_foldlStrict({
|
||||||
.name = "__foldl'",
|
.name = "__foldl'",
|
||||||
.args = {"op", "nul", "list"},
|
.args = {"op", "nul", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -325,7 +325,7 @@ static void prim_genList(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_genList({
|
PrimOp primop_genList({
|
||||||
.name = "__genList",
|
.name = "__genList",
|
||||||
.args = {"generator", "length"},
|
.args = {"generator", "length"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -348,7 +348,7 @@ static void prim_head(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
elemAt(state, pos, *args[0], 0, v);
|
elemAt(state, pos, *args[0], 0, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_head({
|
PrimOp primop_head({
|
||||||
.name = "__head",
|
.name = "__head",
|
||||||
.args = {"list"},
|
.args = {"list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -368,7 +368,7 @@ static void prim_length(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
state.forceList(*args[0], pos, "while evaluating the first argument passed to builtins.length");
|
state.forceList(*args[0], pos, "while evaluating the first argument passed to builtins.length");
|
||||||
v.mkInt(args[0]->listSize());
|
v.mkInt(args[0]->listSize());
|
||||||
}
|
}
|
||||||
static RegisterPrimOp primop_length({
|
PrimOp primop_length({
|
||||||
.name = "__length",
|
.name = "__length",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -377,7 +377,7 @@ static RegisterPrimOp primop_length({
|
||||||
.fun = prim_length,
|
.fun = prim_length,
|
||||||
});
|
});
|
||||||
|
|
||||||
static RegisterPrimOp primop_filter({
|
PrimOp primop_filter({
|
||||||
.name = "__filter",
|
.name = "__filter",
|
||||||
.args = {"f", "list"},
|
.args = {"f", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -425,7 +425,7 @@ static void prim_listToAttrs(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_listToAttrs({
|
PrimOp primop_listToAttrs({
|
||||||
.name = "__listToAttrs",
|
.name = "__listToAttrs",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -479,7 +479,7 @@ static void prim_map(EvalState & state, const PosIdx pos, Value ** args, Value &
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_map({
|
PrimOp primop_map({
|
||||||
.name = "map",
|
.name = "map",
|
||||||
.args = {"f", "list"},
|
.args = {"f", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -549,7 +549,7 @@ static void prim_partition(EvalState & state, const PosIdx pos, Value ** args, V
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_partition({
|
PrimOp primop_partition({
|
||||||
.name = "__partition",
|
.name = "__partition",
|
||||||
.args = {"pred", "list"},
|
.args = {"pred", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -624,7 +624,7 @@ static void prim_sort(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
std::stable_sort(v.listElems(), v.listElems() + len, comparator);
|
std::stable_sort(v.listElems(), v.listElems() + len, comparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_sort({
|
PrimOp primop_sort({
|
||||||
.name = "__sort",
|
.name = "__sort",
|
||||||
.args = {"comparator", "list"},
|
.args = {"comparator", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -662,7 +662,7 @@ static void prim_tail(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_tail({
|
PrimOp primop_tail({
|
||||||
.name = "__tail",
|
.name = "__tail",
|
||||||
.args = {"list"},
|
.args = {"list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -154,7 +154,7 @@ static void prim_dirOf(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_dirOf({
|
PrimOp primop_dirOf({
|
||||||
.name = "dirOf",
|
.name = "dirOf",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -194,7 +194,7 @@ static void prim_filterSource(EvalState & state, const PosIdx pos, Value ** args
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_filterSource({
|
PrimOp primop_filterSource({
|
||||||
.name = "__filterSource",
|
.name = "__filterSource",
|
||||||
.args = {"e1", "e2"},
|
.args = {"e1", "e2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -314,7 +314,7 @@ static void prim_findFile(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
v.mkPath(state.checkSourcePath(state.findFile(searchPath, path, pos)));
|
v.mkPath(state.checkSourcePath(state.findFile(searchPath, path, pos)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_findFile(PrimOp{
|
PrimOp primop_findFile(PrimOp{
|
||||||
.name = "__findFile",
|
.name = "__findFile",
|
||||||
.args = {"search path", "lookup path"},
|
.args = {"search path", "lookup path"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -386,7 +386,7 @@ static void prim_outputOf(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_outputOf({
|
PrimOp primop_outputOf({
|
||||||
.name = "__outputOf",
|
.name = "__outputOf",
|
||||||
.args = {"derivation-reference", "output-name"},
|
.args = {"derivation-reference", "output-name"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -488,7 +488,7 @@ static void prim_path(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
addPath(state, pos, name, path->path.abs(), filterFun, method, expectedHash, v, context);
|
addPath(state, pos, name, path->path.abs(), filterFun, method, expectedHash, v, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_path({
|
PrimOp primop_path({
|
||||||
.name = "__path",
|
.name = "__path",
|
||||||
.args = {"args"},
|
.args = {"args"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -559,7 +559,7 @@ static void prim_pathExists(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_pathExists({
|
PrimOp primop_pathExists({
|
||||||
.name = "__pathExists",
|
.name = "__pathExists",
|
||||||
.args = {"path"},
|
.args = {"path"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -587,7 +587,7 @@ static void prim_placeholder(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
)));
|
)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_placeholder({
|
PrimOp primop_placeholder({
|
||||||
.name = "placeholder",
|
.name = "placeholder",
|
||||||
.args = {"output"},
|
.args = {"output"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -612,7 +612,7 @@ static void prim_toPath(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
v.mkString(path.path.abs(), context);
|
v.mkString(path.path.abs(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_toPath({
|
PrimOp primop_toPath({
|
||||||
.name = "__toPath",
|
.name = "__toPath",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -664,7 +664,7 @@ static void prim_readDir(EvalState & state, const PosIdx pos, Value ** args, Val
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_readDir({
|
PrimOp primop_readDir({
|
||||||
.name = "__readDir",
|
.name = "__readDir",
|
||||||
.args = {"path"},
|
.args = {"path"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -720,7 +720,7 @@ static void prim_readFile(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
v.mkString(s, context);
|
v.mkString(s, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_readFile({
|
PrimOp primop_readFile({
|
||||||
.name = "__readFile",
|
.name = "__readFile",
|
||||||
.args = {"path"},
|
.args = {"path"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -740,7 +740,7 @@ static void prim_readFileType(EvalState & state, const PosIdx pos, Value ** args
|
||||||
v.mkString(fileTypeToString(path.lstat().type));
|
v.mkString(fileTypeToString(path.lstat().type));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_readFileType({
|
PrimOp primop_readFileType({
|
||||||
.name = "__readFileType",
|
.name = "__readFileType",
|
||||||
.args = {"p"},
|
.args = {"p"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -788,7 +788,7 @@ static void prim_storePath(EvalState & state, const PosIdx pos, Value ** args, V
|
||||||
v.mkString(path.abs(), context);
|
v.mkString(path.abs(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_storePath({
|
PrimOp primop_storePath({
|
||||||
.name = "__storePath",
|
.name = "__storePath",
|
||||||
.args = {"path"},
|
.args = {"path"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -852,7 +852,7 @@ static void prim_toFile(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
state.allowAndSetStorePathString(storePath, v);
|
state.allowAndSetStorePathString(storePath, v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_toFile({
|
PrimOp primop_toFile({
|
||||||
.name = "__toFile",
|
.name = "__toFile",
|
||||||
.args = {"name", "s"},
|
.args = {"name", "s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -28,7 +28,7 @@ static void prim_baseNameOf(EvalState & state, const PosIdx pos, Value ** args,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_baseNameOf({
|
PrimOp primop_baseNameOf({
|
||||||
.name = "baseNameOf",
|
.name = "baseNameOf",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -54,7 +54,7 @@ static void prim_compareVersions(EvalState & state, const PosIdx pos, Value ** a
|
||||||
v.mkInt(compareVersions(version1, version2));
|
v.mkInt(compareVersions(version1, version2));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_compareVersions({
|
PrimOp primop_compareVersions({
|
||||||
.name = "__compareVersions",
|
.name = "__compareVersions",
|
||||||
.args = {"s1", "s2"},
|
.args = {"s1", "s2"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -111,7 +111,7 @@ static void prim_concatStringsSep(EvalState & state, const PosIdx pos, Value **
|
||||||
v.mkString(res, context);
|
v.mkString(res, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_concatStringsSep(
|
PrimOp primop_concatStringsSep(
|
||||||
{.name = "__concatStringsSep",
|
{.name = "__concatStringsSep",
|
||||||
.args = {"separator", "list"},
|
.args = {"separator", "list"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -170,7 +170,7 @@ void prim_match(EvalState & state, const PosIdx pos, Value ** args, Value & v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_match({
|
PrimOp primop_match({
|
||||||
.name = "__match",
|
.name = "__match",
|
||||||
.args = {"regex", "str"},
|
.args = {"regex", "str"},
|
||||||
.doc = R"s(
|
.doc = R"s(
|
||||||
|
@ -222,7 +222,7 @@ static void prim_parseDrvName(EvalState & state, const PosIdx pos, Value ** args
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_parseDrvName({
|
PrimOp primop_parseDrvName({
|
||||||
.name = "__parseDrvName",
|
.name = "__parseDrvName",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -326,7 +326,7 @@ static void prim_replaceStrings(EvalState & state, const PosIdx pos, Value ** ar
|
||||||
v.mkString(res, context);
|
v.mkString(res, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_replaceStrings({
|
PrimOp primop_replaceStrings({
|
||||||
.name = "__replaceStrings",
|
.name = "__replaceStrings",
|
||||||
.args = {"from", "to", "s"},
|
.args = {"from", "to", "s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -419,7 +419,7 @@ void prim_split(EvalState & state, const PosIdx pos, Value ** args, Value & v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_split({
|
PrimOp primop_split({
|
||||||
.name = "__split",
|
.name = "__split",
|
||||||
.args = {"regex", "str"},
|
.args = {"regex", "str"},
|
||||||
.doc = R"s(
|
.doc = R"s(
|
||||||
|
@ -480,7 +480,7 @@ static void prim_splitVersion(EvalState & state, const PosIdx pos, Value ** args
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_splitVersion({
|
PrimOp primop_splitVersion({
|
||||||
.name = "__splitVersion",
|
.name = "__splitVersion",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -504,7 +504,7 @@ static void prim_stringLength(EvalState & state, const PosIdx pos, Value ** args
|
||||||
v.mkInt(s->size());
|
v.mkInt(s->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_stringLength({
|
PrimOp primop_stringLength({
|
||||||
.name = "__stringLength",
|
.name = "__stringLength",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -557,7 +557,7 @@ static void prim_substring(EvalState & state, const PosIdx pos, Value ** args, V
|
||||||
v.mkString((unsigned int) start >= s->size() ? "" : s->substr(start, len), context);
|
v.mkString((unsigned int) start >= s->size() ? "" : s->substr(start, len), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_substring({
|
PrimOp primop_substring({
|
||||||
.name = "__substring",
|
.name = "__substring",
|
||||||
.args = {"start", "len", "s"},
|
.args = {"start", "len", "s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -595,7 +595,7 @@ static void prim_toString(EvalState & state, const PosIdx pos, Value ** args, Va
|
||||||
v.mkString(*s, context);
|
v.mkString(*s, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_toString({
|
PrimOp primop_toString({
|
||||||
.name = "toString",
|
.name = "toString",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -81,7 +81,7 @@ static void prim_getEnv(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
v.mkString(evalSettings.restrictEval || evalSettings.pureEval ? "" : getEnv(name).value_or(""));
|
v.mkString(evalSettings.restrictEval || evalSettings.pureEval ? "" : getEnv(name).value_or(""));
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_getEnv({
|
PrimOp primop_getEnv({
|
||||||
.name = "__getEnv",
|
.name = "__getEnv",
|
||||||
.args = {"s"},
|
.args = {"s"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -15,7 +15,7 @@ static void prim_toXML(EvalState & state, const PosIdx pos, Value ** args, Value
|
||||||
v.mkString(out.str(), context);
|
v.mkString(out.str(), context);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_toXML({
|
PrimOp primop_toXML({
|
||||||
.name = "__toXML",
|
.name = "__toXML",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
|
@ -42,7 +42,7 @@ static void prim_functionArgs(EvalState & state, const PosIdx pos, Value ** args
|
||||||
v.mkAttrs(attrs);
|
v.mkAttrs(attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_functionArgs({
|
PrimOp primop_functionArgs({
|
||||||
.name = "__functionArgs",
|
.name = "__functionArgs",
|
||||||
.args = {"f"},
|
.args = {"f"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -63,7 +63,7 @@ static RegisterPrimOp primop_functionArgs({
|
||||||
* builtins.isAttrs
|
* builtins.isAttrs
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isAttrs({
|
PrimOp primop_isAttrs({
|
||||||
.name = "__isAttrs",
|
.name = "__isAttrs",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -76,7 +76,7 @@ static RegisterPrimOp primop_isAttrs({
|
||||||
* builtins.isBool
|
* builtins.isBool
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isBool({
|
PrimOp primop_isBool({
|
||||||
.name = "__isBool",
|
.name = "__isBool",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -89,7 +89,7 @@ static RegisterPrimOp primop_isBool({
|
||||||
* builtins.Float
|
* builtins.Float
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isFloat({
|
PrimOp primop_isFloat({
|
||||||
.name = "__isFloat",
|
.name = "__isFloat",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -102,7 +102,7 @@ static RegisterPrimOp primop_isFloat({
|
||||||
* builtins.isFunction
|
* builtins.isFunction
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isFunction({
|
PrimOp primop_isFunction({
|
||||||
.name = "__isFunction",
|
.name = "__isFunction",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -115,7 +115,7 @@ static RegisterPrimOp primop_isFunction({
|
||||||
* builtins.isInt
|
* builtins.isInt
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isInt({
|
PrimOp primop_isInt({
|
||||||
.name = "__isInt",
|
.name = "__isInt",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -128,7 +128,7 @@ static RegisterPrimOp primop_isInt({
|
||||||
* builtins.isList
|
* builtins.isList
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isList({
|
PrimOp primop_isList({
|
||||||
.name = "__isList",
|
.name = "__isList",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -141,7 +141,7 @@ static RegisterPrimOp primop_isList({
|
||||||
* builtins.isNull
|
* builtins.isNull
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isNull({
|
PrimOp primop_isNull({
|
||||||
.name = "isNull",
|
.name = "isNull",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -156,7 +156,7 @@ static RegisterPrimOp primop_isNull({
|
||||||
* builtins.isPath
|
* builtins.isPath
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isPath({
|
PrimOp primop_isPath({
|
||||||
.name = "__isPath",
|
.name = "__isPath",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -169,7 +169,7 @@ static RegisterPrimOp primop_isPath({
|
||||||
* builtins.isString
|
* builtins.isString
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static RegisterPrimOp primop_isString({
|
PrimOp primop_isString({
|
||||||
.name = "__isString",
|
.name = "__isString",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
@ -223,7 +223,7 @@ static void prim_typeOf(EvalState & state, const PosIdx pos, Value ** args, Valu
|
||||||
v.mkString(t);
|
v.mkString(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
static RegisterPrimOp primop_typeOf({
|
PrimOp primop_typeOf({
|
||||||
.name = "__typeOf",
|
.name = "__typeOf",
|
||||||
.args = {"e"},
|
.args = {"e"},
|
||||||
.doc = R"(
|
.doc = R"(
|
||||||
|
|
Loading…
Reference in a new issue