Mercurial > emacs
changeset 3777:d6f56b9586f7
(make-autoload): Use memq once instead eq twice.
(generate-file-autoloads): For non-autoloads, copy the defn textually
rather than printing it after reading.
author | Roland McGrath <roland@gnu.org> |
---|---|
date | Wed, 16 Jun 1993 23:06:58 +0000 |
parents | 301e2dca5fd7 |
children | 747d54c5e139 |
files | lisp/emacs-lisp/autoload.el |
diffstat | 1 files changed, 71 insertions(+), 40 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/emacs-lisp/autoload.el Wed Jun 16 22:37:24 1993 +0000 +++ b/lisp/emacs-lisp/autoload.el Wed Jun 16 23:06:58 1993 +0000 @@ -34,9 +34,9 @@ "Turn FORM, a defun or defmacro, into an autoload for source file FILE. Returns nil if FORM is not a defun or defmacro." (let ((car (car-safe form))) - (if (or (eq car 'defun) (eq car 'defmacro)) - (let (name doc macrop) - (setq macrop (eq car 'defmacro)) + (if (memq car '(defun defmacro)) + (let ((macrop (eq car 'defmacro)) + name doc) (setq form (cdr form)) (setq name (car form)) ;; Ignore the arguments. @@ -146,52 +146,83 @@ (setq done-any t) (if (eolp) ;; Read the next form and make an autoload. - (let* ((form (prog1 (read (current-buffer)) + (let* ((before (point)) + (form (prog1 (read (current-buffer)) (forward-line 1))) (autoload (make-autoload form load-name)) (doc-string-elt (get (car-safe form) 'doc-string-elt))) - (if autoload - (setq autoloads-done (cons (nth 1 form) - autoloads-done)) - (setq autoload form)) - (if (and doc-string-elt - (stringp (nth doc-string-elt autoload))) - ;; We need to hack the printing because the - ;; doc-string must be printed specially for - ;; make-docfile (sigh). - (let* ((p (nthcdr (1- doc-string-elt) - autoload)) - (elt (cdr p))) - (setcdr p nil) - (princ "\n(" outbuf) - (mapcar (function (lambda (elt) - (prin1 elt outbuf) - (princ " " outbuf))) - autoload) - (princ "\"\\\n" outbuf) - (princ (substring - (prin1-to-string (car elt)) 1) - outbuf) - (if (null (cdr elt)) - (princ ")" outbuf) - (princ " " outbuf) + (if (null autoload) + ;; We are copying a defvar or defconst form. + ;; Copy the text instead of printing the form, + ;; so as to preserve the original formatting. + (let ((inbuf (current-buffer)) + (after (point))) + (save-excursion + (set-buffer outbuf) + ;; Insert the form. + (insert-buffer-substring inbuf before after) + (and doc-string-elt + (stringp (nth doc-string-elt form)) + ;; The form has a docstring. + ;; Hack it for make-docfile. + (save-excursion + ;; Move point back to FORM's start. + (backward-char (- after before)) + (skip-chars-forward " \t\n") + (or (looking-at "(") + (error "expected (")) + (forward-char 1) ; Skip the paren. + ;; Skip sexps before the docstring. + (forward-sexp doc-string-elt) + (skip-chars-forward " \t") + (if (eolp) (delete-char 1)) + (skip-chars-forward " \t") + (or (looking-at "\"") + (error "expected \"")) + (forward-char 1) ; Skip the ". + (insert "\\\n"))) ;make-docfile happy. + (goto-char after))) + ;; Write the autoload for this defun or defmacro. + (setq autoloads-done (cons (nth 1 form) + autoloads-done)) + (if (and doc-string-elt + (stringp (nth doc-string-elt autoload))) + ;; We need to hack the printing because the + ;; doc-string must be printed specially for + ;; make-docfile (sigh). + (let* ((p (nthcdr (1- doc-string-elt) + autoload)) + (elt (cdr p))) + (setcdr p nil) + (princ "\n(" outbuf) + (mapcar (function (lambda (elt) + (prin1 elt outbuf) + (princ " " outbuf))) + autoload) + (princ "\"\\\n" outbuf) (princ (substring - (prin1-to-string (cdr elt)) - 1) - outbuf)) - (terpri outbuf)) - (print autoload outbuf))) + (prin1-to-string (car elt)) 1) + outbuf) + (if (null (cdr elt)) + (princ ")" outbuf) + (princ " " outbuf) + (princ (substring + (prin1-to-string (cdr elt)) + 1) + outbuf)) + (terpri outbuf)) + (print autoload outbuf)))) ;; Copy the rest of the line to the output. (let ((begin (point))) (forward-line 1) (princ (buffer-substring begin (point)) outbuf)))) - ((looking-at ";") - ;; Don't read the comment. - (forward-line 1)) - (t - (forward-sexp 1) - (forward-line 1))))))) + ((looking-at ";") + ;; Don't read the comment. + (forward-line 1)) + (t + (forward-sexp 1) + (forward-line 1))))))) (or visited ;; We created this buffer, so we should kill it. (kill-buffer (current-buffer)))