diff options
Diffstat (limited to 'third_party/nix/src/libexpr/eval.cc')
-rw-r--r-- | third_party/nix/src/libexpr/eval.cc | 61 |
1 files changed, 32 insertions, 29 deletions
diff --git a/third_party/nix/src/libexpr/eval.cc b/third_party/nix/src/libexpr/eval.cc index 5f267f2053fb..a762571fca2d 100644 --- a/third_party/nix/src/libexpr/eval.cc +++ b/third_party/nix/src/libexpr/eval.cc @@ -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) { |