From 59ee89dff1ca5d1317a692778f7f6df9142c2339 Mon Sep 17 00:00:00 2001 From: mryouse Date: Wed, 3 Aug 2022 02:17:56 +0000 Subject: implement slice for strings --- neb/std/strings.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) 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) -- cgit v1.2.3