aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/utils.nom22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/utils.nom b/lib/utils.nom
index 13c7d49..c65ac2a 100644
--- a/lib/utils.nom
+++ b/lib/utils.nom
@@ -126,3 +126,25 @@ lua> ".."
| nomsu:defmacro(name, function() return escape end, "");
| end;
|end;
+
+compile [try %action and if it fails %fallback] to code: ".."
+ |do
+ | local _write_err = nomsu.write_err
+ | nomsu.write_err = function() end;
+ | local had_return = true;
+ | local ok, ret1, ret2 = pcall(function(nomsu, vars)
+ | local ret
+ | \(%action as lua statements)
+ | had_return = false;
+ | return ret;
+ | end, nomsu, vars);
+ | nomsu.write_err = _write_err;
+ | if not ok then
+ | \(%fallback as lua statements)
+ | elseif had_return then
+ | return ret1, ret2;
+ | else
+ | ret = ret1;
+ | end
+ |end
+