aboutsummaryrefslogtreecommitdiff
path: root/module/util/exceptions.scm
diff options
context:
space:
mode:
authorHugo Hörnquist <hugo@lysator.liu.se>2020-05-09 21:43:16 +0200
committerHugo Hörnquist <hugo@lysator.liu.se>2020-05-09 21:43:16 +0200
commitc1feb55a2013116c3291cf0df26f9ab39ad3e8c3 (patch)
tree7e7c2b0b756e45a1fd1b177bb137d3225560bc37 /module/util/exceptions.scm
parentUn-escape escaped characters. Slow? (diff)
downloadcalp-c1feb55a2013116c3291cf0df26f9ab39ad3e8c3.tar.gz
calp-c1feb55a2013116c3291cf0df26f9ab39ad3e8c3.tar.xz
New parser now on feature parity with old.
Diffstat (limited to 'module/util/exceptions.scm')
-rw-r--r--module/util/exceptions.scm21
1 files changed, 20 insertions, 1 deletions
diff --git a/module/util/exceptions.scm b/module/util/exceptions.scm
index 41efaff5..4673b182 100644
--- a/module/util/exceptions.scm
+++ b/module/util/exceptions.scm
@@ -2,7 +2,8 @@
#:use-module (srfi srfi-1)
#:use-module (util)
#:export (throw-returnable
- catch-multiple))
+ catch-multiple
+ assert))
(define-syntax-rule (throw-returnable symb args ...)
(call/cc (lambda (cont) (throw symb cont args ...))))
@@ -52,3 +53,21 @@
(display (apply (warning-handler) fmt (or args '()))
(current-error-port)))
+
+(define (prettify-tree tree)
+ (cond [(null? tree) '()]
+ [(pair? tree) (cons (prettify-tree (car tree))
+ (prettify-tree (cdr tree)))]
+ [(list? tree) (map prettify-tree tree)]
+ [(and (procedure? tree)
+ (procedure-name tree))
+ => identity]
+ [else tree]))
+
+
+
+(define-macro (assert form)
+ `(unless ,form
+ (throw 'assertion-error "Assertion for ~a failed, ~a"
+ (quote ,form)
+ ((@@ (util exceptions) prettify-tree) ,(cons 'list form)))))