find-coding-system() in pces-e20.el

守岡 知彦 / MORIOKA Tomohiko tomo @ kanji.zinbun.kyoto-u.ac.jp
2000年 9月 27日 (水) 18:09:16 JST


>>>>> [apel-ja : No.00408] にて
>>>>> “白井”= Hideyuki SHIRAI (白井秀行)
      <shirai @ rdmg.mgcs.mei.co.jp> さま曰く:

白井> 早速本題なのですが、pces-e20.el などにある

白井> (defsubst-maybe find-coding-system (obj)
白井>   "Return OBJ if it is a coding-system."
白井>   (if (coding-system-p obj)
白井>       obj))

白井> について質問があります。

白井> Emacs 20.7 などの built-in function の coding-system-p() は

白井> (coding-system-p nil) => t

白井> と 'nil' を与えたときに 't' が帰ってくるのが仕様の様ですが、例え
白井> ば、(APEL の使用を想定していないパッケージで)XEmacs と Emacs で
白井> 共有の関数を書くために

白井> (if (fboundp 'find-coding-system)
白井>     (fset 'hoge-coding-system-p (symbol-function 'find-coding-system))
白井>   (fset 'hoge-coding-system-p (symbol-function 'coding-system-p)))

白井> と宣言しておくと、上記の defsubst-maybe で pces-e20.el で定義さ
白井> れている find-coding-system() を使うことになります。そうすると、

白井> (hoge-coding-system-p nil) => nil

白井> となってしまい、本来 nil を想定していないため、以降の処理が破綻
白井> してしまいます。

白井> ちなみに、XEmacs 21.2.53 では
白井> (find-coding-system nil) => #<coding_system binary>
白井> となります。

白井> 『仕様』『バグ』『使い方が悪い』というのが考えられるのですが、ど
白井> のようなものでしょうか?

APEL において、多分、nil の場合の挙動は未定義動作だったんだと思います。
そういう意味では『仕様』だったのかもしれません。

;; 実際、nil が coding-system かどうかというのは微妙なところだと思いま
;; す。coding-system を指定する場所の多くは nil を取りますが、通常の
;; coding-system を指定した場合と挙動が異なることがあります。

これを期に (find-coding-system nil) が binary を返すように変更する(明
確化する)ことには賛成します。つまり、これを『バグ』と見倣す訳です。
う。

ところで、APEL に頼らず自前で check & 切替えをする場合において、

白井> (if (fboundp 'find-coding-system)
白井>     (fset 'hoge-coding-system-p (symbol-function 'find-coding-system))
白井>   (fset 'hoge-coding-system-p (symbol-function 'coding-system-p)))

はやや慎重さが足りないと思います。多分、

(and (fboundp 'find-coding-system)
     (subrp (symbol-function 'find-coding-system)))

とか、あるいは

(and (featurep 'xemacs)
     (or (featurep 'file-coding)
	 (featurep 'mule)))

とかの方が良いかも知れません。そういう訳で、『使い方が悪い』という気も
します。

-- 
┯━…‥・懐かしい未来の記憶をふと思い出しかけた・‥…━━┯━━━┯━
││ ─ │  ─  /    ─   ┼─     ┬                ─   ─┼ ┬┴─
┼┼─┼|〓━─┼ 守岡 知彦 (MORIOKA Tomohiko) <tomo @ m17n.org> ─ ─┬
┻┻━┻━┷━━━━━━━━━━━━━━━━━━━━━━━━━━━━━




More information about the APEL-ja mailing list