From: Basil L. Contovounesios Date: Tue, 9 Apr 2019 15:51:55 +0000 (+0100) Subject: Optimize byte-compilation of proper-list-p X-Git-Tag: emacs-27.0.90~3259^2~27 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=9a54e70c184cd9f65f1141a1b1df87e9afb83d2f;p=emacs.git Optimize byte-compilation of proper-list-p For discussion, see thread starting at: https://lists.gnu.org/archive/html/emacs-devel/2019-04/msg00316.html * lisp/emacs-lisp/byte-opt.el: Optimize proper-list-p as a predicate. * lisp/subr.el: Mark proper-list-p as pure, and side-effect and error free. --- diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index 33d49647638..44cca6136c0 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -879,7 +879,8 @@ (put 'symbolp 'byte-optimizer 'byte-optimize-predicate) (put 'stringp 'byte-optimizer 'byte-optimize-predicate) (put 'string< 'byte-optimizer 'byte-optimize-predicate) -(put 'string-lessp 'byte-optimizer 'byte-optimize-predicate) +(put 'string-lessp 'byte-optimizer 'byte-optimize-predicate) +(put 'proper-list-p 'byte-optimizer 'byte-optimize-predicate) (put 'logand 'byte-optimizer 'byte-optimize-predicate) (put 'logior 'byte-optimizer 'byte-optimize-predicate) diff --git a/lisp/subr.el b/lisp/subr.el index bdf98979c49..bf3716bbd37 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -604,6 +604,11 @@ If N is omitted or nil, remove the last element." (if (> n 0) (setcdr (nthcdr (- (1- m) n) list) nil)) list)))) +;; The function's definition was moved to fns.c, +;; but it's easier to set properties here. +(put 'proper-list-p 'pure t) +(put 'proper-list-p 'side-effect-free 'error-free) + (defun delete-dups (list) "Destructively remove `equal' duplicates from LIST. Store the result in LIST and return it. LIST must be a proper list.