[movitz-cvs] CVS movitz
ffjeld
ffjeld at common-lisp.net
Sun Feb 17 00:10:11 UTC 2008
Update of /project/movitz/cvsroot/movitz
In directory clnet:/tmp/cvs-serv7215
Modified Files:
compiler.lisp
Log Message:
Improved tree-search, for speed.
--- /project/movitz/cvsroot/movitz/compiler.lisp 2008/02/16 23:35:22 1.191
+++ /project/movitz/cvsroot/movitz/compiler.lisp 2008/02/17 00:10:11 1.192
@@ -8,7 +8,7 @@
;;;; Created at: Wed Oct 25 12:30:49 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: compiler.lisp,v 1.191 2008/02/16 23:35:22 ffjeld Exp $
+;;;; $Id: compiler.lisp,v 1.192 2008/02/17 00:10:11 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -3256,12 +3256,24 @@
(binding-eql x (forwarding-binding-target y)))))
(defun tree-search (tree items)
- (etypecase tree
- (atom (if (atom items)
- (eql tree items)
- (member tree items)))
- (cons (or (tree-search (car tree) items)
- (tree-search (cdr tree) items)))))
+ (if (and (atom items) ; make common case fast(er), hopefully.
+ (not (numberp items)))
+ (labels ((tree-search* (tree item)
+ (etypecase tree
+ (null nil)
+ (cons
+ (or (tree-search* (car tree) item)
+ (tree-search* (cdr tree) item)))
+ (t (eq tree item)))))
+ (tree-search* tree items))
+ (etypecase tree
+ (atom
+ (if (atom items)
+ (eql tree items)
+ (member tree items)))
+ (cons
+ (or (tree-search (car tree) items)
+ (tree-search (cdr tree) items))))))
(defun operator (x)
(if (atom x) x (car x)))
More information about the Movitz-cvs
mailing list