changeset 86302:9525bd421fdb

(check-declare-verify): Fix previous change. Warn if could not find an arglist to check.
author Glenn Morris <rgm@gnu.org>
date Thu, 22 Nov 2007 06:53:24 +0000
parents 447a37803114
children a83e2b9e25fb
files lisp/emacs-lisp/check-declare.el
diffstat 1 files changed, 29 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/check-declare.el	Thu Nov 22 06:53:04 2007 +0000
+++ b/lisp/emacs-lisp/check-declare.el	Thu Nov 22 06:53:24 2007 +0000
@@ -108,17 +108,22 @@
                   ;; (min . max) for a fixed number of arguments, or
                   ;; arglists with optional elements.
                   ;; (min) for arglists with &rest.
+                  ;; sig = 'err means we could not find an arglist.
                   sig (cond (cflag
-                             (re-search-forward "," nil t 3)
-                             (skip-chars-forward " \t\n")
-                             ;; Assuming minargs and maxargs on same line.
-                             (when (looking-at "\\([0-9]+\\)[ \t]*,[ \t]*\
+                             (or
+                              (when (re-search-forward "," nil t 3)
+                                (skip-chars-forward " \t\n")
+                                ;; Assuming minargs and maxargs on same line.
+                                (when (looking-at "\\([0-9]+\\)[ \t]*,[ \t]*\
 \\([0-9]+\\|MANY\\|UNEVALLED\\)")
-                               (setq minargs (string-to-number (match-string 1))
-                                     maxargs (match-string 2))
-                               (cons minargs (unless (string-match "[^0-9]"
-                                                                   maxargs)
-                                               (string-to-number maxargs)))))
+                                  (setq minargs (string-to-number
+                                                 (match-string 1))
+                                        maxargs (match-string 2))
+                                  (cons minargs (unless (string-match "[^0-9]"
+                                                                      maxargs)
+                                                 (string-to-number
+                                                  maxargs)))))
+                              'err))
                             ((string-equal (match-string 1)
                                            "define-derived-mode")
                              '(0 . 0))
@@ -129,24 +134,29 @@
                             ((string-equal (match-string 1)
                                            "defalias")
                              t)
+                            ((looking-at "\\((\\|nil\\)")
+                             (byte-compile-arglist-signature
+                              (read (current-buffer))))
                             (t
-                             (if (looking-at "\\((\\|nil\\)")
-                                 (byte-compile-arglist-signature
-                                  (read (current-buffer))))))
+                             'err))
                   ;; alist of functions and arglist signatures.
                   siglist (cons (cons fn sig) siglist)))))
     (dolist (e fnlist)
       (setq arglist (nth 2 e)
             type
-            (if re                   ; re non-nil means found a file
-                (if (setq sig (assoc (cadr e) siglist))
+            (if re                     ; re non-nil means found a file
+                (if (setq sig (assoc (cadr e) siglist)) ; found function
                     ;; Recall we use t to mean no arglist specified,
                     ;; to distinguish from an empty arglist.
-                    (unless (or (eq arglist t)
-                                (eq sig t))
-                      (unless (equal (byte-compile-arglist-signature arglist)
-                                     (cdr sig))
-                        "arglist mismatch"))
+                    (unless (eq arglist t)
+                      (setq sig (cdr-safe sig))
+                      (cond ((eq sig t)) ; defalias, can't check
+                            ((eq sig 'err)
+                             "arglist not found") ; internal error
+                            ((not (equal (byte-compile-arglist-signature
+                                          arglist)
+                                         sig))
+                             "arglist mismatch")))
                   "function not found")
               "file not found"))
       (when type