XEmacs and APEL
Katsumi Yamaoka
yamaoka @ jpl.org
2002年 8月 1日 (木) 14:11:06 JST
気合いが抜けてしまっていたので返事が遅くなりました。^^;;
eval-and-compile が無い古い Emacsen でも、require を利用して次の
ように作ることができるということなんですね。
(defmacro eval-and-compile (&rest forms)
"Like `progn', but evaluates the body at compile time and at load time."
(` (require
(prog1
(or (car features) (provide 'feature-for-dummy))
(,@ forms)))))
ただ dunnet.el で以下のような使い方をされている例があるので、こ
れをそのまま poe-18.el に入れるのはやめておきますが。
(if nil
(eval-and-compile (setq byte-compile-warnings nil)))
>>>>> In [apel-ja : No.00729]
>>>>> Katsumi Yamaoka <yamaoka @ jpl.org> wrote:
小林さん>
;;; Hack for "old" byte-compiler; we can't use `eval-and-compile' here.
(require
(progn
(defvar def*-maybe-enable-compile-time-hack nil
"doc string.")
(provide 'pym-compile)))
山岡> むむ、何だろうこれは。^^;;
山岡> ちょっと自分なりに研究させて下さいませ。
`(defvar VAR VALUE)' というフォームに対する compiler の動作は、
byte-compile-warnings に free-vars が含まれているときだけ VAR を
byte-compile-bound-variables に登録するだけで、実際に値を持った
変数が bind されるわけではないから、VAR の値によって macro の展
開結果が変わるような場合には未定義エラーになる。
Toplevel の require は compile 中でも評価される。
山岡> 懸案の 21.3.50 でだけしか試していませんでしたが、21.2 では...
小林さん>
| emacs --batch --funcall batch-byte-compile pym.el
[...]
| !! Symbol's value as variable is void ((def*-maybe-enable-compile-time-hack))
ではなぜ 21.3.50 では未定義エラーにならないのか?
ぼくがすでに /usr/local/share/emacs/21.3.50/site-lisp/emu/ に、
改造した pym.elc をインストールしてしまってあって、それが static
→ product → pym の経路で load されてしまうから。
普通に make する場合には load-path の先頭に "." が追加されるので、
エラーは起こりません。
;; はあ、ここまで辿り着くのにえらい回り道をしてしまった。^^;;
ところで、小林さんは pym.el が単独で byte-compile できることを要
求しているのでしょうか? 初めて Emacs をインストールした人が、ま
ずは APEL から、と、APEL がまだインストールされていない環境で、
いきなり pym.el を単独で byte-compile すると失敗するはずですが。
たぶん subdirs.el が無い環境でも同じですよね。
--
Katsumi Yamaoka <yamaoka @ jpl.org>
More information about the APEL-ja
mailing list