[Date Prev][Date Next][Thread Prev][][Date Index][Thread Index]

(defsubst f () (f))



表題のような式は、少なくとも Emacs 21.1 以上では許されているよう
です。w3m-util.el の w3m-list-buffers が該当します。XEmacs と
19.30 より以前の Emacs でもたぶん問題ありません。

では Emacs 20.7 や Mule 2.3@19.34 などではどうかと言うと、これら
も emacs-w3m を普通に make する場合には害がありません。なぜかと
言うと、最初に w3m-util.el が byte-compile されて

  (defalias 'f (lambda nil (funcall 'f)))

のような感じの byte-code が生成され、以後これが他のモジュールで
使われるときに inline されるからです。byte-compile するときに無
限ループを生じないのは不思議ではあるのですけれど。

ですが、わざわざこれを言いに出てきたのは、Emacs 20.7 などで以下
のようなことを行なうと、確実に無限ループを起こすからです。

(progn
  (load "w3m-util.el" nil nil t)
  (byte-compile (lambda nil (w3m-list-buffers))))

これは emacs-w3m を make するときに、最初に w3m-util.el を byte-
compile しない場合に相当します。えー、とりあえずそれだけです。

;; 何言ってんだか ^^;;

2001-10-20  Gerd Moellmann  <gerd@gnu.org>

	* (Version 21.1 released.)

2000-11-14  Gerd Moellmann  <gerd@gnu.org>

	* emacs-lisp/byte-opt.el (byte-compile-unfold-lambda):
	Don't recursively optimize body because that can lead to infinite
	recursion; see comment there.

1996-05-25  Karl Heuer  <kwzh@gnu.ai.mit.edu>

	* Version 19.31 released.

1995-12-07  Richard Stallman  <rms@whiz-bang.gnu.ai.mit.edu>

	* byte-opt.el (byte-compile-unfold-lambda): Recursively optimize body.

-- 
Katsumi Yamaoka <yamaoka@jpl.org>