~ 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