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