primops: Explicit registering of primops

Change-Id: I05e72d2bfdc715d9e27cc672ac35619310b0864d
This commit is contained in:
Tom Hubrecht 2024-05-30 10:51:25 +02:00
parent 09139554a8
commit 5541723b60
20 changed files with 329 additions and 103 deletions

View file

@ -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)) {

View file

@ -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"(

View file

@ -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"(

View file

@ -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,

View file

@ -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"(

View file

@ -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,

View file

@ -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,

View file

@ -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"(

View file

@ -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

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(

View file

@ -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,

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(

View file

@ -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"(