diff options
| author | mryouse | 2022-06-20 04:54:37 +0000 |
|---|---|---|
| committer | mryouse | 2022-06-20 04:54:37 +0000 |
| commit | c75ccd96ce41fa8cedd87c8a56f51cbb1d38893c (patch) | |
| tree | a363289fca09e54f458ebbffe1f3ae62038fbfd2 /neb | |
| parent | 7aafe2614dab7399e5b5153a468043464c07664c (diff) | |
implement quote, eval
Diffstat (limited to 'neb')
| -rw-r--r-- | neb/interpreter.py | 12 | ||||
| -rw-r--r-- | neb/structs.py | 3 |
2 files changed, 14 insertions, 1 deletions
diff --git a/neb/interpreter.py b/neb/interpreter.py index 7045219..d190ca2 100644 --- a/neb/interpreter.py +++ b/neb/interpreter.py @@ -868,3 +868,15 @@ def interpretUserSymbols(symbol, args, env, ns): return List(keys, True) GLOBALS.register("user-symbols", Builtin(interpretUserSymbols, [])) + +def interpretQuote(symbol, args, env, ns): + return args[0] + +quote_arg = Arg("arg", TypeEnum.ANY, lazy=True) +GLOBALS.register("quote", Builtin(interpretQuote, [quote_arg])) + +def interpretEval(symbol, args, env, ns): + return evaluate(args[0], env, ns) # TODO why do i have to explicitly evaluate here? + +eval_arg = Arg("arg", TypeEnum.ANY) +GLOBALS.register("eval", Builtin(interpretEval, [eval_arg])) diff --git a/neb/structs.py b/neb/structs.py index 3aac72a..947f3f6 100644 --- a/neb/structs.py +++ b/neb/structs.py @@ -95,8 +95,9 @@ class Symbol: def __init__(self, name, line): self.name = name self.line = line + self.type_ = TypeEnum.ANY # TODO no it's not def __str__(self): - return f"'{self.name}" + return f"{self.name}" class List: def __init__(self, args, data=False): |
