summaryrefslogtreecommitdiff
path: root/test/lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2022-10-16 12:01:47 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2022-10-16 12:01:47 -0400
commit13d6e8fa54843b0b087e5a9c266e4b7e0d709c3f (patch)
tree1c09984f5d78c711416d7748bf83051789a0ac00 /test/lisp
parent0e5fc2345d8ec72fd8f7ad51ce1e42040e0e91da (diff)
downloademacs-13d6e8fa54843b0b087e5a9c266e4b7e0d709c3f.tar.gz
emacs-13d6e8fa54843b0b087e5a9c266e4b7e0d709c3f.tar.bz2
emacs-13d6e8fa54843b0b087e5a9c266e4b7e0d709c3f.zip
cl-generic: Fix `advertised-calling-convention` declarations
* lisp/emacs-lisp/cl-generic.el (cl-generic-define-method): Preserve the `advertised-calling-convention`, if any (bug#58563). * lisp/subr.el (declare): Warn when we hit this. * lisp/emacs-lisp/byte-run.el (get-advertised-calling-convention): New fun. * lisp/progmodes/elisp-mode.el (elisp-get-fnsym-args-string): * lisp/help-fns.el (help-fns--signature): * lisp/emacs-lisp/bytecomp.el (byte-compile-fdefinition): Use it. * test/lisp/emacs-lisp/cl-generic-tests.el (cl-generic-tests--acc): New fun. (cl-generic-tests--advertised-calling-convention-bug58563): New test.
Diffstat (limited to 'test/lisp')
-rw-r--r--test/lisp/emacs-lisp/cl-generic-tests.el22
1 files changed, 22 insertions, 0 deletions
diff --git a/test/lisp/emacs-lisp/cl-generic-tests.el b/test/lisp/emacs-lisp/cl-generic-tests.el
index 56b766769ea..8e807b15915 100644
--- a/test/lisp/emacs-lisp/cl-generic-tests.el
+++ b/test/lisp/emacs-lisp/cl-generic-tests.el
@@ -297,5 +297,27 @@ Edebug symbols (Bug#42672)."
(intern "cl-defgeneric/edebug/method/2 (number)")
'cl-defgeneric/edebug/method/2))))))
+(cl-defgeneric cl-generic-tests--acc (x &optional y)
+ (declare (advertised-calling-convention (x) "671.2")))
+
+(cl-defmethod cl-generic-tests--acc ((x float)) (+ x 5.0))
+
+(ert-deftest cl-generic-tests--advertised-calling-convention-bug58563 ()
+ (should (equal (get-advertised-calling-convention
+ (indirect-function 'cl-generic-tests--acc))
+ '(x)))
+ (should
+ (condition-case err
+ (let ((lexical-binding t)
+ (byte-compile-debug t)
+ (byte-compile-error-on-warn t))
+ (byte-compile '(cl-defmethod cl-generic-tests--acc ((x list))
+ (declare (advertised-calling-convention (y) "1.1"))
+ (cons x '(5 5 5 5 5))))
+ nil)
+ (error
+ (and (eq 'error (car err))
+ (string-match "Stray.*declare" (cadr err)))))))
+
(provide 'cl-generic-tests)
;;; cl-generic-tests.el ends here