require

Shuhei KOBAYASHI shuhei @ aqua.ocn.ne.jp
2000年 10月 6日 (金) 23:18:26 JST


>>>>> In <yosu7l7mdv5e.fsf @ jpl.org>,
>>>>> Katsumi Yamaoka <yamaoka @ jpl.org> wrote:
> でも、なぜ
> 
> `vm' is an interactive compiled Lisp function
>   -- loaded from "vm-startup"
> (vm &optional FOLDER READ-ONLY)
> 
> の "vm-startup" のように、出どころが表示されないのでしょう?

See [tm-en:1991]

... ではほとんどの人が確認できないと思うので説明します.

-------------- next part --------------
    (defun foo () ...)

のような一番外側の defun は

    (defalias 'foo #[...])

のように defalias に byte-compile されるのですが,

    (or (fboundp 'foo) (defun foo () ...))

のような内側にある defun は

    (byte-code "...")

の中で (fset 'foo ...) に相当する byte-code に byte-compile されます.

defalias は load history を update しますが, fset は update しません.

describe-function 等は「出どころ」を load history で調べています.
-------------- next part --------------

APEL の def*-maybe は load history の update をするようになっているの
ですが, 何らかの理由で def*-maybe を使うことができない場合には自前で
update してやらなければいけません.

ではなぜ APEL の require の定義が load history を update していないか
というと... すでに記憶がないのですが, 多分単に忘れていただけでしょう.
(^^;

2000-10-06  Shuhei KOBAYASHI  <shuhei @ aqua.ocn.ne.jp>

	* poe.el (require): Update `current-load-list'.

-------------- next part --------------
--- poe.el.orig	Sun Oct  1 21:50:00 2000
+++ poe.el	Fri Oct  6 22:16:06 2000
@@ -75,7 +75,6 @@
    (or (fboundp 'si:require)
        (progn
 	 (fset 'si:require (symbol-function 'require))
-	 (put 'require 'defun-maybe t)
 	 (defun require (feature &optional filename noerror)
 	   "\
 If feature FEATURE is not loaded, load it from FILENAME.
@@ -90,7 +89,10 @@
 	       (condition-case nil
 		   (si:require feature filename)
 		 (file-error))
-	     (si:require feature filename)))))))
+	     (si:require feature filename)))
+	 ;; for `load-history'.
+	 (setq current-load-list (cons 'require current-load-list))
+	 (put 'require 'defun-maybe t)))))
 
 ;; Emacs 19.29 and later: (plist-get PLIST PROP)
 ;; (defun-maybe plist-get (plist prop)
-------------- next part --------------

require が load history に登録されると, (unload-feature 'poe) により
require が消えてしまうのですが, この変更以前から他にも致命的なものが
消えてしまうようになっているみたいなので気にしないことにします(^^;

-- 
Shuhei KOBAYASHI


More information about the APEL-ja mailing list