]> git.eshelyaron.com Git - emacs.git/commit
* lisp/emacs-lisp/cconv.el: Improve line-nb info of unused var warnings
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 27 Feb 2021 01:24:52 +0000 (20:24 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 27 Feb 2021 01:24:52 +0000 (20:24 -0500)
commita350ae058caedcb7be7d332564817954e3624e60
tree92adecae200f7e9c76c4cbf68ffb42afac99383c
parent99340ad17a826c61895b3e1ed6928b36fbfeac60
* lisp/emacs-lisp/cconv.el: Improve line-nb info of unused var warnings

Instead of warning about unused vars during the analysis phase of
closure conversion, do it in the actual closure conversion by
annotating the code with "unused" warnings, so that the warnings
get emitted later by the bytecomp phase, like all other warnings,
at which point the line-number info is a bit less imprecise.

Take advantage of this change to wrap the expressions of unused
let-bound vars inside (ignore ...) so the byte-compiler can better
optimize them away.

Finally, promote `macroexp--warn-and-return` to "official" status
by removing its "--" marker.

(cconv-captured+mutated, cconv-lambda-candidates): Remove vars.
(cconv-var-classification): New var to replace them.
(cconv-warnings-only): Delete function.
(cconv--warn-unused-msg, cconv--var-classification): New functions.
(cconv--convert-funcbody): Add warnings for unused args.
(cconv-convert): Add warnings for unused vars in `let` and `condition-case`.
(cconv--analyze-use): Don't emit an "unused var" warning any more,
but instead remember the fact in `cconv-var-classification`.

* lisp/emacs-lisp/bytecomp.el (byte-compile-force-lexical-warnings):
Remove variable.
(byte-compile-preprocess): Remove corresponding case.

* lisp/emacs-lisp/pcase.el (pcase--if): Don't throw away `test` effects.
(\`):
* lisp/emacs-lisp/cl-macs.el (cl--do-arglist): Use `car-safe` instead
of `car`, so it can more easily be removed by the optimizer if the
result is not used.

* lisp/emacs-lisp/macroexp.el (macroexp--warn-wrap): New function.
(macroexp-warn-and-return): Rename from `macroexp--warn-and-return`.
13 files changed:
etc/NEWS
lisp/emacs-lisp/byte-run.el
lisp/emacs-lisp/bytecomp.el
lisp/emacs-lisp/cconv.el
lisp/emacs-lisp/cl-generic.el
lisp/emacs-lisp/cl-macs.el
lisp/emacs-lisp/eieio-core.el
lisp/emacs-lisp/eieio.el
lisp/emacs-lisp/gv.el
lisp/emacs-lisp/inline.el
lisp/emacs-lisp/macroexp.el
lisp/emacs-lisp/pcase.el
lisp/progmodes/elisp-mode.el