blob: 248e2efa03bfd664b9bdae21e1d21a7f416e4d93 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
(define-library (cuprate rewriters foment)
(import (scheme base)
(only (foment base)
error-object-type
error-object-who
error-object-kind))
(export rewriters rewrite)
(begin
(define (default-on-pair pair)
(cons (rewrite (car pair))
(rewrite (cdr pair))))
(define (default-on-vector vec)
(vector-map rewrite vec))
(define (default-on-error error)
(let ((msg (error-object-message error))
(irritants (error-object-irritants error)))
`(error (type ,(rewrite (error-object-type error)))
(who ,(rewrite (error-object-who error)))
(kind ,(rewrite (error-object-kind error)))
(msg ,(rewrite (error-object-message error)))
(irritants ,@(map rewrite (error-object-irritants error))))))
(define rewriters
(make-parameter `((,pair? . ,default-on-pair)
(,vector? . ,default-on-vector)
(,error-object? . ,default-on-error))))
(define (rewrite obj)
(let loop ((rewriters (rewriters)))
(cond
((null? rewriters) obj)
(((caar rewriters) obj) ((cdar rewriters) obj))
(else (loop (cdr rewriters))))))))
|