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 /neb/interpreter.py | |
| parent | a0968e3bb2504127e26ab48b32dc6550c6cadd71 (diff) | |
bugfix: howto doesn't lazy evaluate, implement user-symbols
Diffstat (limited to 'neb/interpreter.py')
| -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, [])) |
