mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
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.
This commit is contained in:
parent
16ee9fa138
commit
f4833c88bb
1 changed files with 11 additions and 0 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue