diff options
| -rw-r--r-- | neb/std/strings.py | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/neb/std/strings.py b/neb/std/strings.py index 7f6451e..f902d9b 100644 --- a/neb/std/strings.py +++ b/neb/std/strings.py @@ -119,3 +119,22 @@ string_most_func = Builtin("most", interpretStringMost, [Arg("string", TypeEnum. string_most_multi = MultiFunction("most") string_most_multi.register(string_most_func) STRINGS.register("most", string_most_multi) + +def interpretStringSlice(symbol, args, env, ns): + string = args[0] + idx = args[1] + if len(args) == 2: + return String(string.value[idx.value - 1:]) + length = args[2] + diff = idx.value - 1 + length.value + return String(string.value[idx.value - 1:diff]) + +slice_list_arg = Arg("string", TypeEnum.STRING) +slice_idx_arg = Arg("idx", TypeEnum.INT) +slice_length_arg = Arg("length", TypeEnum.INT) +slice_nolength_func = Builtin("slice", interpretStringSlice, [slice_list_arg, slice_idx_arg], return_type=Type(":string")) +slice_length_func = Builtin("slice", interpretStringSlice, [slice_list_arg, slice_idx_arg, slice_length_arg], return_type=Type(":string")) +slice_multi = MultiFunction("slice") +slice_multi.register(slice_nolength_func) +slice_multi.register(slice_length_func) +STRINGS.register("slice", slice_multi) |
