Function: byte-opt--nary-comparison
byte-opt--nary-comparison is a byte-compiled function defined in
byte-opt.el.gz.
Signature
(byte-opt--nary-comparison FORM)
Documentation
Optimize n-ary comparisons such as =, < etc.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/byte-opt.el.gz
(defun byte-opt--nary-comparison (form)
"Optimize n-ary comparisons such as `=', `<' etc."
(let ((nargs (length (cdr form))))
(cond
((= nargs 1)
`(progn ,(cadr form) t))
((>= nargs 3)
;; At least 3 arguments: transform to N-1 binary comparisons,
;; since those have their own byte-ops which are particularly
;; fast for fixnums.
(let* ((op (car form))
(bindings nil)
(rev-args nil))
(if (memq nil (mapcar #'macroexp-copyable-p (cddr form)))
;; At least one arg beyond the first is non-constant non-variable:
;; create temporaries for all args to guard against side-effects.
;; The optimizer will eliminate trivial bindings later.
(let ((i 1))
(dolist (arg (cdr form))
(let ((var (make-symbol (format "arg%d" i))))
(push var rev-args)
(push (list var arg) bindings)
(setq i (1+ i)))))
;; All args beyond the first are copyable: no temporary variables
;; required.
(setq rev-args (reverse (cdr form))))
(let ((prev (car rev-args))
(exprs nil))
(dolist (arg (cdr rev-args))
(push (list op arg prev) exprs)
(setq prev arg))
(let ((and-expr (cons 'and exprs)))
(if bindings
(list 'let (nreverse bindings) and-expr)
and-expr)))))
(t form))))