~ chicken-core (chicken-5) 93f804de2817510f84b2e259dab928c7852a6fd3


commit 93f804de2817510f84b2e259dab928c7852a6fd3
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Fri Dec 10 15:17:05 2010 +0100
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Fri Dec 10 15:17:05 2010 +0100

    slight cleanup in ##sys#canonicalize-body, removed redundant lookups

diff --git a/expand.scm b/expand.scm
index c7beae66..24cdaeec 100644
--- a/expand.scm
+++ b/expand.scm
@@ -134,11 +134,13 @@
     (cond ((lookup name me) =>
 	   (lambda (a)
 	     (set-car! a se)
-	     (set-car! (cdr a) handler) ) )
+	     (set-car! (cdr a) handler)
+	     a))
 	  (else 
-	   (##sys#macro-environment
-	    (cons (list name se handler)
-		  me))))))
+	   (let ((data (list se handler)))
+	     (##sys#macro-environment
+	      (cons (cons name data) me))
+	     data)))))
 
 (define (##sys#copy-macro old new)
   (let ((def (lookup old (##sys#macro-environment))))
@@ -504,7 +506,7 @@
 			       (else def))
 			 defs) 
 		   #f)))
-	       (else (loop body defs #t))))))		       
+	       (else (loop body defs #t))))))
     (define (expand body)
       (let loop ([body body] [vars '()] [vals '()] [mvars '()] [mvals '()])
 	(if (not (pair? body))
@@ -515,8 +517,10 @@
 		   (head (and exp1
 			      (symbol? exp1)
 			      (or (lookup exp1 se) exp1))))
-	      (cond [(not (symbol? head)) (fini vars vals mvars mvals body)]
-		    [(eq? 'define (or (lookup head se) head))
+	      (if (not (symbol? head))
+		  (fini vars vals mvars mvals body)
+		  (case head
+		    ((define)
 		     (##sys#check-syntax 'define x '(_ _ . #(_ 0)) #f se)
 		     (let loop2 ([x x])
 		       (let ([head (cadr x)])
@@ -542,23 +546,24 @@
 				(loop rest
 				      (cons (car head) vars)
 				      (cons `(##core#lambda ,(cdr head) ,@(cddr x)) vals)
-				      mvars mvals) ] ) ) ) ]
-		    ((eq? 'define-syntax (or (lookup head se) head))
+				      mvars mvals) ] ) ) ) )
+		    ((define-syntax)
 		     (##sys#check-syntax 'define-syntax x '(_ _ . #(_ 1)) se)
 		     (fini/syntax vars vals mvars mvals body) )
-		    [(eq? 'define-values (or (lookup head se) head))
-		     ;;XXX check for any of the variables being `define-values' (?)
+		    ((define-values)
+		     ;;XXX check for any of the variables being `define-values'
 		     (##sys#check-syntax 'define-values x '(_ #(_ 0) _) #f se)
-		     (loop rest vars vals (cons (cadr x) mvars) (cons (caddr x) mvals)) ]
-		    [(eq? '##core#begin head)
-		     (loop (##sys#append (cdr x) rest) vars vals mvars mvals) ]
-		    ((or (memq head vars) (memq head mvars))
-		     (fini vars vals mvars mvals body))
-		    [else
-		     (let ([x2 (##sys#expand-0 x se cs?)])
-		       (if (eq? x x2)
-			   (fini vars vals mvars mvals body)
-			   (loop (cons x2 rest) vars vals mvars mvals) ) ) ] ) ) ) ) )
+		     (loop rest vars vals (cons (cadr x) mvars) (cons (caddr x) mvals)))
+		    ((##core#begin)
+		     (loop (##sys#append (cdr x) rest) vars vals mvars mvals) )
+		    (else
+		     (if (or (memq head vars) (memq head mvars))
+			 (fini vars vals mvars mvals body)
+			 (let ((x2 (##sys#expand-0 x se cs?)))
+			   (if (eq? x x2)
+			       (fini vars vals mvars mvals body)
+			       (loop (cons x2 rest)
+				     vars vals mvars mvals) ) ) ) ) ) ) ) ) ) )
     (expand body) ) )
 
 
Trap