Posted to c by dbohdan at Fri May 12 19:52:05 GMT 2017view pretty
static LILCALLBACK lil_value_t fnc_upeval(lil_t lil, size_t argc, lil_value_t* argv)
{
lil_env_t thisenv = lil->env;
lil_env_t thisdownenv = lil->downenv;
lil_value_t r;
if (lil->rootenv == thisenv) return fnc_eval(lil, argc, argv);
lil->env = thisenv->parent;
lil->downenv = thisenv;
r = fnc_eval(lil, argc, argv);
lil->env = thisenv;
lil->downenv = thisdownenv;
return r;
}
static LILCALLBACK lil_value_t fnc_downeval(lil_t lil, size_t argc, lil_value_t* argv)
{
lil_value_t r;
lil_env_t upenv = lil->env;
lil_env_t downenv = lil->downenv;
if (!downenv) return fnc_eval(lil, argc, argv);
lil->downenv = NULL;
lil->env = downenv;
r = fnc_eval(lil, argc, argv);
lil->downenv = downenv;
lil->env = upenv;
return r;
}