# HG changeset patch # User Stefan Monnier # Date 1282126903 -7200 # Node ID b668431e0039a2caa0d15b59294df0917d45df4b # Parent 9212e8bdf79bbd99894ab7d0f2be0546367d3326 * 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. diff -r 9212e8bdf79b -r b668431e0039 lisp/ChangeLog --- 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 + + * emacs-lisp/autoload.el (make-autoload): Preload the macros's + declarations that are useful before running the macro. + 2010-08-18 Katsumi Yamaoka * image.el (create-animated-image): Don't add heuristic mask to image @@ -5,8 +10,8 @@ 2010-08-18 Jan Djärv - * 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 diff -r 9212e8bdf79b -r b668431e0039 lisp/emacs-lisp/autoload.el --- 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) diff -r 9212e8bdf79b -r b668431e0039 src/ChangeLog --- 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 + * eval.c (Fdefmacro): Only obey one declaration. + * casefiddle.c (casify_region): Setup gl_state. 2010-08-18 Jan Djärv diff -r 9212e8bdf79b -r b668431e0039 src/eval.c --- 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)) {