forked from lix-project/lix
print staticenv bindings
This commit is contained in:
parent
2ee1fa4afd
commit
98eb13691a
|
@ -107,10 +107,16 @@ ref<EvalState> EvalCommand::getEvalState()
|
||||||
if (startReplOnEvalErrors)
|
if (startReplOnEvalErrors)
|
||||||
debuggerHook = [evalState{ref<EvalState>(evalState)}](const Error & error, const Env & env, const Expr & expr) {
|
debuggerHook = [evalState{ref<EvalState>(evalState)}](const Error & error, const Env & env, const Expr & expr) {
|
||||||
printError("%s\n\n" ANSI_BOLD "Starting REPL to allow you to inspect the current state of the evaluator.\n" ANSI_NORMAL, error.what());
|
printError("%s\n\n" ANSI_BOLD "Starting REPL to allow you to inspect the current state of the evaluator.\n" ANSI_NORMAL, error.what());
|
||||||
|
|
||||||
|
printStaticEnvBindings(expr);
|
||||||
|
|
||||||
// printEnvPosChain(env);
|
// printEnvPosChain(env);
|
||||||
printEnvBindings(env);
|
// printEnvBindings(env);
|
||||||
auto vm = mapEnvBindings(env);
|
if (expr.staticenv)
|
||||||
|
{
|
||||||
|
auto vm = mapStaticEnvBindings(*expr.staticenv.get(), env);
|
||||||
runRepl(evalState, *vm);
|
runRepl(evalState, *vm);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
return ref<EvalState>(evalState);
|
return ref<EvalState>(evalState);
|
||||||
|
|
|
@ -712,6 +712,34 @@ void printStaticEnvBindings(const Expr &expr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void mapStaticEnvBindings(const StaticEnv &se, const Env &env, valmap & vm)
|
||||||
|
{
|
||||||
|
// add bindings for the next level up first.
|
||||||
|
if (env.up && se.up) {
|
||||||
|
mapStaticEnvBindings( *se.up, *env.up,vm);
|
||||||
|
}
|
||||||
|
|
||||||
|
// iterate through staticenv bindings.
|
||||||
|
|
||||||
|
auto map = valmap();
|
||||||
|
for (auto iter = se.vars.begin(); iter != se.vars.end(); ++iter)
|
||||||
|
{
|
||||||
|
map[iter->first] = env.values[iter->second];
|
||||||
|
}
|
||||||
|
|
||||||
|
vm.merge(map);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
valmap * mapStaticEnvBindings(const StaticEnv &se, const Env &env)
|
||||||
|
{
|
||||||
|
auto vm = new valmap();
|
||||||
|
mapStaticEnvBindings(se, env, *vm);
|
||||||
|
return vm;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void printEnvPosChain(const Env &env, int lv )
|
void printEnvPosChain(const Env &env, int lv )
|
||||||
{
|
{
|
||||||
std::cout << "printEnvPosChain " << lv << std::endl;
|
std::cout << "printEnvPosChain " << lv << std::endl;
|
||||||
|
|
|
@ -24,6 +24,7 @@ enum RepairFlag : bool;
|
||||||
typedef void (* PrimOpFun) (EvalState & state, const Pos & pos, Value * * args, Value & v);
|
typedef void (* PrimOpFun) (EvalState & state, const Pos & pos, Value * * args, Value & v);
|
||||||
|
|
||||||
extern std::function<void(const Error & error, const Env & env, const Expr & expr)> debuggerHook;
|
extern std::function<void(const Error & error, const Env & env, const Expr & expr)> debuggerHook;
|
||||||
|
void printStaticEnvBindings(const Expr &expr);
|
||||||
|
|
||||||
struct PrimOp
|
struct PrimOp
|
||||||
{
|
{
|
||||||
|
@ -47,6 +48,7 @@ struct Env
|
||||||
void printEnvBindings(const Env &env, int lv = 0);
|
void printEnvBindings(const Env &env, int lv = 0);
|
||||||
valmap * mapEnvBindings(const Env &env);
|
valmap * mapEnvBindings(const Env &env);
|
||||||
void printEnvPosChain(const Env &env, int lv = 0);
|
void printEnvPosChain(const Env &env, int lv = 0);
|
||||||
|
valmap * mapStaticEnvBindings(const StaticEnv &se, const Env &env);
|
||||||
|
|
||||||
Value & mkString(Value & v, std::string_view s, const PathSet & context = PathSet());
|
Value & mkString(Value & v, std::string_view s, const PathSet & context = PathSet());
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue