[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#47025: 28.0.50; [feature/native-comp] pcase is preloaded, but not el
From: |
Stefan Monnier |
Subject: |
bug#47025: 28.0.50; [feature/native-comp] pcase is preloaded, but not eln-compiled |
Date: |
Wed, 10 Mar 2021 09:02:35 -0500 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux) |
>> (load "emacs-lisp/macroexp")
>> (if (byte-code-function-p (symbol-function 'macroexpand-all))
>> nil
>> ;; Since loaddefs is not yet loaded, macroexp's uses of pcase will simply
>> ;; fail until pcase is explicitly loaded. This also means that we have to
>> ;; disable eager macro-expansion while loading pcase.
>> (let ((macroexp--pending-eager-loads '(skip))) (load "emacs-lisp/pcase"))
>> ;; Re-load macroexp so as to eagerly macro-expand its uses of pcase.
>> (let ((max-lisp-eval-depth (* 2 max-lisp-eval-depth)))
>> (load "emacs-lisp/macroexp")))
>> ====
>>
>> > need to preload pcase?
>>
>> I fear I don't have an answer as ATM I don't uderstand why it should be
>> different compared to master.
>
> Stefan, any ideas why this happens on the native-comp branch but not
> on master?
It's probably the `byte-code-function-p` which tries to distinguish the
case where macroexp has not yet been compiled, but on the native branch,
I suspect that (byte-code-function-p (symbol-function 'macroexpand-all))
will return nil when macroexp has been compiled because it's now
a `subrp`.
So we could replace
(byte-code-function-p (symbol-function 'macroexpand-all))
with
(or (byte-code-function-p (symbol-function 'macroexpand-all))
(subrp (symbol-function 'macroexpand-all)))
or with
(not (consp (symbol-function 'macroexpand-all)))
-- Stefan