aboutsummaryrefslogtreecommitdiff
path: root/neb/std/sys.py
diff options
context:
space:
mode:
authormryouse2022-06-21 01:49:29 +0000
committermryouse2022-06-21 01:49:29 +0000
commit776fe3193b515c028b5ac69326baed51d760d32f (patch)
treedb111c3fe7a20143b2f058259f86dbbecae4cbd6 /neb/std/sys.py
parentb1550660adaca68bb38541aed371e36b7000e124 (diff)
refactor: break stdlib into several files
Diffstat (limited to 'neb/std/sys.py')
-rw-r--r--neb/std/sys.py35
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)]))