diff options
| author | mryouse | 2022-06-21 01:49:29 +0000 | 
|---|---|---|
| committer | mryouse | 2022-06-21 01:49:29 +0000 | 
| commit | 776fe3193b515c028b5ac69326baed51d760d32f (patch) | |
| tree | db111c3fe7a20143b2f058259f86dbbecae4cbd6 /neb/std/sys.py | |
| parent | b1550660adaca68bb38541aed371e36b7000e124 (diff) | |
refactor: break stdlib into several files
Diffstat (limited to 'neb/std/sys.py')
| -rw-r--r-- | neb/std/sys.py | 35 | 
1 files changed, 35 insertions, 0 deletions
| diff --git a/neb/std/sys.py b/neb/std/sys.py new file mode 100644 index 0000000..252a0b0 --- /dev/null +++ b/neb/std/sys.py @@ -0,0 +1,35 @@ +from .. import TypeEnum, Environment, Arg, Builtin, evaluate +from ..structs import * +import shlex +import subprocess +import sys + +SYS = Environment() + +def interpretArgv(symbol, args, env, ns): +    out = [] +    for arg in sys.argv[1:]: +        out.append(String(arg)) +    return List(out) + +SYS.register("argv", Builtin(interpretArgv, [])) + +def interpretShell(symbol, args, env, ns): +    ret = subprocess.run(shlex.split(args[0].value), capture_output=True) +    return List([String(r) for r in ret.stdout.decode("utf-8").split("\n")]) + +SYS.register("$", Builtin(interpretShell, [Arg("command", TypeEnum.STRING)])) + +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(interpretExit, [exit_arg])) + +def interpretPrint(symbol, args, env, ns): +    print(args[0].value) +    return List([])  # print returns nothing + +SYS.register("print", Builtin(interpretPrint, [Arg("arg", TypeEnum.STRING)])) | 
