emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Predicate for true lists


From: Basil L. Contovounesios
Subject: Re: Predicate for true lists
Date: Tue, 09 Apr 2019 13:51:53 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux)

The byte-compiler currently optimises various constant expressions, for
example:

  (byte-compile '(string-equal "" ""))
  ;; => t

IWBNI this was also done for proper-list-p:

  (byte-compile '(proper-list-p '(0)))
  ;; => (byte-code "\300\301!\207" [proper-list-p (0)] 2)

Is the following kosher?

>From 7a1da041ac6053ec752c3f31072203195c4e24db Mon Sep 17 00:00:00 2001
From: "Basil L. Contovounesios" <address@hidden>
Date: Tue, 9 Apr 2019 13:01:52 +0100
Subject: [PATCH] Make byte-compiler aware of proper-list-p

* lisp/emacs-lisp/byte-opt.el: Optimize proper-list-p as a predicate
and mark it as side-effect-free.
* lisp/emacs-lisp/bytecomp.el: Add one-arg compiler-form for
proper-list-p.
---
 lisp/emacs-lisp/byte-opt.el | 7 ++++---
 lisp/emacs-lisp/bytecomp.el | 1 +
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 33d4964763..4577297bba 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -879,7 +879,8 @@ byte-optimize-memq
 (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)
@@ -1160,8 +1161,8 @@ byte-optimize-set
         make-list make-string make-symbol marker-buffer max member memq min
         minibuffer-selected-window minibuffer-window
         mod multibyte-char-to-unibyte next-window nth nthcdr number-to-string
-        parse-colon-path plist-get plist-member
-        prefix-numeric-value previous-window prin1-to-string propertize
+         parse-colon-path plist-get plist-member prefix-numeric-value
+         previous-window prin1-to-string proper-list-p propertize
         degrees-to-radians
         radians-to-degrees rassq rassoc read-from-string regexp-quote
         region-beginning region-end reverse round
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 8bbe6292d9..0e953dc96b 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -3566,6 +3566,7 @@ byte-defop-compiler-1
 
 ;;####(byte-defop-compiler move-to-column      1)
 (byte-defop-compiler-1 interactive byte-compile-noop)
+(byte-defop-compiler-1 proper-list-p 1)
 
 
 (defun byte-compile-subr-wrong-args (form n)
-- 
2.20.1

Thanks,

-- 
Basil

reply via email to

[Prev in Thread] Current Thread [Next in Thread]