aboutsummaryrefslogtreecommitdiff
path: root/neb/std
diff options
context:
space:
mode:
authormryouse2022-07-09 01:59:47 +0000
committermryouse2022-07-09 01:59:47 +0000
commitf6815e804fb35621e84031ef880d183140b7a523 (patch)
treeceaeab2d47f1de6815f93b1d8f32d4506dd25ed8 /neb/std
parent5dc837bfc3412b70e9008cf38e6226a61afbcaa3 (diff)
implement 'try'
Diffstat (limited to 'neb/std')
-rw-r--r--neb/std/core.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/neb/std/core.py b/neb/std/core.py
index cf0686b..9e2e743 100644
--- a/neb/std/core.py
+++ b/neb/std/core.py
@@ -274,3 +274,13 @@ def interpretBench(symbol, args, env, ns):
return ret
CORE.register("bench", NebSyntax("bench", interpretBench, [Arg("command", TypeEnum.ANY)], return_type=Type(":any")))
+
+def interpretTry(symbol, args, env, ns):
+ try:
+ return evaluate(args[0], env, ns)
+ except NebPanic as e:
+ new_env = Environment(env)
+ new_env.register("_panic_", String(f"{e}"))
+ return evaluate(args[1], new_env, ns)
+
+CORE.register("try", NebSyntax("try", interpretTry, [Arg("expr", TypeEnum.ANY), Arg("except", TypeEnum.ANY)], return_type=Type(":any")))