]> git.eshelyaron.com Git - emacs.git/commitdiff
(check-declare-scan): Expand .c files relative to src/ directory.
authorGlenn Morris <rgm@gnu.org>
Thu, 22 Nov 2007 04:19:48 +0000 (04:19 +0000)
committerGlenn Morris <rgm@gnu.org>
Thu, 22 Nov 2007 04:19:48 +0000 (04:19 +0000)
(check-declare-verify): Handle .c files (without arg checking).

lisp/ChangeLog
lisp/emacs-lisp/check-declare.el

index 2280c706bd5a74e31cf72b6e80d786947df010a7..08cfd22f581b1f0c8b7ab5790e0d88b86809416d 100644 (file)
@@ -1,3 +1,18 @@
+2007-11-22  Glenn Morris  <rgm@gnu.org>
+
+       * dos-fns.el (int86):
+       * term/mac-win.el (mac-font-panel-mode): Fix declarations.
+
+       * calendar/cal-menu.el (cal-menu-holidays-menu): Fix holiday-list call.
+
+       * calendar/holidays.el (holiday-list): Add autoload cookie.
+
+       * emacs-lisp/check-declare.el (check-declare-scan): Expand .c
+       files relative to src/ directory.
+       (check-declare-verify): Handle .c files (without arg checking).
+
+       * emacs-lisp/byte-run.el (declare-function): Doc fix.
+
 2007-11-22  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * replace.el (occur-mode-map): Add a major mode menu with entries
index 76719f1b876f16b8a5d1d1cfb2e69ee415b2825f..5da8691beed8695bcc93a3011b842421cdc9b3ce 100644 (file)
@@ -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 @@ ARGLIST may be absent.  This claims that FNFILE defines FN, with ARGLIST."
         (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,59 +88,64 @@ FNFILE with the specified ARGLIST.  Returns nil if all claims are
 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)
-          (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\\|\
+    (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 (if cflag
+                               "^[ \t]*\\(DEFUN\\)[ \t]*([ \t]*\"%s\""
+                             "^[ \t]*(\\(def\\(?:un\\|subst\\|\
 ine-derived-mode\\|ine-minor-mode\\|alias[ \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)
-                    sig (cond ((string-equal (match-string 1)
-                                             "define-derived-mode")
-                               '(0 . 0))
-                              ((string-equal (match-string 1)
-                                             "define-minor-mode")
-                               '(0 . 1))
-                              ;; Can't easily check alias arguments.
-                              ((string-equal (match-string 1)
-                                             "defalias")
-                               t)
-                              (t
-                               (if (looking-at "\\((\\|nil\\)")
-                                   (byte-compile-arglist-signature
-                                    (read (current-buffer))))))
-                    ;; 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))
-                      ;; 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"))
-                    "function not found")
-                "file not found"))
-        (when type
-          (setq errlist (cons (list (car e) (cadr e) type) errlist))))
-      (message "%s%s" m (if errlist "problems found" "OK"))
-      errlist)))
+\[ \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))
+                            ((string-equal (match-string 1)
+                                           "define-minor-mode")
+                             '(0 . 1))
+                            ;; Can't easily check alias arguments.
+                            ((string-equal (match-string 1)
+                                           "defalias")
+                             t)
+                            (t
+                             (if (looking-at "\\((\\|nil\\)")
+                                 (byte-compile-arglist-signature
+                                  (read (current-buffer))))))
+                  ;; 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))
+                    ;; 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)
+                                (eq sig t))
+                      (unless (equal (byte-compile-arglist-signature arglist)
+                                     (cdr sig))
+                        "arglist mismatch"))
+                  "function not found")
+              "file not found"))
+      (when type
+        (setq errlist (cons (list (car e) (cadr e) type) errlist))))
+    (message "%s%s" m (if errlist "problems found" "OK"))
+    errlist))
 
 (defun check-declare-sort (alist)
   "Sort a list with elements FILE (FNFILE ...).