diff options
| author | mryouse | 2022-06-26 01:31:14 +0000 |
|---|---|---|
| committer | mryouse | 2022-06-26 01:31:14 +0000 |
| commit | 182a05b85113631a611169a6724162ae9247b55e (patch) | |
| tree | 4524b495f79c1e71cf1f001edf274c7ccd6a495b /neb/std/lists.py | |
| parent | 976c0a01e9e28d13037c9b1a5045789b3500d9fe (diff) | |
add return types to builtins
Diffstat (limited to 'neb/std/lists.py')
| -rw-r--r-- | neb/std/lists.py | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/neb/std/lists.py b/neb/std/lists.py index 5aaab53..1ecbb6d 100644 --- a/neb/std/lists.py +++ b/neb/std/lists.py @@ -7,7 +7,7 @@ LISTS = Environment() def interpretListLength(symbol, args, env, ns): return Int(len(args[0].args)) -LISTS.register("list-length", Builtin("list-length", interpretListLength, [Arg("arg", TypeEnum.LIST)])) +LISTS.register("list-length", Builtin("list-length", interpretListLength, [Arg("arg", TypeEnum.LIST)], return_type=Type(":int"))) def interpretFirst(symbol, args, env, ns): if len(args[0].args) == 0: @@ -20,26 +20,26 @@ def interpretRest(symbol, args, env, ns): # TODO do we know it's not evaluated? return List(args[0].args[1:]) # we don't evaluate the remainder of the list -LISTS.register("rest", Builtin("rest", interpretRest, [Arg("arg", TypeEnum.LIST)])) +LISTS.register("rest", Builtin("rest", interpretRest, [Arg("arg", TypeEnum.LIST)], return_type=Type(":list"))) def interpretListReverse(symbol, args, env, ns): new_args = args[0].args[:] # make a copy of the args new_args.reverse() return List(new_args) -LISTS.register("list-reverse", Builtin("list-reverse", interpretListReverse, [Arg("list", TypeEnum.LIST)])) +LISTS.register("list-reverse", Builtin("list-reverse", interpretListReverse, [Arg("list", TypeEnum.LIST)], return_type=Type(":list"))) def interpretEmpty(symbol, args, env, ns): return Bool(len(args[0].args) == 0) -LISTS.register("empty?", Builtin("empty?", interpretEmpty, [Arg("list", TypeEnum.LIST)])) +LISTS.register("empty?", Builtin("empty?", interpretEmpty, [Arg("list", TypeEnum.LIST)], return_type=Type(":bool"))) def interpretShuf(symbol, args, env, ns): items = args[0].args[:] random.shuffle(items) return List(items) -LISTS.register("shuf", Builtin("shuf", interpretShuf, [Arg("list", TypeEnum.LIST)])) +LISTS.register("shuf", Builtin("shuf", interpretShuf, [Arg("list", TypeEnum.LIST)], return_type=Type(":list"))) def interpretIn(symbol, args, env, ns): target = args[0] @@ -51,7 +51,7 @@ def interpretIn(symbol, args, env, ns): in_target_arg = Arg("target", TypeEnum.LITERAL) in_list_arg = Arg("list", TypeEnum.LIST) -LISTS.register("in?", Builtin("in?", interpretIn, [in_target_arg, in_list_arg])) +LISTS.register("in?", Builtin("in?", interpretIn, [in_target_arg, in_list_arg], return_type=Type(":bool"))) def interpretLast(symbol, args, env, ns): if len(args[0].args) == 0: @@ -72,7 +72,7 @@ def interpretSlice(symbol, args, env, ns): slice_list_arg = Arg("list", TypeEnum.LIST) slice_idx_arg = Arg("idx", TypeEnum.INT) slice_length_arg = Arg("length", TypeEnum.INT, optional=True) -LISTS.register("slice", Builtin("slice", interpretSlice, [slice_list_arg, slice_idx_arg, slice_length_arg])) +LISTS.register("slice", Builtin("slice", interpretSlice, [slice_list_arg, slice_idx_arg, slice_length_arg], return_type=Type(":list"))) def interpretAppend(symbol, args, env, ns): lst = args[0] @@ -80,7 +80,7 @@ def interpretAppend(symbol, args, env, ns): items = lst.args[:] return List(items + [val]) -LISTS.register("append", Builtin("append", interpretAppend, [Arg("list", TypeEnum.LIST), Arg("item", TypeEnum.ANY)])) +LISTS.register("append", Builtin("append", interpretAppend, [Arg("list", TypeEnum.LIST), Arg("item", TypeEnum.ANY)], return_type=Type(":list"))) # TODO: this is actually for records/structs/whatever they're called def interpretRemove(symbol, args, env, ns): @@ -92,7 +92,7 @@ def interpretRemove(symbol, args, env, ns): out.append(arg) return List(out) -LISTS.register("remove", Builtin("remove", interpretRemove, [Arg("list", TypeEnum.LIST), Arg("key", TypeEnum.ANY)])) +LISTS.register("remove", Builtin("remove", interpretRemove, [Arg("list", TypeEnum.LIST), Arg("key", TypeEnum.ANY)], return_type=Type(":list"))) def interpretZip(symbol, args, env, ns): z1 = args[0] @@ -107,12 +107,12 @@ def interpretZip(symbol, args, env, ns): return List(out) zip_arg = Arg("list", TypeEnum.LIST) -LISTS.register("zip", Builtin("zip", interpretZip, [zip_arg, zip_arg])) +LISTS.register("zip", Builtin("zip", interpretZip, [zip_arg, zip_arg], return_type=Type(":list"))) def interpretList(symbol, args, env, ns): return List(args) -LISTS.register("list", Builtin("list", interpretList, [], Arg("item", TypeEnum.ANY))) +LISTS.register("list", Builtin("list", interpretList, [], Arg("item", TypeEnum.ANY), Type(":list"))) def interpretSortNumbers(symbol, args, env, ns): items = [] @@ -129,4 +129,4 @@ def interpretSortNumbers(symbol, args, env, ns): out.append(Float(item)) return List(out) -LISTS.register("sort-numbers", Builtin("sort-numbers", interpretSortNumbers, [Arg("list", TypeEnum.LIST)])) +LISTS.register("sort-numbers", Builtin("sort-numbers", interpretSortNumbers, [Arg("list", TypeEnum.LIST)], return_type=Type(":list"))) |
