~ 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