Better sort
ignored-return-value warning
* lisp/emacs-lisp/bytecomp.el (byte-compile-form) (bytecomp--actually-important-return-value-p): Special handling of `sort` that takes into account that it may return an important value depending on the :in-place keyword argument.
This commit is contained in:
parent
cbd862865f
commit
b20866c4b3
1 changed files with 14 additions and 2 deletions
|
@ -3445,6 +3445,7 @@ lambda-expression."
|
|||
((and (or sef (function-get (car form) 'important-return-value))
|
||||
;; Don't warn for arguments to `ignore'.
|
||||
(not (eq byte-compile--for-effect 'for-effect-no-warn))
|
||||
(bytecomp--actually-important-return-value-p form)
|
||||
(byte-compile-warning-enabled-p
|
||||
'ignored-return-value (car form)))
|
||||
(byte-compile-warn-x
|
||||
|
@ -3471,6 +3472,15 @@ lambda-expression."
|
|||
(if byte-compile--for-effect
|
||||
(byte-compile-discard)))))
|
||||
|
||||
(defun bytecomp--actually-important-return-value-p (form)
|
||||
"Whether FORM is really a call with a return value that should not go unused.
|
||||
This assumes the function has the `important-return-value' property."
|
||||
(cond ((eq (car form) 'sort)
|
||||
;; For `sort', we only care about non-destructive uses.
|
||||
(and (zerop (% (length form) 2)) ; new-style call
|
||||
(not (plist-get (cddr form) :in-place))))
|
||||
(t t)))
|
||||
|
||||
(let ((important-return-value-fns
|
||||
'(
|
||||
;; These functions are side-effect-free except for the
|
||||
|
@ -3478,9 +3488,11 @@ lambda-expression."
|
|||
mapcar mapcan mapconcat
|
||||
assoc plist-get plist-member
|
||||
|
||||
;; It's safe to ignore the value of `sort' and `nreverse'
|
||||
;; It's safe to ignore the value of `nreverse'
|
||||
;; when used on arrays, but most calls pass lists.
|
||||
nreverse sort
|
||||
nreverse
|
||||
|
||||
sort ; special handling (non-destructive calls only)
|
||||
|
||||
match-data
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue