diff options
Diffstat (limited to 'neb')
| -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))) | 
