From 6f9dbfe2d62e4a5cd47ded36f5d4593033c796d7 Mon Sep 17 00:00:00 2001 From: Avril Date: Sun, 12 May 2019 06:48:14 +0100 Subject: [PATCH] more try-catch shit i guess --- flan-utils.lisp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/flan-utils.lisp b/flan-utils.lisp index d3ce5c9..978a4e6 100644 --- a/flan-utils.lisp +++ b/flan-utils.lisp @@ -44,6 +44,7 @@ (t (c) (cons nil c))))) (values (car ret) (cdr ret)))) + (defmacro try-catch (try &body catch) (let ((errnm (gensym))) `(let ((,errnm (handler-case (cons ,try nil) @@ -53,12 +54,24 @@ (values (car ,errnm) (cdr ,errnm)) (values (car ,errnm) nil))))) +(defmacro try (&body body) + `(try-catch + (progn + ,@body) + nil)) + (defmacro try-catch-finally (try catch &body finally) (let ((ret (gensym)) (err (gensym))) `(multiple-value-bind (,ret ,err) (try-catch ,try ,catch) (values (progn ,@finally) ,ret ,err)))) +(defmacro try-finally (try &body finally) + `(try-catch-finally + ,try + nil + ,@finally)) + (defmacro val-if-or (val test or) "(if (test val) val or)" `(let ((vv ,val))