(define-syntax syntax-notice (er-macro-transformer (lambda (e r c) (##sys#check-syntax 'syntax-notice e '(_ _ . _)) (apply ##sys#notice (strip-syntax (cdr e))) '(##sys#void)))) (define-syntax cc (syntax-rules () ((_ "clauses" ?catchall ?exn ?kvar (() ?body) ?rest0 ?rest1 ...) (begin (syntax-notice "clauses following catch-all clause in condition-case" (() ?body)) (if #t ?body (cc "clauses" #t ?exn ?kvar ?rest0 ?rest1 ...)))) ((_ "clauses" ?catchall ?exn ?kvar (?var () ?body) ?rest0 ?rest1 ...) (begin (syntax-notice "clauses following catch-all clause in condition-case" (?var () ?body)) (if #t (let ((?var ?exn)) ?body) (cc "clauses" #t ?exn ?kvar ?rest0 ?rest1 ...)))) ((_ "clauses" ?catchall ?exn ?kvar ((?kind0 ...) ?body) ?rest ...) (if (and ?kvar (memv '?kind0 ?kvar) ...) ?body (cc "clauses" #t ?exn ?kvar ?rest ...))) ((_ "clauses" ?catchall ?exn ?kvar (?var (?kind0 ...) ?body) ?rest ...) (if (and ?kvar (memv '?kind0 ?kvar) ...) (let ((?var ?exn)) ?body) (cc "clauses" ?catchall ?exn ?kvar ?rest ...))) ((_ "clauses" #t ?exn ?kvar) (void)) ((_ "clauses" #f ?exn ?kvar) (##sys#signal ?exn)) ((_ ?body ?clauses ...) (handle-exceptions exn (let ((kvar (and (##sys#structure? exn 'condition) (##sys#slot exn 1)))) (cc "clauses" #f exn kvar ?clauses ...)) ?body))))