summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/macroexp.el
diff options
context:
space:
mode:
Diffstat (limited to 'lisp/emacs-lisp/macroexp.el')
-rw-r--r--lisp/emacs-lisp/macroexp.el15
1 files changed, 11 insertions, 4 deletions
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index 953b4b7eab5..b021abe71ea 100644
--- a/lisp/emacs-lisp/macroexp.el
+++ b/lisp/emacs-lisp/macroexp.el
@@ -187,7 +187,8 @@ Assumes the caller has bound `macroexpand-all-environment'."
(fboundp func)
(or (not (eq (car-safe (symbol-function func))
'autoload))
- (load (nth 1 (symbol-function func)))))
+ (ignore-errors
+ (load (nth 1 (symbol-function func))))))
;; Follow the sequence of aliases.
(setq func (symbol-function func)))
(if (null handler)
@@ -195,15 +196,21 @@ Assumes the caller has bound `macroexpand-all-environment'."
;; setq/setq-default this works alright because the variable names
;; are symbols).
(macroexpand-all-forms form 1)
- (let ((newform (apply handler form (cdr form))))
+ (let ((newform (condition-case err
+ (apply handler form (cdr form))
+ (error (message "Compiler-macro error: %S" err)
+ form))))
(if (eq form newform)
;; The compiler macro did not find anything to do.
(if (equal form (setq newform (macroexpand-all-forms form 1)))
form
;; Maybe after processing the args, some new opportunities
;; appeared, so let's try the compiler macro again.
- (if (eq newform
- (setq form (apply handler newform (cdr newform))))
+ (setq form (condition-case err
+ (apply handler newform (cdr newform))
+ (error (message "Compiler-macro error: %S" err)
+ newform)))
+ (if (eq newform form)
newform
(macroexpand-all-1 newform)))
(macroexpand-all-1 newform))))))