byte-compile-find-cl-functions: Wrong type argument: stringp, nil

Katsumi Yamaoka yamaoka @ jpl.org
2002年 7月 30日 (火) 20:14:18 JST


>>>>> In [mule-ja : No.08374]
>>>>>	OHASHI Akira <bg66 @ koka-in.org> wrote:

山岡> ですが、それはそれとして load-history に (nil) が含まれる直接の
山岡> 原因は調べましょう。

犯人は eval-buffer だったのですね。

大橋さん> 原因の方は私にはさっぱり判らないのですが、
大橋さん> Emacs Lisp Reference Manual に下記のように書かれています。

大橋さん> The value of `load-history' may have one element whose CAR is
大橋さん> `nil'.  This element describes definitions made with `eval-buffer'
大橋さん> on a buffer that is not visiting a file.

eval-buffer の doc-string にも

(eval-buffer &optional BUFFER PRINTFLAG FILENAME UNIBYTE DO-ALLOW-PRINT)

If the optional third argument FILENAME is non-nil,
it specifies the file name to use for `load-history'.

と書いてありました。引数は Emacs の版によっていろいろで、古いも
のは FILENAME の指定ができません。

;; Emacs 19.34
(eval-current-buffer &optional PRINTFLAG)

;; XEmacs 21.4.9
(eval-buffer &optional BUFFER PRINTFLAG)

しかし共通しているのは、どれも load-history の値を変化させること
で、FILENAME を指定しない/できない場合は (nil) という要素が先頭
に追加されます。

>>>>> In [mule-ja : No.08372]
>>>>>	OHASHI Akira <bg66 @ koka-in.org> wrote:

大橋さん> byte-compile された mime-view を load したら (nil) なリスト
大橋さん> が load-history に追加されました。

まさに mime-view を load したときに eval-buffer が評価されていま
した。簡単には次のような方法で再現することができます。

  以下の式を foo.el に書き込む。

  (with-temp-buffer
    (insert "(defun foo nil)")
    (eval-buffer))
  (byte-compile 'foo)

  % emacs-21.3.50 -batch -q -no-site-file -f batch-byte-compile ./foo.el
  Wrote ./foo.elc

  % emacs-21.3.50 -batch -q -no-site-file -l ./foo.elc
  Wrong type argument: stringp, nil

`byte-compile' ではなくて `defadvice' が使われた場合でも、同様の
エラーが起きるでしょう。

;; 勇気がある人は、プログラムの中で eval-buffer を使った直後に
;; (pop load-history)
;; などと書くと良いかもしれません。:-p

大橋さん> これの内容が今でも有効ならば先日私がポストした修正は必須だと
大橋さん> 思うので、昨日未明にすでにメールを送って確認中です。
大橋さん> ;; どこに送ったら良いのか判らなかったので直接 rms に送っちゃ
大橋さん> ;; いました

どうもありがとうございました。ちゃんと直してくれると良いですね。

今では大橋さんのパッチ [mule-ja: 08370] がまったく正しいと思いま
すが、一方でこれははるかな昔から (X)Emacs の eval-buffer が引き
ずっているバグ、または無意味な仕様ではないかとも思えてきます。
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>




More information about the APEL-ja mailing list