aboutsummaryrefslogtreecommitdiffstats
path: root/lib/cuprate/rewriters/r7rs.sld
blob: b231f8187d3454977a99d0f2f122cd2cafb183b3 (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
(define-library (cuprate rewriters r7rs)
  (import (scheme base))
  (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)))
        (cons 'error (cons msg irritants))))
    (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))))))))