~ chicken-core (chicken-5) 692db130a6c9d9364ec8b8a908d33cafd33e1ebd
commit 692db130a6c9d9364ec8b8a908d33cafd33e1ebd Author: felix <felix@call-with-current-continuation.org> AuthorDate: Fri Dec 3 17:02:22 2010 +0100 Commit: felix <felix@call-with-current-continuation.org> CommitDate: Fri Dec 3 17:02:22 2010 +0100 dumb dumb dumb diff --git a/scrutinizer.scm b/scrutinizer.scm index a658a99c..2b4fe177 100755 --- a/scrutinizer.scm +++ b/scrutinizer.scm @@ -153,7 +153,7 @@ (else (bomb "invalid type: ~a" t)))) (else (bomb "invalid type: ~a" t)))))) (define (argument-string args) - (let ((len (length args)) + (let* ((len (length args)) (m (multiples len))) (if (zero? len) "zero arguments" @@ -164,7 +164,7 @@ (define (result-string results) (if (eq? '* results) "an unknown number of values" - (let ((len (length results)) + (let* ((len (length results)) (m (multiples len))) (if (zero? len) "zero values" @@ -572,11 +572,15 @@ r1 r2)) (else '*))))) ((let) - (assert (= 2 (length subs))) ;XXX should always be the case - (let ((t (single - (sprintf "in `let' binding of `~a'" (real-name (first params))) - (walk (first subs) e loc (first params) #f) loc))) - (walk (second subs) (append (alist-cons (car params) t e) e) loc dest tail))) + ;; before CPS-conversion, `let'-nodes may have multiple bindings + (let loop ((vars params) (body subs) (e2 '())) + (if (null? vars) + (walk (car body) (append e2 e) loc dest tail) + (let ((t (single + (sprintf "in `let' binding of `~a'" (real-name (car vars))) + (walk (car body) e loc (car vars) #f) + loc))) + (loop (cdr vars) (cdr body) (alist-cons (car vars) t e2)))))) ((##core#lambda lambda) (decompose-lambda-list (first params)Trap