* lisp/emacs-lisp/cl-lib.el (cl--defsubst-expand): Autoload inliner.
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 15 Jun 2012 03:18:14 +0000 (23:18 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Fri, 15 Jun 2012 03:18:14 +0000 (23:18 -0400)
* lisp/emacs-lisp/macroexp.el (macroexp--compiler-macro): New function.
(macroexp--expand-all): Use it.

Fixes: debbugs:11649

lisp/ChangeLog
lisp/emacs-lisp/cl-lib.el
lisp/emacs-lisp/macroexp.el

index b1798cb..a56eb67 100644 (file)
@@ -1,5 +1,11 @@
 2012-06-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * emacs-lisp/cl-lib.el (cl--defsubst-expand): Autoload inliner
+       (bug#11649).
+
+       * emacs-lisp/macroexp.el (macroexp--compiler-macro): New function.
+       (macroexp--expand-all): Use it.
+
        * emacs-lisp/cl-macs.el (cl--transform-function-property): Remove.
        (cl-define-setf-expander, cl-deftype, cl-define-compiler-macro):
        Use `cl-function' instead.
index 223067c..bf7f623 100644 (file)
@@ -641,6 +641,9 @@ If ALIST is non-nil, the new pairs are prepended to it."
 
 ;;;###autoload
 (progn
+  ;; Make sure functions defined with cl-defsubst can be inlined even in
+  ;; packages which do not require CL.
+  (autoload 'cl--defsubst-expand "cl-macs")
   ;; Autoload, so autoload.el and font-lock can use it even when CL
   ;; is not loaded.
   (put 'cl-defun    'doc-string-elt 3)
index 8effb3c..85e9b07 100644 (file)
@@ -94,6 +94,12 @@ each clause."
        (macroexp--all-forms clause skip)
       clause)))
 
+(defun macroexp--compiler-macro (handler form)
+  (condition-case err
+      (apply handler form (cdr form))
+    (error (message "Compiler-macro error for %S: %S" (car form) err)
+           form))))
+
 (defun macroexp--expand-all (form)
   "Expand all macros in FORM.
 This is an internal version of `macroexpand-all'.
@@ -198,20 +204,14 @@ Assumes the caller has bound `macroexpand-all-environment'."
              (ignore-errors
                (load (nth 1 (symbol-function func))
                      'noerror 'nomsg)))
-           (let ((newform (condition-case err
-                              (apply handler form (cdr form))
-                            (error (message "Compiler-macro error: %S" err)
-                                   form))))
+           (let ((newform (macroexp--compiler-macro handler form)))
              (if (eq form newform)
                  ;; The compiler macro did not find anything to do.
                  (if (equal form (setq newform (macroexp--all-forms form 1)))
                      form
                    ;; Maybe after processing the args, some new opportunities
                    ;; appeared, so let's try the compiler macro again.
-                   (setq form (condition-case err
-                                  (apply handler newform (cdr newform))
-                                (error (message "Compiler-macro error: %S" err)
-                                       newform)))
+                   (setq form (macroexp--compiler-macro handler newform))
                    (if (eq newform form)
                        newform
                      (macroexp--expand-all newform)))