diff options
| author | mryouse | 2022-06-18 16:37:49 +0000 | 
|---|---|---|
| committer | mryouse | 2022-06-18 16:37:49 +0000 | 
| commit | bc2440846d829721dd9419bbe6bac22dc850038e (patch) | |
| tree | a9c7598a9f62cee2bef010c4a91b55706d4c79d0 | |
| parent | a0968e3bb2504127e26ab48b32dc6550c6cadd71 (diff) | |
bugfix: howto doesn't lazy evaluate, implement user-symbols
| -rw-r--r-- | neb/interpreter.py | 15 | 
1 files changed, 8 insertions, 7 deletions
| diff --git a/neb/interpreter.py b/neb/interpreter.py index 4762ae9..a80f5d4 100644 --- a/neb/interpreter.py +++ b/neb/interpreter.py @@ -417,6 +417,9 @@ def interpretFunc(symbol, args, env, ns):      # compose a lambda      func = interpretLambda(None, args[1:], env, ns) +    # add the name to the function +    func.name = name +      env.register(name, func)      return List([]) @@ -760,13 +763,12 @@ def interpretAssert(symbol, args, env, ns):  GLOBALS.register("assert", Builtin(interpretAssert, [Arg("cond", TypeEnum.BOOL)]))  def interpretHowTo(symbol, args, env, ns): -    if not isinstance(args[0], Symbol): -        raise InterpretPanic(symbol, "expects a symbol", args[0]) -    sym = env.get(args[0].name) -    print(sym.describe(args[0].name)) +    if not isinstance(args[0], Function): +        raise InterpretPanic(symbol, "expects a :func", args[0]) +    print(args[0].describe())      return List([]) -GLOBALS.register("howto", Builtin(interpretHowTo, [Arg("symbol", TypeEnum.ANY, lazy=True)])) +GLOBALS.register("howto", Builtin(interpretHowTo, [Arg("symbol", TypeEnum.ANY)]))  def interpretSymbols(symbol, args, env, ns):      keys = list(env.environment.keys()) @@ -848,8 +850,7 @@ def interpretIsBool(symbol, args, env, ns):  GLOBALS.register("bool?", Builtin(interpretIsBool, [Arg("arg", TypeEnum.ANY)]))  def interpretUserSymbols(symbol, args, env, ns): -    keys = [k for k,v in env.environment.items() if isinstance(v, UserFunction) or isinstance(v, Literal)] -    keys.sort() +    keys = [Symbol(k, -1) for k,v in env.environment.items() if isinstance(v, UserFunction) or isinstance(v, Literal)]      return List(keys, True)  GLOBALS.register("user-symbols", Builtin(interpretUserSymbols, [])) | 
