aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath1993-06-16 23:06:58 +0000
committerRoland McGrath1993-06-16 23:06:58 +0000
commit327ab40d47792886b103b6462d01a97aba3cb886 (patch)
tree8bf0bfa9cc70e27bb3f78814b81075cf253ae103
parent83ea6fc2b14bc419a9b4c68bc3011d7739c42244 (diff)
downloademacs-327ab40d47792886b103b6462d01a97aba3cb886.tar.gz
emacs-327ab40d47792886b103b6462d01a97aba3cb886.zip
(make-autoload): Use memq once instead eq twice.
(generate-file-autoloads): For non-autoloads, copy the defn textually rather than printing it after reading.
-rw-r--r--lisp/emacs-lisp/autoload.el111
1 files changed, 71 insertions, 40 deletions
diff --git a/lisp/emacs-lisp/autoload.el b/lisp/emacs-lisp/autoload.el
index 011931c7808..f927c025632 100644
--- a/lisp/emacs-lisp/autoload.el
+++ b/lisp/emacs-lisp/autoload.el
@@ -34,9 +34,9 @@
34 "Turn FORM, a defun or defmacro, into an autoload for source file FILE. 34 "Turn FORM, a defun or defmacro, into an autoload for source file FILE.
35Returns nil if FORM is not a defun or defmacro." 35Returns nil if FORM is not a defun or defmacro."
36 (let ((car (car-safe form))) 36 (let ((car (car-safe form)))
37 (if (or (eq car 'defun) (eq car 'defmacro)) 37 (if (memq car '(defun defmacro))
38 (let (name doc macrop) 38 (let ((macrop (eq car 'defmacro))
39 (setq macrop (eq car 'defmacro)) 39 name doc)
40 (setq form (cdr form)) 40 (setq form (cdr form))
41 (setq name (car form)) 41 (setq name (car form))
42 ;; Ignore the arguments. 42 ;; Ignore the arguments.
@@ -146,52 +146,83 @@ are used."
146 (setq done-any t) 146 (setq done-any t)
147 (if (eolp) 147 (if (eolp)
148 ;; Read the next form and make an autoload. 148 ;; Read the next form and make an autoload.
149 (let* ((form (prog1 (read (current-buffer)) 149 (let* ((before (point))
150 (form (prog1 (read (current-buffer))
150 (forward-line 1))) 151 (forward-line 1)))
151 (autoload (make-autoload form load-name)) 152 (autoload (make-autoload form load-name))
152 (doc-string-elt (get (car-safe form) 153 (doc-string-elt (get (car-safe form)
153 'doc-string-elt))) 154 'doc-string-elt)))
154 (if autoload 155 (if (null autoload)
155 (setq autoloads-done (cons (nth 1 form) 156 ;; We are copying a defvar or defconst form.
156 autoloads-done)) 157 ;; Copy the text instead of printing the form,
157 (setq autoload form)) 158 ;; so as to preserve the original formatting.
158 (if (and doc-string-elt 159 (let ((inbuf (current-buffer))
159 (stringp (nth doc-string-elt autoload))) 160 (after (point)))
160 ;; We need to hack the printing because the 161 (save-excursion
161 ;; doc-string must be printed specially for 162 (set-buffer outbuf)
162 ;; make-docfile (sigh). 163 ;; Insert the form.
163 (let* ((p (nthcdr (1- doc-string-elt) 164 (insert-buffer-substring inbuf before after)
164 autoload)) 165 (and doc-string-elt
165 (elt (cdr p))) 166 (stringp (nth doc-string-elt form))
166 (setcdr p nil) 167 ;; The form has a docstring.
167 (princ "\n(" outbuf) 168 ;; Hack it for make-docfile.
168 (mapcar (function (lambda (elt) 169 (save-excursion
169 (prin1 elt outbuf) 170 ;; Move point back to FORM's start.
170 (princ " " outbuf))) 171 (backward-char (- after before))
171 autoload) 172 (skip-chars-forward " \t\n")
172 (princ "\"\\\n" outbuf) 173 (or (looking-at "(")
173 (princ (substring 174 (error "expected ("))
174 (prin1-to-string (car elt)) 1) 175 (forward-char 1) ; Skip the paren.
175 outbuf) 176 ;; Skip sexps before the docstring.
176 (if (null (cdr elt)) 177 (forward-sexp doc-string-elt)
177 (princ ")" outbuf) 178 (skip-chars-forward " \t")
178 (princ " " outbuf) 179 (if (eolp) (delete-char 1))
180 (skip-chars-forward " \t")
181 (or (looking-at "\"")
182 (error "expected \""))
183 (forward-char 1) ; Skip the ".
184 (insert "\\\n"))) ;make-docfile happy.
185 (goto-char after)))
186 ;; Write the autoload for this defun or defmacro.
187 (setq autoloads-done (cons (nth 1 form)
188 autoloads-done))
189 (if (and doc-string-elt
190 (stringp (nth doc-string-elt autoload)))
191 ;; We need to hack the printing because the
192 ;; doc-string must be printed specially for
193 ;; make-docfile (sigh).
194 (let* ((p (nthcdr (1- doc-string-elt)
195 autoload))
196 (elt (cdr p)))
197 (setcdr p nil)
198 (princ "\n(" outbuf)
199 (mapcar (function (lambda (elt)
200 (prin1 elt outbuf)
201 (princ " " outbuf)))
202 autoload)
203 (princ "\"\\\n" outbuf)
179 (princ (substring 204 (princ (substring
180 (prin1-to-string (cdr elt)) 205 (prin1-to-string (car elt)) 1)
181 1) 206 outbuf)
182 outbuf)) 207 (if (null (cdr elt))
183 (terpri outbuf)) 208 (princ ")" outbuf)
184 (print autoload outbuf))) 209 (princ " " outbuf)
210 (princ (substring
211 (prin1-to-string (cdr elt))
212 1)
213 outbuf))
214 (terpri outbuf))
215 (print autoload outbuf))))
185 ;; Copy the rest of the line to the output. 216 ;; Copy the rest of the line to the output.
186 (let ((begin (point))) 217 (let ((begin (point)))
187 (forward-line 1) 218 (forward-line 1)
188 (princ (buffer-substring begin (point)) outbuf)))) 219 (princ (buffer-substring begin (point)) outbuf))))
189 ((looking-at ";") 220 ((looking-at ";")
190 ;; Don't read the comment. 221 ;; Don't read the comment.
191 (forward-line 1)) 222 (forward-line 1))
192 (t 223 (t
193 (forward-sexp 1) 224 (forward-sexp 1)
194 (forward-line 1))))))) 225 (forward-line 1)))))))
195 (or visited 226 (or visited
196 ;; We created this buffer, so we should kill it. 227 ;; We created this buffer, so we should kill it.
197 (kill-buffer (current-buffer))) 228 (kill-buffer (current-buffer)))