* lisp/emacs-lisp/macroexp.el (macroexpand-all-1): Tolerate errors during
compiler-macro expansion.
This commit is contained in:
parent
57a7d50707
commit
53aacf21b4
3 changed files with 15 additions and 5 deletions
|
@ -1,5 +1,8 @@
|
|||
2012-06-05 Stefan Monnier <monnier@iro.umontreal.ca>
|
||||
|
||||
* emacs-lisp/macroexp.el (macroexpand-all-1): Tolerate errors during
|
||||
compiler-macro expansion.
|
||||
|
||||
Add native compiler-macro support.
|
||||
* emacs-lisp/macroexp.el (macroexpand-all-1):
|
||||
Support compiler-macros directly. Properly follow aliases and apply
|
||||
|
|
|
@ -289,7 +289,7 @@ This also does some trivial optimizations to make the form prettier.
|
|||
;;;;;; cl-return cl-block cl-etypecase cl-typecase cl-ecase cl-case
|
||||
;;;;;; cl-load-time-value cl-eval-when cl-destructuring-bind cl-function
|
||||
;;;;;; cl-defmacro cl-defun cl-gentemp cl-gensym) "cl-macs" "cl-macs.el"
|
||||
;;;;;; "35e128b3ab7780c4f9c25da5a0adea7a")
|
||||
;;;;;; "f3973150add70d26cadb8530147dfc99")
|
||||
;;; Generated autoloads from cl-macs.el
|
||||
|
||||
(autoload 'cl-gensym "cl-macs" "\
|
||||
|
|
|
@ -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))))))
|
||||
|
|
Loading…
Add table
Reference in a new issue