diff options
| author | mryouse | 2022-07-20 20:57:32 +0000 |
|---|---|---|
| committer | mryouse | 2022-07-20 20:57:32 +0000 |
| commit | f736b930ac4ac69ae7c2933317c6d6a197378f0b (patch) | |
| tree | 62a2ee8f19b62733c0e78f4db74ba7f121e81ea1 | |
| parent | 6fb86b20996a9c7dc3045103d9a8b55c75ae1139 (diff) | |
implement multifunc for sys
| -rw-r--r-- | neb/std/sys.py | 23 |
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) |
