diff options
author | Glenn Morris <rgm@gnu.org> | 2007-11-22 06:20:53 +0000 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2007-11-22 06:20:53 +0000 |
commit | ad95f32a98471c83bbb612925e3f3cbc4d30d08d (patch) | |
tree | 5bbafe509db5a1067a3c2f01dc60fd63bf0e8074 /lisp/emacs-lisp | |
parent | dc5786a52f0bac08baeef6d2ac4503b6c96e89e0 (diff) | |
download | emacs-ad95f32a98471c83bbb612925e3f3cbc4d30d08d.tar.gz emacs-ad95f32a98471c83bbb612925e3f3cbc4d30d08d.tar.bz2 emacs-ad95f32a98471c83bbb612925e3f3cbc4d30d08d.zip |
(check-declare-verify): Implement arglist checking for C files.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/check-declare.el | 21 |
1 files changed, 14 insertions, 7 deletions
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el index 5da8691beed..c1cdb3a2e80 100644 --- a/lisp/emacs-lisp/check-declare.el +++ b/lisp/emacs-lisp/check-declare.el @@ -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 @@ 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) + re fn sig siglist arglist type errlist minargs maxargs) (message "%s" m) (or cflag (file-exists-p fnfile) @@ -110,7 +108,18 @@ ine-derived-mode\\|ine-minor-mode\\|alias[ \t]+'\\)\\)\ ;; (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 @@ ine-derived-mode\\|ine-minor-mode\\|alias[ \t]+'\\)\\)\ (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)) |