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