more code cleanup
This commit is contained in:
parent
71da988d47
commit
fb8377547b
|
@ -912,6 +912,9 @@ Env & EvalState::allocEnv(size_t size)
|
||||||
nrValuesInEnvs += size;
|
nrValuesInEnvs += size;
|
||||||
Env * env = (Env *) allocBytes(sizeof(Env) + size * sizeof(Value *));
|
Env * env = (Env *) allocBytes(sizeof(Env) + size * sizeof(Value *));
|
||||||
env->type = Env::Plain;
|
env->type = Env::Plain;
|
||||||
|
|
||||||
|
/* We assume that env->values has been cleared by the allocator; maybeThunk() and lookupVar fromWith expect this. */
|
||||||
|
|
||||||
return *env;
|
return *env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -925,7 +928,6 @@ Env & fakeEnv(size_t size)
|
||||||
return *env;
|
return *env;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void EvalState::mkList(Value & v, size_t size)
|
void EvalState::mkList(Value & v, size_t size)
|
||||||
{
|
{
|
||||||
v.mkList(size);
|
v.mkList(size);
|
||||||
|
@ -1291,7 +1293,6 @@ void ExprSelect::eval(EvalState & state, Env & env, Value & v)
|
||||||
state.forceAttrs(*vAttrs, pos);
|
state.forceAttrs(*vAttrs, pos);
|
||||||
if ((j = vAttrs->attrs->find(name)) == vAttrs->attrs->end())
|
if ((j = vAttrs->attrs->find(name)) == vAttrs->attrs->end())
|
||||||
throwEvalError(pos, "attribute '%1%' missing", name, env, this);
|
throwEvalError(pos, "attribute '%1%' missing", name, env, this);
|
||||||
// mapBindings(*vAttrs->attrs));
|
|
||||||
}
|
}
|
||||||
vAttrs = j->value;
|
vAttrs = j->value;
|
||||||
pos2 = j->pos;
|
pos2 = j->pos;
|
||||||
|
@ -1419,8 +1420,6 @@ void EvalState::callFunction(Value & fun, Value & arg, Value & v, const Pos & po
|
||||||
"attempt to call something which is not a function but %1%",
|
"attempt to call something which is not a function but %1%",
|
||||||
showType(fun).c_str(),
|
showType(fun).c_str(),
|
||||||
fakeEnv(1), 0);
|
fakeEnv(1), 0);
|
||||||
// fun.env);
|
|
||||||
// map2("fun", &fun, "arg", &arg));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ExprLambda & lambda(*fun.lambda.fun);
|
ExprLambda & lambda(*fun.lambda.fun);
|
||||||
|
|
|
@ -273,52 +273,36 @@ void ExprVar::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
|
|
||||||
/* Check whether the variable appears in the environment. If so,
|
/* Check whether the variable appears in the environment. If so,
|
||||||
set its level and displacement. */
|
set its level and displacement. */
|
||||||
|
const StaticEnv * curEnv;
|
||||||
// std::cout << "ExprVar::bindVars " << name << std::endl;
|
unsigned int level;
|
||||||
|
int withLevel = -1;
|
||||||
int a = 10;
|
for (curEnv = env.get(), level = 0; curEnv; curEnv = curEnv->up, level++) {
|
||||||
if (name == "callPackage") {
|
if (curEnv->isWith) {
|
||||||
a++; // try to make code that I can put a breakpoint on...
|
if (withLevel == -1) withLevel = level;
|
||||||
// std::cout << "meh" << a + 10 << std::endl;
|
} else {
|
||||||
int withLevel = -1;
|
StaticEnv::Vars::const_iterator i = curEnv->vars.find(name);
|
||||||
fromWith = true;
|
if (i != curEnv->vars.end()) {
|
||||||
// this->level = withLevel;
|
fromWith = false;
|
||||||
}
|
this->level = level;
|
||||||
|
displ = i->second;
|
||||||
{
|
return;
|
||||||
|
|
||||||
const StaticEnv * curEnv;
|
|
||||||
unsigned int level;
|
|
||||||
int withLevel = -1;
|
|
||||||
for (curEnv = env.get(), level = 0; curEnv; curEnv = curEnv->up, level++) {
|
|
||||||
if (curEnv->isWith) {
|
|
||||||
if (withLevel == -1) withLevel = level;
|
|
||||||
} else {
|
|
||||||
StaticEnv::Vars::const_iterator i = curEnv->vars.find(name);
|
|
||||||
if (i != curEnv->vars.end()) {
|
|
||||||
fromWith = false;
|
|
||||||
this->level = level;
|
|
||||||
displ = i->second;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Otherwise, the variable must be obtained from the nearest
|
|
||||||
enclosing `with'. If there is no `with', then we can issue an
|
|
||||||
"undefined variable" error now. */
|
|
||||||
if (withLevel == -1)
|
|
||||||
{
|
|
||||||
// std::cout << " throw UndefinedVarError({" << std::endl;
|
|
||||||
throw UndefinedVarError({
|
|
||||||
.msg = hintfmt("undefined variable (ExprVar bindvars) '%1%'", name),
|
|
||||||
.errPos = pos
|
|
||||||
});
|
|
||||||
}
|
|
||||||
fromWith = true;
|
|
||||||
this->level = withLevel;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Otherwise, the variable must be obtained from the nearest
|
||||||
|
enclosing `with'. If there is no `with', then we can issue an
|
||||||
|
"undefined variable" error now. */
|
||||||
|
if (withLevel == -1)
|
||||||
|
{
|
||||||
|
// std::cout << " throw UndefinedVarError({" << std::endl;
|
||||||
|
throw UndefinedVarError({
|
||||||
|
.msg = hintfmt("undefined variable (ExprVar bindvars) '%1%'", name),
|
||||||
|
.errPos = pos
|
||||||
|
});
|
||||||
|
}
|
||||||
|
fromWith = true;
|
||||||
|
this->level = withLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExprSelect::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
void ExprSelect::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
|
@ -349,18 +333,11 @@ void ExprAttrs::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
if (debuggerHook)
|
if (debuggerHook)
|
||||||
staticenv = env;
|
staticenv = env;
|
||||||
|
|
||||||
// std::cout << "ExprAttrs::bindVars" << std::endl;
|
|
||||||
// auto dynamicEnv(env);
|
|
||||||
|
|
||||||
if (recursive) {
|
if (recursive) {
|
||||||
// std::cout << "recursive" << std::endl;
|
|
||||||
// dynamicEnv = newEnv.get();
|
|
||||||
// also make shared_ptr?
|
|
||||||
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get()));
|
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get()));
|
||||||
|
|
||||||
unsigned int displ = 0;
|
unsigned int displ = 0;
|
||||||
for (auto & i : attrs) {
|
for (auto & i : attrs) {
|
||||||
// std::cout << "newenvvar: " << i.first << std::endl;
|
|
||||||
newEnv->vars[i.first] = i.second.displ = displ++;
|
newEnv->vars[i.first] = i.second.displ = displ++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,7 +350,6 @@ void ExprAttrs::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// std::cout << "NOT recursive" << std::endl;
|
|
||||||
for (auto & i : attrs)
|
for (auto & i : attrs)
|
||||||
i.second.e->bindVars(env);
|
i.second.e->bindVars(env);
|
||||||
|
|
||||||
|
@ -382,9 +358,6 @@ void ExprAttrs::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
i.valueExpr->bindVars(env);
|
i.valueExpr->bindVars(env);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// std::cout << "ExprAttrs::bindVars end" << std::endl;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ExprList::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
void ExprList::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
|
@ -401,7 +374,7 @@ void ExprLambda::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
if (debuggerHook)
|
if (debuggerHook)
|
||||||
staticenv = env;
|
staticenv = env;
|
||||||
|
|
||||||
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get())); // also make shared_ptr?
|
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get()));
|
||||||
|
|
||||||
unsigned int displ = 0;
|
unsigned int displ = 0;
|
||||||
|
|
||||||
|
@ -423,7 +396,7 @@ void ExprLet::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
if (debuggerHook)
|
if (debuggerHook)
|
||||||
staticenv = env;
|
staticenv = env;
|
||||||
|
|
||||||
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get())); // also make shared_ptr?
|
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(false, env.get()));
|
||||||
|
|
||||||
unsigned int displ = 0;
|
unsigned int displ = 0;
|
||||||
for (auto & i : attrs->attrs)
|
for (auto & i : attrs->attrs)
|
||||||
|
@ -440,7 +413,6 @@ void ExprWith::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
if (debuggerHook)
|
if (debuggerHook)
|
||||||
staticenv = env;
|
staticenv = env;
|
||||||
|
|
||||||
// std::cout << " ExprWith::bindVars " << std::endl;
|
|
||||||
/* Does this `with' have an enclosing `with'? If so, record its
|
/* Does this `with' have an enclosing `with'? If so, record its
|
||||||
level so that `lookupVar' can look up variables in the previous
|
level so that `lookupVar' can look up variables in the previous
|
||||||
`with' if this one doesn't contain the desired attribute. */
|
`with' if this one doesn't contain the desired attribute. */
|
||||||
|
@ -453,54 +425,10 @@ void ExprWith::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// std::cout << " ExprWith::bindVars 1" << std::endl;
|
|
||||||
// attrs->show(std::cout);
|
|
||||||
// std::cout << std::endl;
|
|
||||||
attrs->bindVars(env);
|
attrs->bindVars(env);
|
||||||
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(true, env.get())); // also make shared_ptr?
|
auto newEnv = std::shared_ptr<StaticEnv>(new StaticEnv(true, env.get()));
|
||||||
// std::cout << " ExprWith::bindVars 2" << std::endl;
|
|
||||||
// std::cout << " body: " << std::endl;
|
|
||||||
// body->show(std::cout);
|
|
||||||
// std::cout << std::endl;
|
|
||||||
|
|
||||||
// std::cout << "ExprWith::newenv: (iswith, size); (" << newEnv->isWith << ", " << newEnv->vars.size() << ") " << std::endl;
|
|
||||||
// for (auto i = newEnv->vars.begin(); i != newEnv->vars.end(); ++i)
|
|
||||||
// std::cout << "EvalState::parse newEnv " << i->first << std::endl;
|
|
||||||
|
|
||||||
|
|
||||||
// std::cout << " body->bindVars(newEnv), iswith: " << newEnv->isWith << std::endl;
|
|
||||||
body->bindVars(newEnv);
|
|
||||||
// std::cout << " ExprWith::bindVars 3" << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
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;
|
|
||||||
prevWith = 0;
|
|
||||||
for (curEnv = &env, level = 1; curEnv; curEnv = curEnv->up, level++)
|
|
||||||
if (curEnv->isWith) {
|
|
||||||
prevWith = level;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
attrs->bindVars(env);
|
|
||||||
std::cout << "ExprWith::bindVars env: " << env.vars.size(); // add std::endl;
|
|
||||||
for (auto i = env.vars.begin(); i != env.vars.end(); ++i)
|
|
||||||
{
|
|
||||||
std::cout << i->first << std::endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
StaticEnv newEnv(true, &env);
|
|
||||||
body->bindVars(newEnv);
|
body->bindVars(newEnv);
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void ExprIf::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
void ExprIf::bindVars(const std::shared_ptr<const StaticEnv> &env)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
#include "eval.hh"
|
#include "eval.hh"
|
||||||
#include "globals.hh"
|
#include "globals.hh"
|
||||||
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
struct ParseData
|
struct ParseData
|
||||||
|
|
Loading…
Reference in a new issue