~ chicken-r7rs (master) /r7rs-support.scm
Trap1;;;2;;; Support code for building the R7RS extension.3;;;45(module r7rs-support *6 (import scheme chicken.base chicken.syntax)78 (define (macro-handler name)9 (cond ((assq name (##sys#macro-environment)) => caddr)10 (else #f)))1112 (define (wrap-er-macro-transformer name handler)13 (er-macro-transformer14 (let ((orig (macro-handler name)))15 (lambda (x r c)16 (let ((e (##sys#current-environment)))17 (handler x r c (lambda (x*) (orig x* '() e))))))))1819 (define-syntax define-extended-arity-comparator20 (syntax-rules ()21 ((_ name comparator check-type)22 (define name23 (let ((c comparator))24 (lambda (o1 o2 . os)25 (check-type o1 'name)26 (let lp ((o1 o1) (o2 o2) (os os) (eq #t))27 (check-type o2 'name)28 (if (null? os)29 (and eq (c o1 o2))30 (lp o2 (car os) (cdr os) (and eq (c o1 o2))))))))))))