~ chicken-core (chicken-5) 18b1be562e0825afe706b49abb296a0ae105ae4d


commit 18b1be562e0825afe706b49abb296a0ae105ae4d
Author:     felix <felix@call-with-current-continuation.org>
AuthorDate: Wed Mar 30 11:09:52 2011 +0200
Commit:     felix <felix@call-with-current-continuation.org>
CommitDate: Wed Mar 30 11:09:52 2011 +0200

    slightly faster lexical-access

diff --git a/eval.scm b/eval.scm
index d08f3426..6fdc3bfd 100644
--- a/eval.scm
+++ b/eval.scm
@@ -261,7 +261,7 @@
 	(cond ((keyword? x) (lambda v x))
 	      ((symbol? x)
 	       (receive (i j) (lookup x e se)
-		 (cond [(not i)
+		 (cond ((not i)
 			(let ((var (if (not (assq x se)) ; global?
 				       (##sys#alias-global-hook j #f cntr)
 				       (or (##sys#get j '##core#primitive) j))))
@@ -283,9 +283,26 @@
 						(not (##sys#symbol-has-toplevel-binding? var)))
 				       (set! ##sys#unbound-in-eval
 					 (cons (cons var cntr) ##sys#unbound-in-eval)) )
-				     (lambda v (##core#inline "C_retrieve" var))))))]
-		       [(zero? i) (lambda (v) (##sys#slot (##sys#slot v 0) j))]
-		       [else (lambda (v) (##sys#slot (##core#inline "C_u_i_list_ref" v i) j))] ) ) )
+				     (lambda v (##core#inline "C_retrieve" var)))))))
+                      (else
+                       (case i
+                         ((0) (lambda (v) 
+                                (##sys#slot (##sys#slot v 0) j)))
+                         ((1) (lambda (v) 
+                                (##sys#slot (##sys#slot (##sys#slot v 1) 0) j)))
+                         ((2) (lambda (v) 
+                                (##sys#slot 
+                                 (##sys#slot (##sys#slot (##sys#slot v 1) 1) 0)
+                                 j)))
+                         ((3) (lambda (v) 
+                                (##sys#slot 
+                                 (##sys#slot
+                                  (##sys#slot (##sys#slot (##sys#slot v 1) 1) 1)
+                                  0)
+                                 j)))
+                         (else
+                          (lambda (v)
+                            (##sys#slot (##core#inline "C_u_i_list_ref" v i) j))))))))
 	      [(##sys#number? x)
 	       (case x
 		 [(-1) (lambda v -1)]
Trap