aboutsummaryrefslogtreecommitdiff
path: root/neb/std/core.py
diff options
context:
space:
mode:
Diffstat (limited to 'neb/std/core.py')
-rw-r--r--neb/std/core.py38
1 files changed, 19 insertions, 19 deletions
diff --git a/neb/std/core.py b/neb/std/core.py
index 15a7d61..60c1161 100644
--- a/neb/std/core.py
+++ b/neb/std/core.py
@@ -14,7 +14,7 @@ def interpretIf(symbol, args, env, ns):
return evaluate(args[1], env, ns)
elif len(args) == 3:
return evaluate(args[2], env, ns)
- return List([])
+ return Nil()
cond = Arg("cond", TypeEnum.BOOL)
t_branch = Arg("t-branch", TypeEnum.ANY)
@@ -23,7 +23,7 @@ CORE.register("if", NebSyntax("if", interpretIf, [cond, t_branch, f_branch]))
def_name_arg = Arg("name", TypeEnum.ANY)
def_val_arg = Arg("value", TypeEnum.ANY)
-CORE.register("def", NebSyntax("def", None, [def_name_arg, def_val_arg], return_type=Type(":list")))
+CORE.register("def", NebSyntax("def", None, [def_name_arg, def_val_arg], return_type=Type(":nil")))
def interpretRedef(symbol, args, env, ns):
if not isinstance(args[0], Symbol):
@@ -34,9 +34,9 @@ def interpretRedef(symbol, args, env, ns):
res = evaluate(args[1], env, ns)
env.reregister(name, res)
- return List([])
+ return Nil()
-CORE.register("redef", NebSyntax("redef", interpretRedef, [def_name_arg, def_val_arg], return_type=Type(":list")))
+CORE.register("redef", NebSyntax("redef", interpretRedef, [def_name_arg, def_val_arg], return_type=Type(":nil")))
lambda_args_arg = Arg("args", TypeEnum.ANY)
lambda_body_arg = Arg("body", TypeEnum.ANY)
@@ -53,7 +53,7 @@ def interpretForCount(symbol, args, env, ns):
for arg in args[1:]:
ret = evaluate(arg, new_env, ns)
if ret is None:
- return List([])
+ return Nil()
return ret
for_count_arg = Arg("count", TypeEnum.INT)
@@ -71,7 +71,7 @@ def interpretForEach(symbol, args, env, ns):
for arg in args[1:]:
ret = evaluate(arg, new_env, ns)
if ret is None:
- return List([])
+ return Nil()
return ret
for_each_arg = Arg("list", TypeEnum.LIST)
@@ -116,7 +116,7 @@ def interpretDropWhile(symbol, args, env, ns):
if which_idx is not None:
return List(coll.args[which_idx:])
else:
- return List([])
+ return Nil()
CORE.register("drop-while", NebSyntax("drop-while", interpretDropWhile, [for_each_arg, for_body_arg], for_body_arg))
@@ -129,15 +129,15 @@ def interpretBranch(symbol, args, env, ns):
raise InterpretPanic(symbol, "branch condition must be :bool", cond)
if cond.value:
return evaluate(arg.args[1], env, ns)
- return List([])
+ return Nil()
CORE.register("branch", NebSyntax("branch", interpretBranch, [for_body_arg], for_body_arg))
-CORE.register("func", NebSyntax("func", None, [def_name_arg, lambda_args_arg, lambda_body_arg], lambda_body_arg, Type(":list")))
+CORE.register("func", NebSyntax("func", None, [def_name_arg, lambda_args_arg, lambda_body_arg], lambda_body_arg, Type(":nil")))
def interpretBlock(symbol, args, env, ns):
new_env = Environment(env)
- ret = List([])
+ ret = Nil()
for arg in args:
ret = evaluate(arg, new_env, ns)
return ret
@@ -148,7 +148,7 @@ CORE.register("block", NebSyntax("block", interpretBlock, [block_arg], block_arg
def interpretWhile(symbol, args, env, ns):
new_env = Environment(env)
cond = args[0]
- ret = List([])
+ ret = Nil()
while True:
ev = evaluate(cond, new_env, ns)
if not isinstance(ev, Bool):
@@ -175,9 +175,9 @@ def interpretUse(symbol, args, env, ns):
with open(target_file, "r") as fil:
data = fil.read()
interpret(parse(lex(data)), env, ns)
- return List([])
+ return Nil()
-CORE.register("use", NebSyntax("use", interpretUse, [Arg("lib-or-file", TypeEnum.STRING)], return_type=Type(":list")))
+CORE.register("use", NebSyntax("use", interpretUse, [Arg("lib-or-file", TypeEnum.STRING)], return_type=Type(":nil")))
# NOTE this doesn't technically need to be a macro
def interpretAssert(symbol, args, env, ns):
@@ -186,9 +186,9 @@ def interpretAssert(symbol, args, env, ns):
raise InterpretPanic(symbol, "requires a :bool condition", cond)
if cond.value != True:
raise InterpretPanic(symbol, "assertion failed")
- return List([])
+ return Nil()
-CORE.register("assert", NebSyntax("assert", interpretAssert, [Arg("cond", TypeEnum.BOOL)], return_type=Type(":list")))
+CORE.register("assert", NebSyntax("assert", interpretAssert, [Arg("cond", TypeEnum.BOOL)], return_type=Type(":nil")))
def interpretUseAs(symbol, args, env, ns):
target = evaluate(args[0], env, ns)
@@ -203,9 +203,9 @@ def interpretUseAs(symbol, args, env, ns):
with open(target_file, "r") as fil:
data = fil.read()
interpret(parse(lex(data)), env, new_ns)
- return List([])
+ return Nil()
-CORE.register("use-as", NebSyntax("use-as", interpretUseAs, [Arg("filename", TypeEnum.STRING), Arg("namespace", TypeEnum.ANY)], return_type=Type(":list")))
+CORE.register("use-as", NebSyntax("use-as", interpretUseAs, [Arg("filename", TypeEnum.STRING), Arg("namespace", TypeEnum.ANY)], return_type=Type(":nil")))
def interpretQuote(symbol, args, env, ns):
return args[0]
@@ -240,12 +240,12 @@ def interpretType(symbol, args, env, ns):
new_type = UserType(name, parent_type, func)
env.register(name, new_type)
- return List([])
+ return Nil()
type_name_arg = Arg("name", TypeEnum.ANY)
type_parent_arg = Arg("name", TypeEnum.ANY)
type_func_arg = Arg("func", TypeEnum.ANY)
-CORE.register("type", NebSyntax("type", interpretType, [type_name_arg, type_parent_arg, type_func_arg]))
+CORE.register("type", NebSyntax("type", interpretType, [type_name_arg, type_parent_arg, type_func_arg], return_type=Type(":nil")))
def interpretOr(symbol, args, env, ns):
# or returns true for the first expression that returns true