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

Re: some sb backends don't work



謎が解けたと思います.

>> On Fri, 06 Jun 2003 12:27:43 +0900
>> 「土」== tsuchiya@pine.kuee.kyoto-u.ac.jp (TSUCHIYA Masatoshi) said as follows:

土> ・何かマクロが悪さをしているか,

luna.el の内容を追い掛けてみると,internal accesor はマクロとして定義
されていることに気づきました.

    (defmacro ,(intern (format "%s-%s-internal"
                               class-name slot))
      (entity)
      (list 'aref entity
            ,(luna-class-slot-index entity-class
                                    (intern (symbol-name slot)))))

したがって,クラスのメンバ変数が変更になって,そのメンバの現れる順序が
変更になると,その internal accesor を呼び出している全ての *.elc は再
コンパイルが必要になるわけです.

nnshimbun.el では,

    (luna-define-method shimbun-mua-search-id ((mua shimbun-gnus-mua) id)
      (nnshimbun-search-id
       (shimbun-current-group-internal (shimbun-mua-shimbun-internal mua))
       id))

という使われ方をしている internal accesor が問題になりますし,おそらく 
elmo-shimbun.el でも同様の問題が発生しているのではないかと思います.

対策としては,

  ・elmo-shimbun.el や nnshimbun.el などの外部プログラムでは,internal
    accesor は使わない.
  ・必要な場合は,専用の読み出しメソッドを定義する.

ということになるかと思います.

-- 
土屋 雅稔 ( TSUCHIYA Masatoshi )