diff options
| author | mryouse | 2022-07-06 02:17:02 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-06 02:17:02 +0000 |
| commit | 276dd853729a7c71ef4805786793bbc8f651b00d (patch) | |
| tree | 75e4a3c1524919808aa739c14f3d2f9eb3015c40 /neb/std/core.py | |
| parent | 6ee92c12a58637101e1cd54caea222630a2e9d4b (diff) | |
bugfix: 'while' and 'block' missing new environment
Diffstat (limited to 'neb/std/core.py')
| -rw-r--r-- | neb/std/core.py | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/neb/std/core.py b/neb/std/core.py index 1c3c4b4..574455d 100644 --- a/neb/std/core.py +++ b/neb/std/core.py @@ -124,25 +124,27 @@ def interpretFunc(symbol, args, env, ns): CORE.register("func", Builtin("func", interpretFunc, [def_name_arg, lambda_args_arg, lambda_body_arg], lambda_body_arg, Type(":list"))) def interpretBlock(symbol, args, env, ns): + new_env = Environment(env) ret = List([]) for arg in args: - ret = evaluate(arg, env, ns) + ret = evaluate(arg, new_env, ns) return ret block_arg = Arg("expr", TypeEnum.ANY, lazy=True) CORE.register("block", Builtin("block", interpretBlock, [block_arg], block_arg)) def interpretWhile(symbol, args, env, ns): + new_env = Environment(env) cond = args[0] ret = List([]) while True: - ev = evaluate(cond, env, ns) + ev = evaluate(cond, new_env, ns) if not isinstance(ev, Bool): raise InterpretPanic(symbol, "expects a :bool condition", ev) if not ev.value: break for arg in args[1:]: - ret = evaluate(arg, env, ns) + ret = evaluate(arg, new_env, ns) return ret CORE.register("while", Builtin("while", interpretWhile, [Arg("cond", TypeEnum.BOOL, lazy=True)], Arg("expr", TypeEnum.ANY, lazy=True))) |
