~ chicken-core (chicken-5) cb1964414a788657ac48bdbf8c84576982388467
commit cb1964414a788657ac48bdbf8c84576982388467
Author: felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Jun 10 14:13:55 2011 +0200
Commit: felix <felix@call-with-current-continuation.org>
CommitDate: Fri Jun 10 14:13:55 2011 +0200
decorate procedure-type on validation only if not validating parts recursively
diff --git a/scrutinizer.scm b/scrutinizer.scm
index afc18eb9..31a4f72d 100755
--- a/scrutinizer.scm
+++ b/scrutinizer.scm
@@ -1173,7 +1173,7 @@
(let* ((l1 (validate (car llist)))
(l2 (validate-llist (cdr llist))))
(and l1 l2 (cons l1 l2))))))
- (define (validate t)
+ (define (validate t #!optional (rec #t))
(cond ((memq t '(* string symbol char number boolean list pair
procedure vector null eof undefined port blob
pointer locative fixnum float pointer-vector
@@ -1209,7 +1209,7 @@
rts))))))
(and rt
`(procedure
- ,@(if name (list name) '())
+ ,@(if (and name (not rec)) (list name) '())
,ts
,@rt)))))))))
((and (pair? (cdr t)) (memq '-> (cdr t))) =>
@@ -1217,18 +1217,19 @@
(let ((cp (memq ': (cdr t))))
(cond ((not cp)
(validate
- `(procedure ,(upto t p) ,@(cdr p))))
+ `(procedure ,(upto t p) ,@(cdr p))
+ rec))
((and (= 5 (length t))
(eq? p (cdr t))
(eq? cp (cdddr t)))
- (set! t (validate `(procedure (,(first t)) ,(third t))))
+ (set! t (validate `(procedure (,(first t)) ,(third t)) rec))
;; we do it this way to distinguish the "outermost" predicate
;; procedure type
(set! ptype (cons t (validate (cadr cp))))
t)
(else #f)))))
(else #f)))
- (let ((type (validate type)))
+ (let ((type (validate type #f)))
(values type (and ptype (eq? (car ptype) type) (cdr ptype))))))
(define (initial-argument-types dest vars argc)
Trap