aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lisp/emacs-lisp/byte-opt.el11
1 files changed, 11 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 0a79bf9b797..39bb6224595 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'."
1049 form ; No improvement. 1049 form ; No improvement.
1050 (cons 'concat (nreverse newargs))))) 1050 (cons 'concat (nreverse newargs)))))
1051 1051
1052(defun byte-optimize-string-greaterp (form)
1053 ;; Rewrite in terms of `string-lessp' which has its own bytecode.
1054 (pcase (cdr form)
1055 (`(,a ,b) (let ((arg1 (make-symbol "arg1")))
1056 `(let ((,arg1 ,a))
1057 (string-lessp ,b ,arg1))))
1058 (_ form)))
1059
1052(put 'identity 'byte-optimizer #'byte-optimize-identity) 1060(put 'identity 'byte-optimizer #'byte-optimize-identity)
1053(put 'memq 'byte-optimizer #'byte-optimize-memq) 1061(put 'memq 'byte-optimizer #'byte-optimize-memq)
1054(put 'memql 'byte-optimizer #'byte-optimize-member) 1062(put 'memql 'byte-optimizer #'byte-optimize-member)
@@ -1072,6 +1080,9 @@ See Info node `(elisp) Integer Basics'."
1072(put 'string= 'byte-optimizer #'byte-optimize-binary-predicate) 1080(put 'string= 'byte-optimizer #'byte-optimize-binary-predicate)
1073(put 'string-equal 'byte-optimizer #'byte-optimize-binary-predicate) 1081(put 'string-equal 'byte-optimizer #'byte-optimize-binary-predicate)
1074 1082
1083(put 'string-greaterp 'byte-optimizer #'byte-optimize-string-greaterp)
1084(put 'string> 'byte-optimizer #'byte-optimize-string-greaterp)
1085
1075(put 'concat 'byte-optimizer #'byte-optimize-concat) 1086(put 'concat 'byte-optimizer #'byte-optimize-concat)
1076 1087
1077;; I'm not convinced that this is necessary. Doesn't the optimizer loop 1088;; I'm not convinced that this is necessary. Doesn't the optimizer loop