aboutsummaryrefslogtreecommitdiff
path: root/neb
diff options
context:
space:
mode:
Diffstat (limited to 'neb')
-rw-r--r--neb/std/strings.py19
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)