Mercurial > emacs
changeset 109837:b668431e0039
* lisp/emacs-lisp/autoload.el (make-autoload): Preload the macros's
declarations that are useful before running the macro.
* src/eval.c (Fdefmacro): Only obey one declaration.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Wed, 18 Aug 2010 12:21:43 +0200 |
parents | 9212e8bdf79b |
children | 64936c70841e |
files | lisp/ChangeLog lisp/emacs-lisp/autoload.el src/ChangeLog src/eval.c |
diffstat | 4 files changed, 47 insertions(+), 21 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Wed Aug 18 11:27:53 2010 +0200 +++ b/lisp/ChangeLog Wed Aug 18 12:21:43 2010 +0200 @@ -1,3 +1,8 @@ +2010-08-18 Stefan Monnier <monnier@iro.umontreal.ca> + + * emacs-lisp/autoload.el (make-autoload): Preload the macros's + declarations that are useful before running the macro. + 2010-08-18 Katsumi Yamaoka <yamaoka@jpl.org> * image.el (create-animated-image): Don't add heuristic mask to image @@ -5,8 +10,8 @@ 2010-08-18 Jan Djärv <jan.h.d@swipnet.se> - * term/ns-win.el (ns-get-pasteboard, ns-set-pasteboard): Use - QCLIPBOARD instead of QPRIMARY (Bug#6677). + * term/ns-win.el (ns-get-pasteboard, ns-set-pasteboard): + Use QCLIPBOARD instead of QPRIMARY (Bug#6677). 2010-08-17 Stefan Monnier <monnier@iro.umontreal.ca>
--- a/lisp/emacs-lisp/autoload.el Wed Aug 18 11:27:53 2010 +0200 +++ b/lisp/emacs-lisp/autoload.el Wed Aug 18 12:21:43 2010 +0200 @@ -109,29 +109,48 @@ (let* ((macrop (memq car '(defmacro defmacro*))) (name (nth 1 form)) (args (case car - ((defun defmacro defun* defmacro* - define-overloadable-function) (nth 2 form)) - ((define-skeleton) '(&optional str arg)) - ((define-generic-mode define-derived-mode - define-compilation-mode) nil) - (t))) + ((defun defmacro defun* defmacro* + define-overloadable-function) (nth 2 form)) + ((define-skeleton) '(&optional str arg)) + ((define-generic-mode define-derived-mode + define-compilation-mode) nil) + (t))) (body (nthcdr (get car 'doc-string-elt) form)) (doc (if (stringp (car body)) (pop body)))) (when (listp args) ;; Add the usage form at the end where describe-function-1 ;; can recover it. (setq doc (help-add-fundoc-usage doc args))) - ;; `define-generic-mode' quotes the name, so take care of that - (list 'autoload (if (listp name) name (list 'quote name)) file doc - (or (and (memq car '(define-skeleton define-derived-mode - define-generic-mode - easy-mmode-define-global-mode - define-global-minor-mode - define-globalized-minor-mode - easy-mmode-define-minor-mode - define-minor-mode)) t) - (eq (car-safe (car body)) 'interactive)) - (if macrop (list 'quote 'macro) nil)))) + (let ((exp + ;; `define-generic-mode' quotes the name, so take care of that + (list 'autoload (if (listp name) name (list 'quote name)) + file doc + (or (and (memq car '(define-skeleton define-derived-mode + define-generic-mode + easy-mmode-define-global-mode + define-global-minor-mode + define-globalized-minor-mode + easy-mmode-define-minor-mode + define-minor-mode)) t) + (eq (car-safe (car body)) 'interactive)) + (if macrop (list 'quote 'macro) nil)))) + (when macrop + ;; Special case to autoload some of the macro's declarations. + (let ((decls (nth (if (stringp (nth 3 form)) 4 3) form)) + (exps '())) + (when (eq (car decls) 'declare) + ;; FIXME: We'd like to reuse macro-declaration-function, + ;; but we can't since it doesn't return anything. + (dolist (decl decls) + (case (car-safe decl) + (indent + (push `(put ',name 'lisp-indent-function ',(cadr decl)) + exps)) + (doc-string + (push `(put ',name 'doc-string-elt ',(cadr decl)) exps)))) + (when exps + (setq exp `(progn ,exp ,@exps)))))) + exp))) ;; For defclass forms, use `eieio-defclass-autoload'. ((eq car 'defclass)
--- a/src/ChangeLog Wed Aug 18 11:27:53 2010 +0200 +++ b/src/ChangeLog Wed Aug 18 12:21:43 2010 +0200 @@ -1,5 +1,7 @@ 2010-08-18 Stefan Monnier <monnier@iro.umontreal.ca> + * eval.c (Fdefmacro): Only obey one declaration. + * casefiddle.c (casify_region): Setup gl_state. 2010-08-18 Jan Djärv <jan.h.d@swipnet.se>
--- a/src/eval.c Wed Aug 18 11:27:53 2010 +0200 +++ b/src/eval.c Wed Aug 18 12:21:43 2010 +0200 @@ -690,8 +690,8 @@ tail = XCDR (tail); } - while (CONSP (Fcar (tail)) - && EQ (Fcar (Fcar (tail)), Qdeclare)) + if (CONSP (Fcar (tail)) + && EQ (Fcar (Fcar (tail)), Qdeclare)) { if (!NILP (Vmacro_declaration_function)) {