emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/lisp/emacs-lisp/check-declare.el,v


From: Glenn Morris
Subject: [Emacs-diffs] Changes to emacs/lisp/emacs-lisp/check-declare.el,v
Date: Thu, 22 Nov 2007 04:18:54 +0000

CVSROOT:        /sources/emacs
Module name:    emacs
Changes by:     Glenn Morris <gm>       07/11/22 04:18:54

Index: check-declare.el
===================================================================
RCS file: /sources/emacs/emacs/lisp/emacs-lisp/check-declare.el,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- check-declare.el    21 Nov 2007 09:03:05 -0000      1.4
+++ check-declare.el    22 Nov 2007 04:18:54 -0000      1.5
@@ -34,7 +34,7 @@
 
 ;; 1. Handle defstructs (eg uniquify-item-base in desktop.el).
 
-;; 2. Check C files (look in src/)?
+;; 2. Argument checking for functions defined in C.
 
 ;;; Code:
 
@@ -56,7 +56,15 @@
         (setq fn (match-string 1)
               fnfile (match-string 2))
         (or (file-name-absolute-p fnfile)
-            (setq fnfile (expand-file-name fnfile (file-name-directory file))))
+            (setq fnfile
+                  (expand-file-name fnfile
+                                    ;; .c files are assumed to be
+                                    ;; relative to the Emacs src/ directory.
+                                    (if (string-equal
+                                         "c" (file-name-extension fnfile))
+                                        (expand-file-name "src"
+                                                          source-directory)
+                                      (file-name-directory file)))))
         (setq alist (cons
                      (list fnfile fn
                            (progn
@@ -80,25 +88,28 @@
 found to be true, otherwise a list of errors with elements of the form
 \(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)
     (message "%s" m)
-    (if (string-equal (file-name-extension fnfile) "c")
-        (progn
-          (message "%sskipping C file" m)
-          nil)
-      (or (file-exists-p fnfile)
+    (or cflag
+        (file-exists-p fnfile)
           (setq fnfile (concat fnfile ".el")))
       (if (file-exists-p fnfile)
           (with-temp-buffer
             (insert-file-contents fnfile)
             ;; defsubst's don't _have_ to be known at compile time.
-            (setq re (format "^[ \t]*(\\(def\\(?:un\\|subst\\|\
+          (setq re (format (if cflag
+                               "^[ \t]*\\(DEFUN\\)[ \t]*([ \t]*\"%s\""
+                             "^[ \t]*(\\(def\\(?:un\\|subst\\|\
 ine-derived-mode\\|ine-minor-mode\\|alias[ \t]+'\\)\\)\
-\[ \t]*%s\\([ \t;]+\\|$\\)"
+\[ \t]*%s\\([ \t;]+\\|$\\)")
                              (regexp-opt (mapcar 'cadr fnlist) t)))
             (while (re-search-forward re nil t)
               (skip-chars-forward " \t\n")
               (setq fn (match-string 2)
+                  ;; (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)
                                              "define-derived-mode")
                                '(0 . 0))
@@ -122,7 +133,9 @@
                   (if (setq sig (assoc (cadr e) siglist))
                       ;; Recall we use t to mean no arglist specified,
                       ;; to distinguish from an empty arglist.
-                      (unless (or (eq arglist t)
+                    ;; FIXME c arg checking not yet implemented.
+                    (unless (or cflag
+                                (eq arglist t)
                                   (eq sig t))
                         (unless (equal (byte-compile-arglist-signature arglist)
                                        (cdr sig))
@@ -132,7 +145,7 @@
         (when type
           (setq errlist (cons (list (car e) (cadr e) type) errlist))))
       (message "%s%s" m (if errlist "problems found" "OK"))
-      errlist)))
+    errlist))
 
 (defun check-declare-sort (alist)
   "Sort a list with elements FILE (FNFILE ...).




reply via email to

[Prev in Thread] Current Thread [Next in Thread]