changeset 110964:388aaaced495

* lisp/subr.el (last): Make it faster.
author Glenn Morris <rgm@gnu.org>
date Tue, 12 Oct 2010 20:30:36 -0700
parents 8e3439ed2228
children 8c6b3fc2a999
files lisp/ChangeLog lisp/subr.el
diffstat 2 files changed, 9 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Tue Oct 12 20:23:47 2010 -0700
+++ b/lisp/ChangeLog	Tue Oct 12 20:30:36 2010 -0700
@@ -1,3 +1,7 @@
+2010-10-13  IRIE Shinsuke  <irieshinsuke@yahoo.co.jp>  (tiny change)
+
+	* subr.el (last): Make it faster.  (Bug#7174)
+
 2010-10-13  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>  (tiny change)
 
 	* Makefile.in (compile-clean): Use `` instead of $().  (Bug#7178)
--- a/lisp/subr.el	Tue Oct 12 20:23:47 2010 -0700
+++ b/lisp/subr.el	Tue Oct 12 20:30:36 2010 -0700
@@ -289,14 +289,11 @@
 If N is non-nil, return the Nth-to-last link of LIST.
 If N is bigger than the length of LIST, return LIST."
   (if n
-      (let ((m 0) (p list))
-	(while (consp p)
-	  (setq m (1+ m) p (cdr p)))
-	(if (<= n 0) p
-	  (if (< n m) (nthcdr (- m n) list) list)))
-    (while (consp (cdr list))
-      (setq list (cdr list)))
-    list))
+      (and (> n 0)
+           (let ((m (length list)))
+             (if (< n m) (nthcdr (- m n) list) list)))
+    (and list
+         (nthcdr (1- (length list)) list))))
 
 (defun butlast (list &optional n)
   "Return a copy of LIST with the last N elements removed."