]> code.delx.au - gnu-emacs/commitdiff
Fix byte-compiler pacification for declare-function
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 27 May 2016 02:10:26 +0000 (19:10 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 27 May 2016 02:10:47 +0000 (19:10 -0700)
Problem reported by Michael Heerdegen in:
http://lists.gnu.org/archive/html/emacs-devel/2016-05/msg00590.html
* lisp/emacs-lisp/bytecomp.el:
(byte-compile-macroexpand-declare-function):
Revert signature to previous value.
* lisp/subr.el (declare-function): Change signature to
match the reverted signature used in the byte compiler.

lisp/emacs-lisp/bytecomp.el
lisp/subr.el

index aa13210b633d669800b784c0fc780373f4d2492d..11eb44cea31be7cbf4286cd6e7a5d529113fdfd3 100644 (file)
@@ -2958,24 +2958,23 @@ for symbols generated by the byte compiler itself."
         (list body))))
 
 ;; Special macro-expander used during byte-compilation.
-(defun byte-compile-macroexpand-declare-function (fn file &optional arglist
-                                                     fileonly)
-  (let ((gotargs (listp arglist))
+(defun byte-compile-macroexpand-declare-function (fn file &rest args)
+  (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 arglist nil)
+         (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 arglist)
+                      (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))
   ;; Delegate the rest to the normal macro definition.
-  (macroexpand `(declare-function ,fn ,file ,arglist ,fileonly)))
+  (macroexpand `(declare-function ,fn ,file ,@args)))
 
 \f
 ;; This is the recursive entry point for compiling each subform of an
index b5d6f6fa01b2828aadd2e299fc485200fa7ecf23..7cbf0063ac1178d14496e635f97ef49faeadb73c 100644 (file)
 ;; Beware: while this file has tag `utf-8', before it's compiled, it gets
 ;; loaded as "raw-text", so non-ASCII chars won't work right during bootstrap.
 
-(defmacro declare-function (_fn _file &optional _arglist _fileonly)
+(defmacro declare-function (_fn _file &rest _args)
   "Tell the byte-compiler that function FN is defined, in FILE.
 Optional ARGLIST is the argument list used by the function.
 The FILE argument is not used by the byte-compiler, but by the
 `check-declare' package, which checks that FILE contains a
-definition for FN.  ARGLIST is used by both the byte-compiler
-and `check-declare' to check for consistency.
+definition for FN.  Remaining ARGS are used by both the
+byte-compiler and `check-declare' to check for consistency.
 
 FILE can be either a Lisp file (in which case the \".el\"
 extension is optional), or a C file.  C files are expanded
@@ -46,6 +46,8 @@ declaration.  A FILE with an \"ext:\" prefix is an external file.
 `check-declare' will check such files if they are found, and skip
 them without error if they are not.
 
+ARGS can contain one or two optional args.  First optional arg
+ARGLIST specifies the function arguments.  Second optional arg
 FILEONLY non-nil means that `check-declare' will only check that
 FILE exists, not that it defines FN.  This is intended for
 function-definitions that `check-declare' does not recognize, e.g.