mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-06 06:20:55 -08:00
Fix function arity check for noncompiled callees (bug#78685)
This is a regression from Emacs 29. * lisp/emacs-lisp/bytecomp.el (byte-compile-fdefinition): Make it work for functions that aren't compiled. * test/lisp/emacs-lisp/bytecomp-tests.el (bytecomp-tests--f): (bytecomp-tests--warn-arity-noncompiled-callee): Add test.
This commit is contained in:
parent
7393d7419e
commit
8b0f5b0597
2 changed files with 16 additions and 5 deletions
|
|
@ -1456,10 +1456,7 @@ when printing the error message."
|
|||
(let ((fn name))
|
||||
(while (and (symbolp fn)
|
||||
(fboundp fn)
|
||||
(or (symbolp (symbol-function fn))
|
||||
(consp (symbol-function fn))
|
||||
(and (not macro-p)
|
||||
(compiled-function-p (symbol-function fn)))))
|
||||
(functionp (symbol-function fn)))
|
||||
(setq fn (symbol-function fn)))
|
||||
(let ((advertised (get-advertised-calling-convention
|
||||
(if (and (symbolp fn) (fboundp fn))
|
||||
|
|
@ -1471,7 +1468,7 @@ when printing the error message."
|
|||
(if macro-p
|
||||
`(macro lambda ,advertised)
|
||||
`(lambda ,advertised)))
|
||||
((and (not macro-p) (compiled-function-p fn)) fn)
|
||||
((and (not macro-p) (functionp fn)) fn)
|
||||
((not (consp fn)) nil)
|
||||
((eq 'macro (car fn)) (cdr fn))
|
||||
(macro-p nil)
|
||||
|
|
|
|||
|
|
@ -1357,6 +1357,20 @@ byte-compiled. Run with dynamic binding."
|
|||
(concat ";;; -*-lexical-binding:nil-*-\n" some-code)))
|
||||
(should (cookie-warning some-code))))))
|
||||
|
||||
(defun bytecomp-tests--f (x y &optional u v) (list x y u v))
|
||||
|
||||
(ert-deftest bytecomp-tests--warn-arity-noncompiled-callee ()
|
||||
"Check that calls to non-compiled functions are arity-checked (bug#78685)"
|
||||
(should (not (compiled-function-p (symbol-function 'bytecomp-tests--f))))
|
||||
(let* ((source (concat ";;; -*-lexical-binding:t-*-\n"
|
||||
"(defun my-fun () (bytecomp-tests--f 11))\n"))
|
||||
(lexical-binding t)
|
||||
(log (bytecomp-tests--log-from-compilation source)))
|
||||
(should (string-search
|
||||
(concat "Warning: `bytecomp-tests--f' called with 1 argument,"
|
||||
" but requires 2-4")
|
||||
log))))
|
||||
|
||||
(ert-deftest bytecomp-tests--unescaped-char-literals ()
|
||||
"Check that byte compiling warns about unescaped character
|
||||
literals (Bug#20852)."
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue