aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormryouse2022-07-20 20:57:32 +0000
committermryouse2022-07-20 20:57:32 +0000
commitf736b930ac4ac69ae7c2933317c6d6a197378f0b (patch)
tree62a2ee8f19b62733c0e78f4db74ba7f121e81ea1
parent6fb86b20996a9c7dc3045103d9a8b55c75ae1139 (diff)
implement multifunc for sys
-rw-r--r--neb/std/sys.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/neb/std/sys.py b/neb/std/sys.py
index c8f79ef..30b2413 100644
--- a/neb/std/sys.py
+++ b/neb/std/sys.py
@@ -13,21 +13,31 @@ def interpretArgv(symbol, args, env, ns):
out.append(String(arg))
return List(out)
-SYS.register("argv", Builtin("argv", interpretArgv, [], return_type=Type(":list")))
+argv_func = Builtin("argv", interpretArgv, [], return_type=Type(":list"))
+argv_multi = MultiFunction("argv")
+argv_multi.register(argv_func)
+SYS.register("argv", argv_multi)
def interpretShell(symbol, args, env, ns):
ret = subprocess.run(shlex.split(args[0].value), capture_output=True)
return String(ret.stdout.decode("utf-8"))
-SYS.register("$", Builtin("$", interpretShell, [Arg("command", TypeEnum.STRING)], return_type=Type(":string")))
+shell_func = Builtin("$", interpretShell, [Arg("command", TypeEnum.STRING)], return_type=Type(":string"))
+shell_multi = MultiFunction("$")
+shell_multi.register(shell_func)
+SYS.register("$", shell_multi)
def interpretExit(symbol, args, env, ns):
status = 0 if len(args) == 0 else args[0].value
sys.exit(status)
return List([])
-exit_arg = Arg("status", TypeEnum.INT, optional=True)
-SYS.register("exit", Builtin("exit", interpretExit, [exit_arg], return_type=Type(":list")))
+exit_func = Builtin("exit", interpretExit, [], return_type=Type(":list"))
+exit_status_func = Builtin("exit", interpretExit, [Arg("status", TypeEnum.INT)], return_type=Type(":list"))
+exit_multi = MultiFunction("exit")
+exit_multi.register(exit_func)
+exit_multi.register(exit_status_func)
+SYS.register("exit", exit_multi)
def interpretPrint(symbol, args, env, ns):
print(args[0].value)
@@ -42,4 +52,7 @@ def interpretEnv(symbol, args, env, ns):
items = os.environ[args[0].value].split(":")
return List([String(item) for item in items])
-SYS.register("env", Builtin("env", interpretEnv, [Arg("regex", TypeEnum.STRING)], return_type=Type(":string")))
+env_func = Builtin("env", interpretEnv, [Arg("regex", TypeEnum.STRING)], return_type=Type(":string"))
+env_multi = MultiFunction("env")
+env_multi.register(env_func)
+SYS.register("env", env_multi)