fix(3p/nix): apply all clang-tidy fixes
Change-Id: I265e763393422ee1881653527c91024458060825 Reviewed-on: https://cl.tvl.fyi/c/depot/+/1432 Tested-by: BuildkiteCI Reviewed-by: tazjin <mail@tazj.in>
This commit is contained in:
parent
69f402563a
commit
ef54f5da9f
65 changed files with 580 additions and 497 deletions
2
third_party/nix/src/libexpr/attr-path.cc
vendored
2
third_party/nix/src/libexpr/attr-path.cc
vendored
|
|
@ -51,7 +51,7 @@ Value* findAlongAttrPath(EvalState& state, const std::string& attrPath,
|
|||
for (auto& attr : tokens) {
|
||||
/* Is i an index (integer) or a normal attribute name? */
|
||||
enum { apAttr, apIndex } apType = apAttr;
|
||||
unsigned int attrIndex;
|
||||
unsigned int attrIndex = 0;
|
||||
if (absl::SimpleAtoi(attr, &attrIndex)) {
|
||||
apType = apIndex;
|
||||
}
|
||||
|
|
|
|||
61
third_party/nix/src/libexpr/eval.cc
vendored
61
third_party/nix/src/libexpr/eval.cc
vendored
|
|
@ -35,7 +35,7 @@
|
|||
namespace nix {
|
||||
|
||||
static char* dupString(const char* s) {
|
||||
char* t;
|
||||
char* t = nullptr;
|
||||
t = GC_STRDUP(s);
|
||||
if (t == nullptr) {
|
||||
throw std::bad_alloc();
|
||||
|
|
@ -195,7 +195,7 @@ static Symbol getName(const AttrName& name, EvalState& state, Env& env) {
|
|||
return std::visit(
|
||||
util::overloaded{[&](const Symbol& name) -> Symbol { return name; },
|
||||
[&](Expr* expr) -> Symbol {
|
||||
Value nameValue;
|
||||
Value nameValue{};
|
||||
expr->eval(state, env, nameValue);
|
||||
state.forceStringNoCtx(nameValue);
|
||||
return state.symbols.Create(nameValue.string.s);
|
||||
|
|
@ -474,7 +474,7 @@ Value* EvalState::addConstant(const std::string& name, Value& v) {
|
|||
Value* EvalState::addPrimOp(const std::string& name, size_t arity,
|
||||
PrimOpFun primOp) {
|
||||
if (arity == 0) {
|
||||
Value v;
|
||||
Value v{};
|
||||
primOp(*this, noPos, nullptr, v);
|
||||
return addConstant(name, v);
|
||||
}
|
||||
|
|
@ -572,8 +572,8 @@ Value& mkString(Value& v, const std::string& s, const PathSet& context) {
|
|||
mkString(v, s.c_str());
|
||||
if (!context.empty()) {
|
||||
size_t n = 0;
|
||||
v.string.context =
|
||||
(const char**)allocBytes((context.size() + 1) * sizeof(char*));
|
||||
v.string.context = static_cast<const char**>(
|
||||
allocBytes((context.size() + 1) * sizeof(char*)));
|
||||
for (auto& i : context) {
|
||||
v.string.context[n++] = dupString(i.c_str());
|
||||
}
|
||||
|
|
@ -599,7 +599,7 @@ inline Value* EvalState::lookupVar(Env* env, const ExprVar& var, bool noEval) {
|
|||
return nullptr;
|
||||
}
|
||||
Value* v = allocValue();
|
||||
evalAttrs(*env->up, (Expr*)env->values[0], *v);
|
||||
evalAttrs(*env->up, reinterpret_cast<Expr*>(env->values[0]), *v);
|
||||
env->values[0] = v;
|
||||
env->type = Env::HasWithAttrs;
|
||||
}
|
||||
|
|
@ -763,7 +763,7 @@ void EvalState::resetFileCache() {
|
|||
void EvalState::eval(Expr* e, Value& v) { e->eval(*this, baseEnv, v); }
|
||||
|
||||
inline bool EvalState::evalBool(Env& env, Expr* e) {
|
||||
Value v;
|
||||
Value v{};
|
||||
e->eval(*this, env, v);
|
||||
if (v.type != tBool) {
|
||||
throwTypeError("value is %1% while a Boolean was expected", v);
|
||||
|
|
@ -772,7 +772,7 @@ inline bool EvalState::evalBool(Env& env, Expr* e) {
|
|||
}
|
||||
|
||||
inline bool EvalState::evalBool(Env& env, Expr* e, const Pos& pos) {
|
||||
Value v;
|
||||
Value v{};
|
||||
e->eval(*this, env, v);
|
||||
if (v.type != tBool) {
|
||||
throwTypeError("value is %1% while a Boolean was expected, at %2%", v, pos);
|
||||
|
|
@ -813,7 +813,7 @@ void ExprAttrs::eval(EvalState& state, Env& env, Value& value) {
|
|||
in the original environment. */
|
||||
size_t displ = 0;
|
||||
for (auto& attr : attrs) {
|
||||
Value* vAttr;
|
||||
Value* vAttr = nullptr;
|
||||
vAttr =
|
||||
attr.second.e->maybeThunk(state, attr.second.inherited ? env : env2);
|
||||
env2.values[displ++] = vAttr;
|
||||
|
|
@ -829,7 +829,7 @@ void ExprAttrs::eval(EvalState& state, Env& env, Value& value) {
|
|||
|
||||
/* Dynamic attrs apply *after* rec. */
|
||||
for (auto& i : dynamicAttrs) {
|
||||
Value nameVal;
|
||||
Value nameVal{};
|
||||
i.nameExpr->eval(state, *dynamicEnv, nameVal);
|
||||
state.forceValue(nameVal, i.pos);
|
||||
if (nameVal.type == tNull) {
|
||||
|
|
@ -897,7 +897,7 @@ static std::string showAttrPath(EvalState& state, Env& env,
|
|||
unsigned long nrLookups = 0;
|
||||
|
||||
void ExprSelect::eval(EvalState& state, Env& env, Value& v) {
|
||||
Value vTmp;
|
||||
Value vTmp{};
|
||||
Pos* pos2 = nullptr;
|
||||
Value* vAttrs = &vTmp;
|
||||
|
||||
|
|
@ -948,7 +948,7 @@ void ExprSelect::eval(EvalState& state, Env& env, Value& v) {
|
|||
}
|
||||
|
||||
void ExprOpHasAttr::eval(EvalState& state, Env& env, Value& v) {
|
||||
Value vTmp;
|
||||
Value vTmp{};
|
||||
Value* vAttrs = &vTmp;
|
||||
|
||||
e->eval(state, env, vTmp);
|
||||
|
|
@ -976,7 +976,7 @@ void ExprLambda::eval(EvalState& state, Env& env, Value& v) {
|
|||
|
||||
void ExprApp::eval(EvalState& state, Env& env, Value& v) {
|
||||
/* FIXME: vFun prevents GCC from doing tail call optimisation. */
|
||||
Value vFun;
|
||||
Value vFun{};
|
||||
e1->eval(state, env, vFun);
|
||||
state.callFunction(vFun, *(e2->maybeThunk(state, env)), v, pos);
|
||||
}
|
||||
|
|
@ -1044,7 +1044,7 @@ void EvalState::callFunction(Value& fun, Value& arg, Value& v, const Pos& pos) {
|
|||
auto& fun2 = *allocValue();
|
||||
fun2 = fun;
|
||||
/* !!! Should we use the attr pos here? */
|
||||
Value v2;
|
||||
Value v2{};
|
||||
// functors are called with the element itself as the first
|
||||
// parameter, which is partially applied here
|
||||
callFunction(*found->second.value, fun2, v2, pos);
|
||||
|
|
@ -1176,7 +1176,9 @@ void ExprWith::eval(EvalState& state, Env& env, Value& v) {
|
|||
env2.up = &env;
|
||||
env2.prevWith = prevWith;
|
||||
env2.type = Env::HasWithExpr;
|
||||
env2.values[0] = (Value*)attrs;
|
||||
// TODO(kanepyork): Figure out what's going on here. `Expr* attrs` is not
|
||||
// layout-compatible with Value*.
|
||||
env2.values[0] = reinterpret_cast<Value*>(attrs);
|
||||
|
||||
body->eval(state, env2, v);
|
||||
}
|
||||
|
|
@ -1199,17 +1201,17 @@ void ExprOpNot::eval(EvalState& state, Env& env, Value& v) {
|
|||
}
|
||||
|
||||
void ExprOpEq::eval(EvalState& state, Env& env, Value& v) {
|
||||
Value v1;
|
||||
Value v1{};
|
||||
e1->eval(state, env, v1);
|
||||
Value v2;
|
||||
Value v2{};
|
||||
e2->eval(state, env, v2);
|
||||
mkBool(v, state.eqValues(v1, v2));
|
||||
}
|
||||
|
||||
void ExprOpNEq::eval(EvalState& state, Env& env, Value& v) {
|
||||
Value v1;
|
||||
Value v1{};
|
||||
e1->eval(state, env, v1);
|
||||
Value v2;
|
||||
Value v2{};
|
||||
e2->eval(state, env, v2);
|
||||
mkBool(v, !state.eqValues(v1, v2));
|
||||
}
|
||||
|
|
@ -1227,8 +1229,8 @@ void ExprOpImpl::eval(EvalState& state, Env& env, Value& v) {
|
|||
}
|
||||
|
||||
void ExprOpUpdate::eval(EvalState& state, Env& env, Value& dest) {
|
||||
Value v1;
|
||||
Value v2;
|
||||
Value v1{};
|
||||
Value v2{};
|
||||
state.evalAttrs(env, e1, v1);
|
||||
state.evalAttrs(env, e2, v2);
|
||||
|
||||
|
|
@ -1240,9 +1242,9 @@ void ExprOpUpdate::eval(EvalState& state, Env& env, Value& dest) {
|
|||
}
|
||||
|
||||
void ExprOpConcatLists::eval(EvalState& state, Env& env, Value& v) {
|
||||
Value v1;
|
||||
Value v1{};
|
||||
e1->eval(state, env, v1);
|
||||
Value v2;
|
||||
Value v2{};
|
||||
e2->eval(state, env, v2);
|
||||
state.concatLists(v, {&v1, &v2}, pos);
|
||||
}
|
||||
|
|
@ -1270,7 +1272,7 @@ void ExprConcatStrings::eval(EvalState& state, Env& env, Value& v) {
|
|||
ValueType firstType = tString;
|
||||
|
||||
for (auto& i : *es) {
|
||||
Value vTmp;
|
||||
Value vTmp{};
|
||||
i->eval(state, env, vTmp);
|
||||
|
||||
/* If the first element is a path, then the result will also
|
||||
|
|
@ -1471,7 +1473,7 @@ std::optional<std::string> EvalState::tryAttrsToString(const Pos& pos, Value& v,
|
|||
bool copyToStore) {
|
||||
auto i = v.attrs->find(sToString);
|
||||
if (i != v.attrs->end()) {
|
||||
Value v1;
|
||||
Value v1{};
|
||||
callFunction(*i->second.value, v, v1, pos);
|
||||
return coerceToString(pos, v1, context, coerceMore, copyToStore);
|
||||
}
|
||||
|
|
@ -1691,9 +1693,10 @@ bool EvalState::eqValues(Value& v1, Value& v2) {
|
|||
void EvalState::printStats() {
|
||||
bool showStats = getEnv("NIX_SHOW_STATS", "0") != "0";
|
||||
|
||||
struct rusage buf;
|
||||
struct rusage buf {};
|
||||
getrusage(RUSAGE_SELF, &buf);
|
||||
float cpuTime = buf.ru_utime.tv_sec + ((float)buf.ru_utime.tv_usec / 1000000);
|
||||
float cpuTime = buf.ru_utime.tv_sec +
|
||||
(static_cast<float>(buf.ru_utime.tv_usec) / 1000000);
|
||||
|
||||
uint64_t bEnvs = nrEnvs * sizeof(Env) + nrValuesInEnvs * sizeof(Value*);
|
||||
uint64_t bLists = nrListElems * sizeof(Value*);
|
||||
|
|
@ -1702,8 +1705,8 @@ void EvalState::printStats() {
|
|||
nrAttrsets * sizeof(Bindings) + nrAttrsInAttrsets * sizeof(Attr);
|
||||
|
||||
#if HAVE_BOEHMGC
|
||||
GC_word heapSize;
|
||||
GC_word totalBytes;
|
||||
GC_word heapSize = 0;
|
||||
GC_word totalBytes = 0;
|
||||
GC_get_heap_usage_safe(&heapSize, nullptr, nullptr, nullptr, &totalBytes);
|
||||
#endif
|
||||
if (showStats) {
|
||||
|
|
|
|||
7
third_party/nix/src/libexpr/get-drvs.cc
vendored
7
third_party/nix/src/libexpr/get-drvs.cc
vendored
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
#include <absl/strings/numbers.h>
|
||||
#include <glog/logging.h>
|
||||
#include <math.h>
|
||||
|
||||
#include "libexpr/eval-inline.hh"
|
||||
#include "libstore/derivations.hh"
|
||||
|
|
@ -243,7 +244,7 @@ NixInt DrvInfo::queryMetaInt(const std::string& name, NixInt def) {
|
|||
if (v->type == tString) {
|
||||
/* Backwards compatibility with before we had support for
|
||||
integer meta fields. */
|
||||
NixInt n;
|
||||
NixInt n = 0;
|
||||
if (absl::SimpleAtoi(v->string.s, &n)) {
|
||||
return n;
|
||||
}
|
||||
|
|
@ -262,7 +263,7 @@ NixFloat DrvInfo::queryMetaFloat(const std::string& name, NixFloat def) {
|
|||
if (v->type == tString) {
|
||||
/* Backwards compatibility with before we had support for
|
||||
float meta fields. */
|
||||
NixFloat n;
|
||||
NixFloat n = NAN;
|
||||
if (string2Float(v->string.s, n)) {
|
||||
return n;
|
||||
}
|
||||
|
|
@ -367,7 +368,7 @@ static void getDerivations(EvalState& state, Value& vIn,
|
|||
const std::string& pathPrefix, Bindings& autoArgs,
|
||||
DrvInfos& drvs, Done& done,
|
||||
bool ignoreAssertionFailures) {
|
||||
Value v;
|
||||
Value v{};
|
||||
state.autoCallFunction(autoArgs, vIn, v);
|
||||
|
||||
/* Process the expression. */
|
||||
|
|
|
|||
4
third_party/nix/src/libexpr/names.cc
vendored
4
third_party/nix/src/libexpr/names.cc
vendored
|
|
@ -68,8 +68,8 @@ std::string nextComponent(std::string::const_iterator& p,
|
|||
}
|
||||
|
||||
static bool componentsLT(const std::string& c1, const std::string& c2) {
|
||||
int n1;
|
||||
int n2;
|
||||
int n1 = 0;
|
||||
int n2 = 0;
|
||||
bool c1Num = absl::SimpleAtoi(c1, &n1);
|
||||
bool c2Num = absl::SimpleAtoi(c2, &n2);
|
||||
|
||||
|
|
|
|||
2
third_party/nix/src/libexpr/names.hh
vendored
2
third_party/nix/src/libexpr/names.hh
vendored
|
|
@ -11,7 +11,7 @@ struct DrvName {
|
|||
std::string fullName;
|
||||
std::string name;
|
||||
std::string version;
|
||||
unsigned int hits;
|
||||
unsigned int hits{};
|
||||
|
||||
DrvName();
|
||||
DrvName(const std::string& s);
|
||||
|
|
|
|||
14
third_party/nix/src/libexpr/nixexpr.cc
vendored
14
third_party/nix/src/libexpr/nixexpr.cc
vendored
|
|
@ -18,7 +18,7 @@ std::ostream& operator<<(std::ostream& str, const Expr& e) {
|
|||
|
||||
static void showString(std::ostream& str, const std::string& s) {
|
||||
str << '"';
|
||||
for (auto c : (std::string)s) {
|
||||
for (auto c : std::string(s)) {
|
||||
if (c == '"' || c == '\\' || c == '$') {
|
||||
str << "\\" << c;
|
||||
} else if (c == '\n') {
|
||||
|
|
@ -191,7 +191,7 @@ std::ostream& operator<<(std::ostream& str, const Pos& pos) {
|
|||
str << "undefined position";
|
||||
} else {
|
||||
str << (format(ANSI_BOLD "%1%" ANSI_NORMAL ":%2%:%3%") %
|
||||
(std::string)pos.file.value() % pos.line % pos.column)
|
||||
std::string(pos.file.value()) % pos.line % pos.column)
|
||||
.str();
|
||||
}
|
||||
return str;
|
||||
|
|
@ -232,8 +232,8 @@ void ExprPath::bindVars(const StaticEnv& env) {}
|
|||
void ExprVar::bindVars(const StaticEnv& env) {
|
||||
/* Check whether the variable appears in the environment. If so,
|
||||
set its level and displacement. */
|
||||
const StaticEnv* curEnv;
|
||||
unsigned int level;
|
||||
const StaticEnv* curEnv = nullptr;
|
||||
unsigned int level = 0;
|
||||
int withLevel = -1;
|
||||
for (curEnv = &env, level = 0; curEnv != nullptr;
|
||||
curEnv = curEnv->up, level++) {
|
||||
|
|
@ -363,8 +363,8 @@ void ExprWith::bindVars(const StaticEnv& env) {
|
|||
/* Does this `with' have an enclosing `with'? If so, record its
|
||||
level so that `lookupVar' can look up variables in the previous
|
||||
`with' if this one doesn't contain the desired attribute. */
|
||||
const StaticEnv* curEnv;
|
||||
unsigned int level;
|
||||
const StaticEnv* curEnv = nullptr;
|
||||
unsigned int level = 0;
|
||||
prevWith = 0;
|
||||
for (curEnv = &env, level = 1; curEnv != nullptr;
|
||||
curEnv = curEnv->up, level++) {
|
||||
|
|
@ -405,7 +405,7 @@ void ExprLambda::setName(Symbol& name) { this->name = name; }
|
|||
|
||||
std::string ExprLambda::showNamePos() const {
|
||||
return (format("%1% at %2%") %
|
||||
(name.has_value() ? "'" + (std::string)name.value() + "'"
|
||||
(name.has_value() ? "'" + std::string(name.value()) + "'"
|
||||
: "anonymous function") %
|
||||
pos)
|
||||
.str();
|
||||
|
|
|
|||
19
third_party/nix/src/libexpr/parser.cc
vendored
19
third_party/nix/src/libexpr/parser.cc
vendored
|
|
@ -85,9 +85,10 @@ void addAttr(ExprAttrs* attrs, AttrPath& attrPath, Expr* e, const Pos& pos) {
|
|||
}
|
||||
|
||||
void addFormal(const Pos& pos, Formals* formals, const Formal& formal) {
|
||||
if (formals->argNames.find(formal.name) != formals->argNames.end())
|
||||
if (formals->argNames.find(formal.name) != formals->argNames.end()) {
|
||||
throw ParseError(format("duplicate formal function argument '%1%' at %2%") %
|
||||
formal.name % pos);
|
||||
}
|
||||
formals->formals.push_front(formal);
|
||||
formals->argNames.insert(formal.name);
|
||||
}
|
||||
|
|
@ -118,9 +119,9 @@ Expr* stripIndentation(const Pos& pos, SymbolTable& symbols,
|
|||
}
|
||||
for (size_t j = 0; j < e->s.size(); ++j) {
|
||||
if (atStartOfLine) {
|
||||
if (e->s[j] == ' ')
|
||||
if (e->s[j] == ' ') {
|
||||
curIndent++;
|
||||
else if (e->s[j] == '\n') {
|
||||
} else if (e->s[j] == '\n') {
|
||||
/* Empty line, doesn't influence minimum
|
||||
indentation. */
|
||||
curIndent = 0;
|
||||
|
|
@ -196,10 +197,11 @@ Path resolveExprPath(Path path) {
|
|||
|
||||
/* If `path' is a symlink, follow it. This is so that relative
|
||||
path references work. */
|
||||
struct stat st;
|
||||
struct stat st {};
|
||||
while (true) {
|
||||
if (lstat(path.c_str(), &st))
|
||||
if (lstat(path.c_str(), &st)) {
|
||||
throw SysError(format("getting status of '%1%'") % path);
|
||||
}
|
||||
if (!S_ISLNK(st.st_mode)) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -260,13 +262,14 @@ Path EvalState::findFile(SearchPath& searchPath, const std::string& path,
|
|||
const Pos& pos) {
|
||||
for (auto& i : searchPath) {
|
||||
std::string suffix;
|
||||
if (i.first.empty())
|
||||
if (i.first.empty()) {
|
||||
suffix = "/" + path;
|
||||
else {
|
||||
} else {
|
||||
auto s = i.first.size();
|
||||
if (path.compare(0, s, i.first) != 0 ||
|
||||
(path.size() > s && path[s] != '/'))
|
||||
(path.size() > s && path[s] != '/')) {
|
||||
continue;
|
||||
}
|
||||
suffix = path.size() == s ? "" : "/" + std::string(path, s);
|
||||
}
|
||||
auto r = resolveSearchPathElem(i);
|
||||
|
|
|
|||
45
third_party/nix/src/libexpr/primops.cc
vendored
45
third_party/nix/src/libexpr/primops.cc
vendored
|
|
@ -86,8 +86,8 @@ void EvalState::realiseContext(const PathSet& context) {
|
|||
PathSet willBuild;
|
||||
PathSet willSubstitute;
|
||||
PathSet unknown;
|
||||
unsigned long long downloadSize;
|
||||
unsigned long long narSize;
|
||||
unsigned long long downloadSize = 0;
|
||||
unsigned long long narSize = 0;
|
||||
store->queryMissing(drvs, willBuild, willSubstitute, unknown, downloadSize,
|
||||
narSize);
|
||||
store->buildPaths(drvs);
|
||||
|
|
@ -130,7 +130,7 @@ static void prim_scopedImport(EvalState& state, const Pos& pos, Value** args,
|
|||
mkString(*((*outputsVal->list)[outputs_index++]), o.first);
|
||||
}
|
||||
|
||||
Value fun;
|
||||
Value fun{};
|
||||
state.evalFile(
|
||||
settings.nixDataDir + "/nix/corepkgs/imported-drv-to-derivation.nix",
|
||||
fun);
|
||||
|
|
@ -216,7 +216,7 @@ static void prim_isNull(EvalState& state, const Pos& pos, Value** args,
|
|||
static void prim_isFunction(EvalState& state, const Pos& pos, Value** args,
|
||||
Value& v) {
|
||||
state.forceValue(*args[0]);
|
||||
bool res;
|
||||
bool res = 0;
|
||||
switch (args[0]->type) {
|
||||
case tLambda:
|
||||
case tPrimOp:
|
||||
|
|
@ -350,7 +350,7 @@ static void prim_genericClosure(EvalState& state, const Pos& pos, Value** args,
|
|||
res.push_back(e);
|
||||
|
||||
/* Call the `operator' function with `e' as argument. */
|
||||
Value call;
|
||||
Value call{};
|
||||
mkApp(call, *op->second.value, *e);
|
||||
state.forceList(call, pos);
|
||||
|
||||
|
|
@ -877,7 +877,7 @@ static void prim_readFile(EvalState& state, const Pos& pos, Value** args,
|
|||
}
|
||||
std::string s =
|
||||
readFile(state.checkSourcePath(state.toRealPath(path, context)));
|
||||
if (s.find((char)0) != std::string::npos) {
|
||||
if (s.find('\0') != std::string::npos) {
|
||||
throw Error(format("the contents of the file '%1%' cannot be represented "
|
||||
"as a Nix string") %
|
||||
path);
|
||||
|
|
@ -1050,13 +1050,13 @@ static void addPath(EvalState& state, const Pos& pos, const std::string& name,
|
|||
|
||||
/* Call the filter function. The first argument is the path,
|
||||
the second is a string indicating the type of the file. */
|
||||
Value arg1;
|
||||
Value arg1{};
|
||||
mkString(arg1, path);
|
||||
|
||||
Value fun2;
|
||||
Value fun2{};
|
||||
state.callFunction(*filterFun, arg1, fun2, noPos);
|
||||
|
||||
Value arg2;
|
||||
Value arg2{};
|
||||
mkString(arg2, S_ISREG(st.st_mode)
|
||||
? "regular"
|
||||
: S_ISDIR(st.st_mode)
|
||||
|
|
@ -1065,7 +1065,7 @@ static void addPath(EvalState& state, const Pos& pos, const std::string& name,
|
|||
? "symlink"
|
||||
: "unknown" /* not supported, will fail! */);
|
||||
|
||||
Value res;
|
||||
Value res{};
|
||||
state.callFunction(fun2, arg2, res, noPos);
|
||||
|
||||
return state.forceBool(res, pos);
|
||||
|
|
@ -1421,7 +1421,7 @@ static void prim_isList(EvalState& state, const Pos& pos, Value** args,
|
|||
static void elemAt(EvalState& state, const Pos& pos, Value& list, int n,
|
||||
Value& v) {
|
||||
state.forceList(list, pos);
|
||||
if (n < 0 || (unsigned int)n >= list.listSize()) {
|
||||
if (n < 0 || static_cast<unsigned int>(n) >= list.listSize()) {
|
||||
throw Error(format("list index %1% is out of bounds, at %2%") % n % pos);
|
||||
}
|
||||
state.forceValue(*(*list.list)[n]);
|
||||
|
|
@ -1480,7 +1480,7 @@ static void prim_filter(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
bool same = true;
|
||||
for (unsigned int n = 0; n < args[1]->listSize(); ++n) {
|
||||
Value res;
|
||||
Value res{};
|
||||
state.callFunction(*args[0], *(*args[1]->list)[n], res, noPos);
|
||||
if (state.forceBool(res, pos)) {
|
||||
vs[k++] = (*args[1]->list)[n];
|
||||
|
|
@ -1538,7 +1538,7 @@ static void prim_foldlStrict(EvalState& state, const Pos& pos, Value** args,
|
|||
Value* vCur = args[1];
|
||||
|
||||
for (unsigned int n = 0; n < args[2]->listSize(); ++n) {
|
||||
Value vTmp;
|
||||
Value vTmp{};
|
||||
state.callFunction(*args[0], *vCur, vTmp, pos);
|
||||
vCur = n == args[2]->listSize() - 1 ? &v : state.allocValue();
|
||||
state.callFunction(vTmp, *(*args[2]->list)[n], *vCur, pos);
|
||||
|
|
@ -1555,7 +1555,7 @@ static void anyOrAll(bool any, EvalState& state, const Pos& pos, Value** args,
|
|||
state.forceFunction(*args[0], pos);
|
||||
state.forceList(*args[1], pos);
|
||||
|
||||
Value vTmp;
|
||||
Value vTmp{};
|
||||
for (unsigned int n = 0; n < args[1]->listSize(); ++n) {
|
||||
state.callFunction(*args[0], *(*args[1]->list)[n], vTmp, pos);
|
||||
bool res = state.forceBool(vTmp, pos);
|
||||
|
|
@ -1587,7 +1587,7 @@ static void prim_genList(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
state.mkList(v, len);
|
||||
|
||||
for (unsigned int n = 0; n < (unsigned int)len; ++n) {
|
||||
for (unsigned int n = 0; n < static_cast<unsigned int>(len); ++n) {
|
||||
Value* arg = state.allocValue();
|
||||
mkInt(*arg, n);
|
||||
mkApp(*((*v.list)[n] = state.allocValue()), *args[0], *arg);
|
||||
|
|
@ -1615,8 +1615,8 @@ static void prim_sort(EvalState& state, const Pos& pos, Value** args,
|
|||
return CompareValues()(a, b);
|
||||
}
|
||||
|
||||
Value vTmp1;
|
||||
Value vTmp2;
|
||||
Value vTmp1{};
|
||||
Value vTmp2{};
|
||||
state.callFunction(*args[0], *a, vTmp1, pos);
|
||||
state.callFunction(vTmp1, *b, vTmp2, pos);
|
||||
return state.forceBool(vTmp2, pos);
|
||||
|
|
@ -1639,7 +1639,7 @@ static void prim_partition(EvalState& state, const Pos& pos, Value** args,
|
|||
for (Value* elem : *args[1]->list) {
|
||||
state.forceValue(*elem, pos);
|
||||
|
||||
Value res;
|
||||
Value res{};
|
||||
state.callFunction(*args[0], *elem, res, pos);
|
||||
if (state.forceBool(res, pos)) {
|
||||
right->push_back(elem);
|
||||
|
|
@ -1790,7 +1790,10 @@ static void prim_substring(EvalState& state, const Pos& pos, Value** args,
|
|||
pos);
|
||||
}
|
||||
|
||||
mkString(v, (unsigned int)start >= s.size() ? "" : std::string(s, start, len),
|
||||
mkString(v,
|
||||
static_cast<unsigned int>(start) >= s.size()
|
||||
? ""
|
||||
: std::string(s, start, len),
|
||||
context);
|
||||
}
|
||||
|
||||
|
|
@ -1875,7 +1878,7 @@ static void prim_split(EvalState& state, const Pos& pos, Value** args,
|
|||
const size_t len = std::distance(begin, end);
|
||||
state.mkList(v, 2 * len + 1);
|
||||
size_t idx = 0;
|
||||
Value* elem;
|
||||
Value* elem = nullptr;
|
||||
|
||||
if (len == 0) {
|
||||
(*v.list)[idx++] = args[1];
|
||||
|
|
@ -2138,7 +2141,7 @@ void EvalState::createBaseEnv() {
|
|||
baseEnv.up = nullptr;
|
||||
|
||||
/* Add global constants such as `true' to the base environment. */
|
||||
Value v;
|
||||
Value v{};
|
||||
|
||||
/* `builtins' must be first! */
|
||||
mkAttrs(v, 128);
|
||||
|
|
|
|||
13
third_party/nix/src/libexpr/primops/context.cc
vendored
13
third_party/nix/src/libexpr/primops/context.cc
vendored
|
|
@ -97,12 +97,13 @@ static void prim_getContext(EvalState& state, const Pos& pos, Value** args,
|
|||
ContextInfo{isPath, isAllOutputs,
|
||||
output.empty() ? Strings{} : Strings{std::move(output)}});
|
||||
} else {
|
||||
if (isPath)
|
||||
if (isPath) {
|
||||
iter->second.path = true;
|
||||
else if (isAllOutputs)
|
||||
} else if (isAllOutputs) {
|
||||
iter->second.allOutputs = true;
|
||||
else
|
||||
} else {
|
||||
iter->second.outputs.emplace_back(std::move(output));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -116,8 +117,9 @@ static void prim_getContext(EvalState& state, const Pos& pos, Value** args,
|
|||
if (info.second.path) {
|
||||
mkBool(*state.allocAttr(infoVal, sPath), true);
|
||||
}
|
||||
if (info.second.allOutputs)
|
||||
if (info.second.allOutputs) {
|
||||
mkBool(*state.allocAttr(infoVal, sAllOutputs), true);
|
||||
}
|
||||
if (!info.second.outputs.empty()) {
|
||||
auto& outputsVal = *state.allocAttr(infoVal, state.sOutputs);
|
||||
state.mkList(outputsVal, info.second.outputs.size());
|
||||
|
|
@ -147,9 +149,10 @@ static void prim_appendContext(EvalState& state, const Pos& pos, Value** args,
|
|||
auto sAllOutputs = state.symbols.Create("allOutputs");
|
||||
for (const auto& attr_iter : *args[1]->attrs) {
|
||||
const Attr* i = &attr_iter.second; // TODO(tazjin): get rid of this
|
||||
if (!state.store->isStorePath(i->name))
|
||||
if (!state.store->isStorePath(i->name)) {
|
||||
throw EvalError("Context key '%s' is not a store path, at %s", i->name,
|
||||
i->pos);
|
||||
}
|
||||
if (!settings.readOnlyMode) {
|
||||
state.store->ensurePath(i->name);
|
||||
}
|
||||
|
|
|
|||
32
third_party/nix/src/libexpr/primops/fetchGit.cc
vendored
32
third_party/nix/src/libexpr/primops/fetchGit.cc
vendored
|
|
@ -30,8 +30,9 @@ std::regex revRegex("^[0-9a-fA-F]{40}$");
|
|||
GitInfo exportGit(ref<Store> store, const std::string& uri,
|
||||
std::optional<std::string> ref, std::string rev,
|
||||
const std::string& name) {
|
||||
if (evalSettings.pureEval && rev == "")
|
||||
if (evalSettings.pureEval && rev == "") {
|
||||
throw Error("in pure evaluation mode, 'fetchGit' requires a Git revision");
|
||||
}
|
||||
|
||||
if (!ref && rev == "" && absl::StartsWith(uri, "/") &&
|
||||
pathExists(uri + "/.git")) {
|
||||
|
|
@ -90,8 +91,9 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
ref = "HEAD"s;
|
||||
}
|
||||
|
||||
if (rev != "" && !std::regex_match(rev, revRegex))
|
||||
if (rev != "" && !std::regex_match(rev, revRegex)) {
|
||||
throw Error("invalid Git revision '%s'", rev);
|
||||
}
|
||||
|
||||
deletePath(getCacheDir() + "/nix/git");
|
||||
|
||||
|
|
@ -104,12 +106,13 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
}
|
||||
|
||||
Path localRefFile;
|
||||
if (ref->compare(0, 5, "refs/") == 0)
|
||||
if (ref->compare(0, 5, "refs/") == 0) {
|
||||
localRefFile = cacheDir + "/" + *ref;
|
||||
else
|
||||
} else {
|
||||
localRefFile = cacheDir + "/refs/heads/" + *ref;
|
||||
}
|
||||
|
||||
bool doFetch;
|
||||
bool doFetch = 0;
|
||||
time_t now = time(0);
|
||||
/* If a rev was specified, we need to fetch if it's not in the
|
||||
repo. */
|
||||
|
|
@ -127,9 +130,10 @@ GitInfo exportGit(ref<Store> store, const std::string& uri,
|
|||
} else {
|
||||
/* If the local ref is older than ‘tarball-ttl’ seconds, do a
|
||||
git fetch to update the local ref to the remote ref. */
|
||||
struct stat st;
|
||||
struct stat st {};
|
||||
doFetch = stat(localRefFile.c_str(), &st) != 0 ||
|
||||
(uint64_t)st.st_mtime + settings.tarballTtl <= (uint64_t)now;
|
||||
static_cast<uint64_t>(st.st_mtime) + settings.tarballTtl <=
|
||||
static_cast<uint64_t>(now);
|
||||
}
|
||||
if (doFetch) {
|
||||
DLOG(INFO) << "fetching Git repository '" << uri << "'";
|
||||
|
|
@ -225,22 +229,24 @@ static void prim_fetchGit(EvalState& state, const Pos& pos, Value** args,
|
|||
for (auto& attr_iter : *args[0]->attrs) {
|
||||
auto& attr = attr_iter.second;
|
||||
std::string n(attr.name);
|
||||
if (n == "url")
|
||||
if (n == "url") {
|
||||
url =
|
||||
state.coerceToString(*attr.pos, *attr.value, context, false, false);
|
||||
else if (n == "ref")
|
||||
} else if (n == "ref") {
|
||||
ref = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||
else if (n == "rev")
|
||||
} else if (n == "rev") {
|
||||
rev = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||
else if (n == "name")
|
||||
} else if (n == "name") {
|
||||
name = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||
else
|
||||
} else {
|
||||
throw EvalError("unsupported argument '%s' to 'fetchGit', at %s",
|
||||
attr.name, *attr.pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (url.empty())
|
||||
if (url.empty()) {
|
||||
throw EvalError(format("'url' argument required, at %1%") % pos);
|
||||
}
|
||||
|
||||
} else {
|
||||
url = state.coerceToString(pos, *args[0], context, false, false);
|
||||
|
|
|
|||
|
|
@ -28,10 +28,11 @@ std::regex commitHashRegex("^[0-9a-fA-F]{40}$");
|
|||
|
||||
HgInfo exportMercurial(ref<Store> store, const std::string& uri,
|
||||
std::string rev, const std::string& name) {
|
||||
if (evalSettings.pureEval && rev == "")
|
||||
if (evalSettings.pureEval && rev == "") {
|
||||
throw Error(
|
||||
"in pure evaluation mode, 'fetchMercurial' requires a Mercurial "
|
||||
"revision");
|
||||
}
|
||||
|
||||
if (rev == "" && absl::StartsWith(uri, "/") && pathExists(uri + "/.hg")) {
|
||||
bool clean = runProgram("hg", true,
|
||||
|
|
@ -90,9 +91,10 @@ HgInfo exportMercurial(ref<Store> store, const std::string& uri,
|
|||
/* If we haven't pulled this repo less than ‘tarball-ttl’ seconds,
|
||||
do so now. */
|
||||
time_t now = time(0);
|
||||
struct stat st;
|
||||
struct stat st {};
|
||||
if (stat(stampFile.c_str(), &st) != 0 ||
|
||||
(uint64_t)st.st_mtime + settings.tarballTtl <= (uint64_t)now) {
|
||||
static_cast<uint64_t>(st.st_mtime) + settings.tarballTtl <=
|
||||
static_cast<uint64_t>(now)) {
|
||||
/* Except that if this is a commit hash that we already have,
|
||||
we don't have to pull again. */
|
||||
if (!(std::regex_match(rev, commitHashRegex) && pathExists(cacheDir) &&
|
||||
|
|
@ -198,20 +200,22 @@ static void prim_fetchMercurial(EvalState& state, const Pos& pos, Value** args,
|
|||
for (auto& attr_iter : *args[0]->attrs) {
|
||||
auto& attr = attr_iter.second;
|
||||
std::string n(attr.name);
|
||||
if (n == "url")
|
||||
if (n == "url") {
|
||||
url =
|
||||
state.coerceToString(*attr.pos, *attr.value, context, false, false);
|
||||
else if (n == "rev")
|
||||
} else if (n == "rev") {
|
||||
rev = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||
else if (n == "name")
|
||||
} else if (n == "name") {
|
||||
name = state.forceStringNoCtx(*attr.value, *attr.pos);
|
||||
else
|
||||
} else {
|
||||
throw EvalError("unsupported argument '%s' to 'fetchMercurial', at %s",
|
||||
attr.name, *attr.pos);
|
||||
}
|
||||
}
|
||||
|
||||
if (url.empty())
|
||||
if (url.empty()) {
|
||||
throw EvalError(format("'url' argument required, at %1%") % pos);
|
||||
}
|
||||
|
||||
} else {
|
||||
url = state.coerceToString(pos, *args[0], context, false, false);
|
||||
|
|
|
|||
26
third_party/nix/src/libexpr/primops/fromTOML.cc
vendored
26
third_party/nix/src/libexpr/primops/fromTOML.cc
vendored
|
|
@ -30,10 +30,12 @@ static void prim_fromTOML(EvalState& state, const Pos& pos, Value** args,
|
|||
if (auto i2 = i.second->as_table_array()) {
|
||||
size_t size2 = i2->get().size();
|
||||
state.mkList(v2, size2);
|
||||
for (size_t j = 0; j < size2; ++j)
|
||||
for (size_t j = 0; j < size2; ++j) {
|
||||
visit(*((*v2.list)[j] = state.allocValue()), i2->get()[j]);
|
||||
} else
|
||||
}
|
||||
} else {
|
||||
visit(v2, i.second);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -42,8 +44,9 @@ static void prim_fromTOML(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
state.mkList(v, size);
|
||||
|
||||
for (size_t i = 0; i < size; ++i)
|
||||
for (size_t i = 0; i < size; ++i) {
|
||||
visit(*((*v.list)[i] = state.allocValue()), t2->get()[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Handle cases like 'a = [[{ a = true }]]', which IMHO should be
|
||||
|
|
@ -55,25 +58,28 @@ static void prim_fromTOML(EvalState& state, const Pos& pos, Value** args,
|
|||
|
||||
state.mkList(v, size);
|
||||
|
||||
for (size_t j = 0; j < size; ++j)
|
||||
for (size_t j = 0; j < size; ++j) {
|
||||
visit(*((*v.list)[j] = state.allocValue()), t2->get()[j]);
|
||||
}
|
||||
}
|
||||
|
||||
else if (t->is_value()) {
|
||||
if (auto val = t->as<int64_t>())
|
||||
if (auto val = t->as<int64_t>()) {
|
||||
mkInt(v, val->get());
|
||||
else if (auto val = t->as<NixFloat>())
|
||||
} else if (auto val = t->as<NixFloat>()) {
|
||||
mkFloat(v, val->get());
|
||||
else if (auto val = t->as<bool>())
|
||||
} else if (auto val = t->as<bool>()) {
|
||||
mkBool(v, val->get());
|
||||
else if (auto val = t->as<std::string>())
|
||||
} else if (auto val = t->as<std::string>()) {
|
||||
mkString(v, val->get());
|
||||
else
|
||||
} else {
|
||||
throw EvalError("unsupported value type in TOML");
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
else {
|
||||
abort();
|
||||
}
|
||||
};
|
||||
|
||||
try {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue