Minor declare-function improvement

* lisp/emacs-lisp/bytecomp.el
(byte-compile-macroexpand-declare-function):
Handle declarations after calls.  (Bug#20509)
This commit is contained in:
Glenn Morris 2015-05-05 20:13:10 -07:00
parent 754fdb1280
commit 276f5d9e10

View file

@ -2920,11 +2920,17 @@ for symbols generated by the byte compiler itself."
;; Special macro-expander used during byte-compilation.
(defun byte-compile-macroexpand-declare-function (fn file &rest args)
(push (cons fn
(if (and (consp args) (listp (car args)))
(list 'declared (car args))
t)) ; Arglist not specified.
byte-compile-function-environment)
(let ((gotargs (and (consp args) (listp (car args))))
(unresolved (assq fn byte-compile-unresolved-functions)))
(when unresolved ; function was called before declaration
(if (and gotargs (byte-compile-warning-enabled-p 'callargs))
(byte-compile-arglist-warn fn (car args) nil)
(setq byte-compile-unresolved-functions
(delq unresolved byte-compile-unresolved-functions))))
(push (cons fn (if gotargs
(list 'declared (car args))
t)) ; Arglist not specified.
byte-compile-function-environment))
;; We are stating that it _will_ be defined at runtime.
(setq byte-compile-noruntime-functions
(delq fn byte-compile-noruntime-functions))