diff options
Diffstat (limited to 'neb/std/core.py')
| -rw-r--r-- | neb/std/core.py | 38 |
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 |
