emacs-diffs
[Top][All Lists]
Advanced

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

master f4833c88bb 2/4: Rewrite string-greaterp and string> using string-


From: Mattias Engdegård
Subject: master f4833c88bb 2/4: Rewrite string-greaterp and string> using string-lessp
Date: Mon, 4 Apr 2022 04:52:28 -0400 (EDT)

branch: master
commit f4833c88bbb3ca69f75e230a50bbd5edb4d5c00d
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    Rewrite string-greaterp and string> using string-lessp
    
    Since string-lessp has its own byte-op, using it is much faster than
    calling string-greaterp even with the need to bind a temporary
    variable.
    
    * lisp/emacs-lisp/byte-opt.el (byte-optimize-string-greaterp): New.
    (string-greaterp, string>): Set byte-optimizer.
---
 lisp/emacs-lisp/byte-opt.el | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 0a79bf9b79..39bb622459 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1049,6 +1049,14 @@ See Info node `(elisp) Integer Basics'."
         form          ; No improvement.
       (cons 'concat (nreverse newargs)))))
 
+(defun byte-optimize-string-greaterp (form)
+  ;; Rewrite in terms of `string-lessp' which has its own bytecode.
+  (pcase (cdr form)
+    (`(,a ,b) (let ((arg1 (make-symbol "arg1")))
+                `(let ((,arg1 ,a))
+                   (string-lessp ,b ,arg1))))
+    (_ form)))
+
 (put 'identity 'byte-optimizer #'byte-optimize-identity)
 (put 'memq 'byte-optimizer #'byte-optimize-memq)
 (put 'memql  'byte-optimizer #'byte-optimize-member)
@@ -1072,6 +1080,9 @@ See Info node `(elisp) Integer Basics'."
 (put 'string= 'byte-optimizer #'byte-optimize-binary-predicate)
 (put 'string-equal 'byte-optimizer #'byte-optimize-binary-predicate)
 
+(put 'string-greaterp 'byte-optimizer #'byte-optimize-string-greaterp)
+(put 'string> 'byte-optimizer #'byte-optimize-string-greaterp)
+
 (put 'concat 'byte-optimizer #'byte-optimize-concat)
 
 ;; I'm not convinced that this is necessary.  Doesn't the optimizer loop



reply via email to

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