• Stefan Monnier's avatar
    * lisp/emacs-lisp/cconv.el: Improve line-nb info of unused var warnings · a350ae05
    Stefan Monnier authored
    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`.
    a350ae05
macroexp.el 29.6 KB