Allow the expansion of :after (:or foo bar) to be byte-compiled

This commit is contained in:
John Wiegley 2017-12-06 06:01:49 +00:00
parent b2b91af2e5
commit 2cd3ebd5d5
2 changed files with 61 additions and 76 deletions

View file

@ -643,14 +643,11 @@ no more than once."
(let ((loaded (cl-gensym "use-package--loaded")) (let ((loaded (cl-gensym "use-package--loaded"))
(result (cl-gensym "use-package--result")) (result (cl-gensym "use-package--result"))
(next (cl-gensym "use-package--next"))) (next (cl-gensym "use-package--next")))
`((defconst ,loaded nil) `((lexical-let (,loaded ,result)
(defconst ,result nil) ,@(funcall f `((if ,loaded
(defconst ,next #'(lambda () ,result
(if ,loaded (setq ,loaded t)
,result (setq ,result ,arg))))))))
(setq ,loaded t)
(setq ,result ,arg))))
,@(funcall f `((funcall ,next))))))
(defsubst use-package-normalize-value (label arg) (defsubst use-package-normalize-value (label arg)
"Normalize the Lisp value given by ARG. "Normalize the Lisp value given by ARG.

View file

@ -1176,119 +1176,107 @@
(ert-deftest use-package-test/:after-5 () (ert-deftest use-package-test/:after-5 ()
(match-expansion (match-expansion
(use-package foo :after (:any bar quux)) (use-package foo :after (:any bar quux))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil
(if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'bar (eval-after-load 'bar
'(funcall ,_)) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))
(eval-after-load 'quux (eval-after-load 'quux
'(funcall ,_))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))))
(ert-deftest use-package-test/:after-6 () (ert-deftest use-package-test/:after-6 ()
(match-expansion (match-expansion
(use-package foo :after (:all (:any bar quux) bow)) (use-package foo :after (:all (:any bar quux) bow))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil
(if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'bow (eval-after-load 'bow
'(progn '(progn
(eval-after-load 'bar (eval-after-load 'bar
'(funcall ,_)) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))
(eval-after-load 'quux (eval-after-load 'quux
'(funcall ,_))))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))))
))
(ert-deftest use-package-test/:after-7 () (ert-deftest use-package-test/:after-7 ()
(match-expansion (match-expansion
(use-package foo :after (:any (:all bar quux) bow)) (use-package foo :after (:any (:all bar quux) bow))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil
(if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'quux (eval-after-load 'quux
'(eval-after-load 'bar '(eval-after-load 'bar
'(funcall ,_))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))
(eval-after-load 'bow (eval-after-load 'bow
'(funcall ,_))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))
))
(ert-deftest use-package-test/:after-8 () (ert-deftest use-package-test/:after-8 ()
(match-expansion (match-expansion
(use-package foo :after (:all (:any bar quux) (:any bow baz))) (use-package foo :after (:all (:any bar quux) (:any bow baz)))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil
(if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'bow (eval-after-load 'bow
'(progn '(progn
(eval-after-load 'bar (eval-after-load 'bar
'(funcall ,_)) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))
(eval-after-load 'quux (eval-after-load 'quux
'(funcall ,_)))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))))
(eval-after-load 'baz (eval-after-load 'baz
'(progn '(progn
(eval-after-load 'bar (eval-after-load 'bar
'(funcall ,_)) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))
(eval-after-load 'quux (eval-after-load 'quux
'(funcall ,_))))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))))
))
(ert-deftest use-package-test/:after-9 () (ert-deftest use-package-test/:after-9 ()
(match-expansion (match-expansion
(use-package foo :after (:any (:all bar quux) (:all bow baz))) (use-package foo :after (:any (:all bar quux) (:all bow baz)))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil
(if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'quux (eval-after-load 'quux
'(eval-after-load 'bar '(eval-after-load 'bar
'(funcall ,_))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))
(eval-after-load 'baz (eval-after-load 'baz
'(eval-after-load 'bow '(eval-after-load 'bow
'(funcall ,_)))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))))
))
(ert-deftest use-package-test/:after-10 () (ert-deftest use-package-test/:after-10 ()
(match-expansion (match-expansion
(use-package foo :after (:any (:all bar quux) (:any bow baz))) (use-package foo :after (:any (:all bar quux) (:any bow baz)))
`(progn `(lexical-let (,_ ,_)
(defconst ,_ nil)
(defconst ,_ nil)
(defconst ,_
#'(lambda nil (if ,_ ,_
(setq ,_ t)
(setq ,_
(require 'foo nil nil)))))
(eval-after-load 'quux (eval-after-load 'quux
'(eval-after-load 'bar '(eval-after-load 'bar
'(funcall ,_))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))
(eval-after-load 'bow (eval-after-load 'bow
'(funcall ,_)) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil))))
(eval-after-load 'baz (eval-after-load 'baz
'(funcall ,_))))) '(if ,_ ,_
(setq ,_ t)
(setq ,_ (require 'foo nil nil)))))
))
(ert-deftest use-package-test/:demand-1 () (ert-deftest use-package-test/:demand-1 ()
(match-expansion (match-expansion