1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-20 01:57:09 +03:00

Common Lisp: Fix try* to catch all errors

This commit is contained in:
Iqbal Ansari 2017-08-26 13:03:26 +05:30
parent 269ce7ffb7
commit 95648aadb3
2 changed files with 8 additions and 12 deletions

View File

@ -197,7 +197,7 @@
((mal-data-value= mal-try* (first forms))
(handler-case
(return (mal-eval (second forms) env))
((or mal-exception mal-error) (condition)
(error (condition)
(when (third forms)
(let ((catch-forms (mal-data-value (third forms))))
(when (mal-data-value= mal-catch*
@ -205,11 +205,9 @@
(return (mal-eval (third catch-forms)
(env:create-mal-env :parent env
:binds (list (second catch-forms))
:exprs (list (if (or (typep condition 'mal-runtime-exception)
(typep condition 'mal-error))
(make-mal-string (format nil "~a" condition))
(mal-exception-data condition)))))))))
(error condition))))
:exprs (list (if (typep condition 'mal-user-exception)
(mal-exception-data condition)
(make-mal-string (format nil "~a" condition)))))))))))))
(t (let* ((evaluated-list (eval-ast ast env))
(function (car evaluated-list)))

View File

@ -196,7 +196,7 @@
((mal-data-value= mal-try* (first forms))
(handler-case
(return (mal-eval (second forms) env))
((or mal-exception mal-error) (condition)
(error (condition)
(when (third forms)
(let ((catch-forms (mal-data-value (third forms))))
(when (mal-data-value= mal-catch*
@ -204,11 +204,9 @@
(return (mal-eval (third catch-forms)
(env:create-mal-env :parent env
:binds (list (second catch-forms))
:exprs (list (if (or (typep condition 'mal-runtime-exception)
(typep condition 'mal-error))
(make-mal-string (format nil "~a" condition))
(mal-exception-data condition)))))))))
(error condition))))
:exprs (list (if (typep condition 'mal-user-exception)
(mal-exception-data condition)
(make-mal-string (format nil "~a" condition)))))))))))))
(t (let* ((evaluated-list (eval-ast ast env))
(function (car evaluated-list)))