changeset 86300:96fee69c65a2

(check-declare-verify): Implement arglist checking for C files.
author Glenn Morris <rgm@gnu.org>
date Thu, 22 Nov 2007 06:20:53 +0000
parents 061a530122b6
children 447a37803114
files lisp/emacs-lisp/check-declare.el
diffstat 1 files changed, 14 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/emacs-lisp/check-declare.el	Thu Nov 22 06:20:27 2007 +0000
+++ b/lisp/emacs-lisp/check-declare.el	Thu Nov 22 06:20:53 2007 +0000
@@ -34,8 +34,6 @@
 
 ;; 1. Handle defstructs (eg uniquify-item-base in desktop.el).
 
-;; 2. Argument checking for functions defined in C.
-
 ;;; Code:
 
 (defconst check-declare-warning-buffer "*Check Declarations Warnings*"
@@ -89,7 +87,7 @@
 \(FILE FN TYPE), where TYPE is a string giving details of the error."
   (let ((m (format "Checking %s..." fnfile))
         (cflag (string-equal "c" (file-name-extension fnfile)))
-        re fn sig siglist arglist type errlist)
+        re fn sig siglist arglist type errlist minargs maxargs)
     (message "%s" m)
     (or cflag
         (file-exists-p fnfile)
@@ -110,7 +108,18 @@
                   ;; (min . max) for a fixed number of arguments, or
                   ;; arglists with optional elements.
                   ;; (min) for arglists with &rest.
-                  sig (cond ((string-equal (match-string 1)
+                  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]*\
+\\([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)))))
+                            ((string-equal (match-string 1)
                                            "define-derived-mode")
                              '(0 . 0))
                             ((string-equal (match-string 1)
@@ -133,9 +142,7 @@
                 (if (setq sig (assoc (cadr e) siglist))
                     ;; Recall we use t to mean no arglist specified,
                     ;; to distinguish from an empty arglist.
-                    ;; FIXME c arg checking not yet implemented.
-                    (unless (or cflag
-                                (eq arglist t)
+                    (unless (or (eq arglist t)
                                 (eq sig t))
                       (unless (equal (byte-compile-arglist-signature arglist)
                                      (cdr sig))