mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-15 10:30:25 -08:00
Warn about arity errors in inlining calls (bug#12299)
Wrong number of arguments in inlining function calls (to `defsubst` or
explicitly using `inline`) did not result in warnings, or in very
cryptic ones.
* lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand): Add calls
to `byte-compile--check-arity-bytecode`.
* lisp/emacs-lisp/bytecomp.el (byte-compile-emit-callargs-warn)
(byte-compile--check-arity-bytecode): New functions.
(byte-compile-callargs-warn): Use factored-out function.
* test/lisp/emacs-lisp/bytecomp-resources/warn-callargs-defsubst.el:
* test/lisp/emacs-lisp/bytecomp-tests.el ("warn-callargs-defsubst.el"):
New test case.
This commit is contained in:
parent
4d172946c3
commit
109ca1bd00
4 changed files with 39 additions and 11 deletions
|
|
@ -274,6 +274,7 @@ Earlier variables shadow later ones with the same name.")
|
|||
((pred byte-code-function-p)
|
||||
;; (message "Inlining byte-code for %S!" name)
|
||||
;; The byte-code will be really inlined in byte-compile-unfold-bcf.
|
||||
(byte-compile--check-arity-bytecode form fn)
|
||||
`(,fn ,@(cdr form)))
|
||||
((or `(lambda . ,_) `(closure . ,_))
|
||||
;; While byte-compile-unfold-bcf can inline dynbind byte-code into
|
||||
|
|
@ -300,7 +301,9 @@ Earlier variables shadow later ones with the same name.")
|
|||
;; surrounded the `defsubst'.
|
||||
(byte-compile-warnings nil))
|
||||
(byte-compile name))
|
||||
`(,(symbol-function name) ,@(cdr form))))
|
||||
(let ((bc (symbol-function name)))
|
||||
(byte-compile--check-arity-bytecode form bc)
|
||||
`(,bc ,@(cdr form)))))
|
||||
|
||||
(_ ;; Give up on inlining.
|
||||
form))))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue