Edebug and luna.el

TSUCHIYA Masatoshi tsuchiya @ pine.kuee.kyoto-u.ac.jp
2002年 9月 25日 (水) 02:27:35 JST


出直してきました.

>> On Tue, 24 Sep 2002 20:28:09 +0900
>> 「土」== tsuchiya @ pine.kuee.kyoto-u.ac.jp (TSUCHIYA Masatoshi) said as follows:

土> 原因は,luna-apply-generic() で,実際に適用するべき関数定義を探す
土> 時に参照される cache にありました.一旦,method が呼び出されると,
土> 関数定義が cache されるのですが,luna-define-method() の評価時に正
土> しく cache がクリアされていませんでした.

非常に泥臭い方法ですが,古い関数定義を参照している cache を全て clear 
するようにしてみました.

flim-1_14 枝の場合.

-------------- next part --------------
--- luna.el	24 Sep 2002 07:04:28 -0000	1.2.6.6
+++ luna.el	24 Sep 2002 17:16:37 -0000
@@ -164,8 +164,13 @@
 	   (sym (luna-class-find-or-make-member
 		 (luna-find-class ',class) ',name))
 	   (cache (get ',name 'luna-method-cache)))
-       (if cache
-	   (unintern (symbol-name ',class) cache))
+       (and cache
+	    (fboundp sym)
+	    (mapatoms
+	     (lambda (s)
+	       (if (memq (symbol-function sym) (symbol-value s))
+		   (unintern s cache)))
+	     cache))
        (fset sym func)
        (put sym 'luna-method-qualifier ,method-qualifier))))
 
-------------- next part --------------

clime-1_14 枝の場合.

-------------- next part --------------
--- luna.el	23 Apr 2002 06:37:53 -0000	1.2.6.2.2.4
+++ luna.el	24 Sep 2002 17:15:55 -0000
@@ -181,7 +181,17 @@
 				 (cdr args)))
 		      (,@ definition))))
 	     (sym (luna-class-find-or-make-member
-		   (luna-find-class '(, class)) '(, name))))
+		   (luna-find-class '(, class)) '(, name)))
+	     (cache (get '(, name) 'luna-method-cache)))
+	 (and cache
+	      (fboundp sym)
+	      (let ((new (make-vector (length cache) 0)))
+		(mapatoms
+		 (lambda (s)
+		   (or (memq (symbol-function sym) (symbol-value s))
+		       (set (intern (symbol-name s) new) (symbol-value s))))
+		 cache)
+		(put '(, name) 'luna-method-cache new)))
 	 (fset sym func)
 	 (put sym 'luna-method-qualifier (, method-qualifier))))))
 
-------------- next part --------------

どうでしょうか? > 特に上野さん

-- 
土屋 雅稔  ( TSUCHIYA Masatoshi )


More information about the Emacs-mime-ja mailing list