defvar-maybe

Katsumi Yamaoka yamaoka @ jpl.org
2001年 9月 12日 (水) 17:20:32 JST


semi-gnus-ja で話題になったことなのですが、T-gnus では存在しない
かもしれない変数や関数を、compile するときに lpath.el というもの
を使って bind します。

例えば Mule 2.3 には language-info-alist という変数が無いので、
gnus-ems.el というファイルで

(defvar-maybe language-info-alist nil
  "Alist of language environment definitions.")

ということを行なっているのですが、この変数は compile する前に
lpath.el で bind されてしまうので、gnus-ems.elc にはこの変数定義
が生成されません。以下のような内容のファイルで再現実験ができます。

;; test.el
(require 'pym)
(eval-when-compile
  (set 'foo 'bar))
(defvar-maybe foo 'bar)
(message "%s" foo)

% mule -batch -q -no-site-file -f batch-byte-compile ./test.el
% mule -batch -q -no-site-file -l ./test.elc
 => Symbol's value as variable is void: foo

(defvar-maybe foo 'bar)

に相当するコードを生成してしまうと、もし foo が存在したときに
doc-string を書き換えてしまうのでマズい、というような議論があっ
たような気がするので、実は解決策は無いのかもしれません。

とりあえず報告だけ。
-- 
Katsumi Yamaoka <yamaoka @ jpl.org>
;; 今日はメールがほとんど届かないので、お返事をいただいても反応
;; できないかもしれません。悪しからず。




More information about the APEL-ja mailing list