aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
authormryouse2022-06-20 04:54:37 +0000
committermryouse2022-06-20 04:54:37 +0000
commitc75ccd96ce41fa8cedd87c8a56f51cbb1d38893c (patch)
treea363289fca09e54f458ebbffe1f3ae62038fbfd2 /neb
parent7aafe2614dab7399e5b5153a468043464c07664c (diff)
implement quote, eval
Diffstat (limited to 'neb')
-rw-r--r--neb/interpreter.py12
-rw-r--r--neb/structs.py3
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):