FLIM 1.14.5 bug-fix

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2003年 6月 27日 (金) 00:02:50 JST


とりあえず apel-ja で.

Katsumi Yamaoka <yamaoka @ jpl.org> writes:
> すみません、本当は apel-en でするべき話になってしまいましたが、
> 仕切り直す機会をつかめずにいます。^^;;

APEL で再定義されたという情報が describe-function では表示されない
のは load-history が更新されないからだという話は既出ですよね?

そして, 以下のような file-level ではない定義を byte-compile すると

    (cond
     (SOME-CONDITION
      (defalias 'kar 'car)
      (defmacro kaar (list) `(car (car ,list)))
      (defsubst kadr (list)  (car (cdr  list)))
      (defun    kddr (list)  (cdr (cdr  list)))
      (defvar   kar "KAR")))

defalias (内部的に load-history を更新する) と
defvar (byte-compiler が load-history を更新する byte-code を生成する)
以外の defmacro/defsubst/defun は fset に展開されるのが原因だという話
も前回 XEmacs 方面から苦情が出た時に説明したと思います.

APEL では回避策を入れているのですが, 部分的に漏れがありそうだというの
と, load-history の構造が変化すると問題が出るという話もしたと思います.


それでは, byte-compiler を以下のように修正して load-history の更新を
defalias に押し付けたらどうだろうか, という話はしていましたっけ? 

(defun byte-compile-defun (form)
  ;; This is not used for file-level defuns with doc strings.
  (byte-compile-defalias
   (list 'defalias (list 'quote (nth 1 form))
	 (byte-compile-byte-code-maker
	  (byte-compile-lambda (cons 'lambda (cdr (cdr form)))))))
  (byte-compile-discard)
  (byte-compile-constant (nth 1 form)))

(defun byte-compile-defmacro (form)
  ;; This is not used for file-level defmacros with doc strings.
  (byte-compile-body-do-effect
   (list (list 'defalias (list 'quote (nth 1 form))
	       (let ((code (byte-compile-byte-code-maker
			    (byte-compile-lambda
			     (cons 'lambda (cdr (cdr form)))))))
		 (if (eq (car-safe code) 'make-byte-code)
		     (list 'cons ''macro code)
		   (list 'quote (cons 'macro (eval code))))))
	 (list 'quote (nth 1 form)))))

提案をしたことがあるのか, この方法には何か問題があるのかどうか,
今晩はもう時間切れで自分では確認できません.

-- 
Shuhei KOBAYASHI



More information about the APEL-ja mailing list