* [PATCH] Optimize certain memq forms during byte-compilation.
@ 2018-03-23 4:45 Vibhav Pant
2018-03-23 8:56 ` Robert Pluim
0 siblings, 1 reply; 3+ messages in thread
From: Vibhav Pant @ 2018-03-23 4:45 UTC (permalink / raw)
To: emacs-devel; +Cc: Vibhav Pant
* lisp/emacs-lisp/byte-opt.el (byte-optimize-memq): New function.
Set the byte optimizer function for memq to byte-optimize-memq.
---
lisp/emacs-lisp/byte-opt.el | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index a316364761..e4c5300b0e 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -892,7 +892,20 @@ byte-optimize-identity
(if (= 1 (length (cdr form))) "" "s"))
form))
+(defun byte-optimize-memq (form)
+ (if (/= (length (cdr form)) 2)
+ (byte-compile-warn "memq called with %d arg%s, but requires 2"
+ (length (cdr form))
+ (if (= 1 (length (cdr form))) "" "s"))
+ (let ((list (nth 2 form)))
+ (when (and (eq (car-safe list) 'quote)
+ (listp (setq list (cadr list)))
+ (= (length list) 1))
+ (setq form (list 'eq (nth 1 form) (list 'quote (nth 0 list))))))
+ (byte-optimize-predicate form)))
+
(put 'identity 'byte-optimizer 'byte-optimize-identity)
+(put 'memq 'byte-optimizer 'byte-optimize-memq)
(put '+ 'byte-optimizer 'byte-optimize-plus)
(put '* 'byte-optimizer 'byte-optimize-multiply)
@@ -915,7 +928,6 @@ byte-optimize-identity
(put '1- 'byte-optimizer 'byte-optimize-predicate)
(put 'not 'byte-optimizer 'byte-optimize-predicate)
(put 'null 'byte-optimizer 'byte-optimize-predicate)
-(put 'memq 'byte-optimizer 'byte-optimize-predicate)
(put 'consp 'byte-optimizer 'byte-optimize-predicate)
(put 'listp 'byte-optimizer 'byte-optimize-predicate)
(put 'symbolp 'byte-optimizer 'byte-optimize-predicate)
@@ -933,7 +945,6 @@ byte-optimize-identity
(put 'car-safe 'byte-optimizer 'byte-optimize-predicate)
(put 'cdr-safe 'byte-optimizer 'byte-optimize-predicate)
-
;; I'm not convinced that this is necessary. Doesn't the optimizer loop
;; take care of this? - Jamie
;; I think this may some times be necessary to reduce ie (quote 5) to 5,
--
2.16.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] Optimize certain memq forms during byte-compilation.
2018-03-23 4:45 [PATCH] Optimize certain memq forms during byte-compilation Vibhav Pant
@ 2018-03-23 8:56 ` Robert Pluim
2018-03-24 18:41 ` Vibhav Pant
0 siblings, 1 reply; 3+ messages in thread
From: Robert Pluim @ 2018-03-23 8:56 UTC (permalink / raw)
To: Vibhav Pant; +Cc: emacs-devel
Vibhav Pant <vibhavp@gmail.com> writes:
> * lisp/emacs-lisp/byte-opt.el (byte-optimize-memq): New function.
> Set the byte optimizer function for memq to byte-optimize-memq.
Is (memq foo '(bar)) actually that common? In any case, some
explanation of the intent of the change would be helpful so we don't
need to read the code every time.
Robert
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] Optimize certain memq forms during byte-compilation.
2018-03-23 8:56 ` Robert Pluim
@ 2018-03-24 18:41 ` Vibhav Pant
0 siblings, 0 replies; 3+ messages in thread
From: Vibhav Pant @ 2018-03-24 18:41 UTC (permalink / raw)
To: emacs-devel
On Fri, Mar 23, 2018 at 2:26 PM, Robert Pluim <rpluim@gmail.com> wrote:
> Is (memq foo '(bar)) actually that common?
I've seen it used in the emacs lisp code base, mostly for detecting
the system-type.
> In any case, some explanation of the intent of the change would be helpful
> so we don't need to read the code every time.
I'll add a comment explaining the optimization, yeah.
Thanks,
Vibhav
--
Vibhav Pant
vibhavp@gmail.com
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-03-24 18:41 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-03-23 4:45 [PATCH] Optimize certain memq forms during byte-compilation Vibhav Pant
2018-03-23 8:56 ` Robert Pluim
2018-03-24 18:41 ` Vibhav Pant
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).