aboutsummaryrefslogtreecommitdiff
path: root/neb/std/strings.py
diff options
context:
space:
mode:
authormryouse2022-07-20 20:57:11 +0000
committermryouse2022-07-20 20:57:11 +0000
commit6fb86b20996a9c7dc3045103d9a8b55c75ae1139 (patch)
tree4abfa44a4527c8d1bf94a3a047f71785a715aa06 /neb/std/strings.py
parent56d552fd9ccc7a1723fe789f822e9485a37bffae (diff)
implement multifunc for strings
Diffstat (limited to 'neb/std/strings.py')
-rw-r--r--neb/std/strings.py42
1 files changed, 34 insertions, 8 deletions
diff --git a/neb/std/strings.py b/neb/std/strings.py
index dcad034..1d6d7e4 100644
--- a/neb/std/strings.py
+++ b/neb/std/strings.py
@@ -18,7 +18,10 @@ STRINGS.register("concat", concat_multi)
def interpretStrip(symbol, args, env, ns):
return String(args[0].value.strip())
-STRINGS.register("strip", Builtin("strip", interpretStrip, [Arg("filename", TypeEnum.STRING)], return_type=Type(":string")))
+strip_func = Builtin("strip", interpretStrip, [Arg("filename", TypeEnum.STRING)], return_type=Type(":string"))
+strip_multi = MultiFunction("strip")
+strip_multi.register(strip_func)
+STRINGS.register("strip", strip_multi)
def interpretSplit(symbol, args, env, ns):
target = args[0]
@@ -28,7 +31,12 @@ def interpretSplit(symbol, args, env, ns):
ret = target.value.split(splitter.value)
return List([String(r) for r in ret])
-STRINGS.register("split", Builtin("split", interpretSplit, [Arg("target", TypeEnum.STRING)], Arg("splitter", TypeEnum.STRING, optional=True), Type(":list")))
+split_nosplitter_func = Builtin("split", interpretSplit, [Arg("target", TypeEnum.STRING)], return_type=Type(":list"))
+split_splitter_func = Builtin("split", interpretSplit, [Arg("target", TypeEnum.STRING), Arg("splitter", TypeEnum.STRING)], return_type=Type(":list"))
+split_multi = MultiFunction("split")
+split_multi.register(split_nosplitter_func)
+split_multi.register(split_splitter_func)
+STRINGS.register("split", split_multi)
def interpretJoin(symbol, args, env, ns):
lst = args[0]
@@ -37,33 +45,51 @@ def interpretJoin(symbol, args, env, ns):
join_list_arg = Arg("list", TypeEnum.LIST)
join_string_arg = Arg("joiner", TypeEnum.STRING)
-STRINGS.register("join", Builtin("join", interpretJoin, [join_list_arg, join_string_arg], return_type=Type(":string")))
+join_func = Builtin("join", interpretJoin, [join_list_arg, join_string_arg], return_type=Type(":string"))
+join_multi = MultiFunction("join")
+join_multi.register(join_func)
+STRINGS.register("join", join_multi)
def interpretFirstChar(symbol, args, env, ns):
if len(args[0].value) == 0:
raise InterpretPanic(symbol, ":string is empty")
return String(args[0].value[0])
-STRINGS.register("first-char", Builtin("first-char", interpretFirstChar, [Arg("string", TypeEnum.STRING)], return_type=Type(":string")))
+firstchar_func = Builtin("first", interpretFirstChar, [Arg("string", TypeEnum.STRING)], return_type=Type(":string"))
+firstchar_multi = MultiFunction("first")
+firstchar_multi.register(firstchar_func)
+STRINGS.register("first", firstchar_multi)
def interpretRestChar(symbol, args, env, ns):
return String(args[0].value[1:])
-STRINGS.register("rest-char", Builtin("rest-char", interpretRestChar, [Arg("string", TypeEnum.STRING)], return_type=Type(":string")))
+restchar_func = Builtin("rest", interpretRestChar, [Arg("string", TypeEnum.STRING)], return_type=Type(":string"))
+restchar_multi = MultiFunction("rest")
+restchar_multi.register(restchar_func)
+STRINGS.register("rest", restchar_multi)
def interpretLength(symbol, args, env, ns):
return Int(len(args[0].value))
-STRINGS.register("length", Builtin("length", interpretLength, [Arg("string", TypeEnum.STRING)], return_type=Type(":int")))
+length_func = Builtin("length", interpretLength, [Arg("string", TypeEnum.STRING)], return_type=Type(":int"))
+length_multi = MultiFunction("length")
+length_multi.register(length_func)
+STRINGS.register("length", length_multi)
def interpretRaw(symbol, args, env, ns):
return String(str(args[0]))
-STRINGS.register("raw", Builtin("raw", interpretRaw, [Arg("string", TypeEnum.STRING)], return_type=Type(":string")))
+raw_func = Builtin("raw", interpretRaw, [Arg("string", TypeEnum.STRING)], return_type=Type(":string"))
+raw_multi = MultiFunction("raw")
+raw_multi.register(raw_func)
+STRINGS.register("raw", raw_multi)
def interpretOrd(symbol, args, env, ns):
if len(args[0].value) != 1:
raise InterpretPanic(symbol, "requires a :string of length 1", args[0])
return Int(ord(args[0].value))
-STRINGS.register("ord", Builtin("ord", interpretOrd, [Arg("char", TypeEnum.STRING)], return_type=Type(":int")))
+ord_func = Builtin("ord", interpretOrd, [Arg("char", TypeEnum.STRING)], return_type=Type(":int"))
+ord_multi = MultiFunction("ord")
+ord_multi.register(ord_func)
+STRINGS.register("ord", ord_multi)