~ 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