emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] /srv/bzr/emacs/trunk r101123: * lisp/emacs-lisp/autoload.e


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r101123: * lisp/emacs-lisp/autoload.el (make-autoload): Preload the macros's
Date: Wed, 18 Aug 2010 12:21:43 +0200
User-agent: Bazaar (2.0.3)

------------------------------------------------------------
revno: 101123
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Wed 2010-08-18 12:21:43 +0200
message:
  * 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.
modified:
  lisp/ChangeLog
  lisp/emacs-lisp/autoload.el
  src/ChangeLog
  src/eval.c
=== modified file 'lisp/ChangeLog'
--- a/lisp/ChangeLog    2010-08-18 07:45:14 +0000
+++ b/lisp/ChangeLog    2010-08-18 10:21:43 +0000
@@ -1,3 +1,8 @@
+2010-08-18  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/autoload.el (make-autoload): Preload the macros's
+       declarations that are useful before running the macro.
+
 2010-08-18  Katsumi Yamaoka  <address@hidden>
 
        * image.el (create-animated-image): Don't add heuristic mask to image
@@ -5,8 +10,8 @@
 
 2010-08-18  Jan Djärv  <address@hidden>
 
-       * 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  <address@hidden>
 

=== modified file 'lisp/emacs-lisp/autoload.el'
--- a/lisp/emacs-lisp/autoload.el       2010-04-18 21:45:44 +0000
+++ b/lisp/emacs-lisp/autoload.el       2010-08-18 10:21:43 +0000
@@ -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)

=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2010-08-18 09:27:53 +0000
+++ b/src/ChangeLog     2010-08-18 10:21:43 +0000
@@ -1,5 +1,7 @@
 2010-08-18  Stefan Monnier  <address@hidden>
 
+       * eval.c (Fdefmacro): Only obey one declaration.
+
        * casefiddle.c (casify_region): Setup gl_state.
 
 2010-08-18  Jan Djärv  <address@hidden>

=== modified file 'src/eval.c'
--- a/src/eval.c        2010-08-06 19:07:16 +0000
+++ b/src/eval.c        2010-08-18 10:21:43 +0000
@@ -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))
        {


reply via email to

[Prev in Thread] Current Thread [Next in Thread]