* lisp/emacs-lisp/byte-opt.el (byte-optimize-binary-predicate): Don't assume
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 27 May 2014 14:56:03 +0000 (10:56 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 27 May 2014 14:56:03 +0000 (10:56 -0400)
there can't be more than 2 arguments.

Fixes: debbugs:17584

lisp/ChangeLog
lisp/emacs-lisp/byte-opt.el

index 1b88600..fe34854 100644 (file)
@@ -1,3 +1,8 @@
+2014-05-27  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * emacs-lisp/byte-opt.el (byte-optimize-binary-predicate): Don't assume
+       there can't be more than 2 arguments (bug#17584).
+
 2014-05-27  Glenn Morris  <rgm@gnu.org>
 
        * simple.el (filter-buffer-substring-functions)
index b1e0641..fe6640c 100644 (file)
 
 
 (defun byte-optimize-binary-predicate (form)
-  (if (macroexp-const-p (nth 1 form))
-      (if (macroexp-const-p (nth 2 form))
-         (condition-case ()
-             (list 'quote (eval form))
-           (error form))
-       ;; This can enable some lapcode optimizations.
-       (list (car form) (nth 2 form) (nth 1 form)))
-    form))
+  (cond
+   ((or (not (macroexp-const-p (nth 1 form)))
+        (nthcdr 3 form)) ;; In case there are more than 2 args.
+    form)
+   ((macroexp-const-p (nth 2 form))
+    (condition-case ()
+        (list 'quote (eval form))
+      (error form)))
+   (t ;; This can enable some lapcode optimizations.
+    (list (car form) (nth 2 form) (nth 1 form)))))
 
 (defun byte-optimize-predicate (form)
   (let ((ok t)