この関数はsymbolを定義しているファイルの名前をリターンする。typeがnil
なら、どのようなタイプの定義も受け入れる。typeがdefun
なら関数定義、defvar
は変数定義、defface
はフェイス定義だけを指定する。
値は通常は絶対ファイル名である。定義がどのファイルにも関係しなければnil
になることもある。symbolがオートロード関数を指定するなら、値が拡張子なしの相対ファイル名になることもある。
オプションの3番目の引数native-pが非nil
、かつネイティブコンパイルのサポートつき(Lispからネイティブコードへのコンパイルを参照)でビルドされたEmacsの場合には、この関数は.elcや.elといったファイルではなく、.elnファイルで定義されたsymbolを探そうと試みる。そのような.elnファイルが見つかり古くなっていなければ、この関数は絶対ファイル名をリターンする。それ以外の場合にはソースファイルかバイトコンパイル済みファイルのいずれかの名前をリターンする。
symbol-file
は変数load-history
の値にもとづく。
この変数の値はロードされたライブラリーファイルの名前を、それらが定義する関数と変数の名前、およびそれらがプロバイドまたはリクワイアするフィーチャに関連付けるalistである。
このalist内の各要素は、1つのロード済みライブラリー(スタートアップ時にプリロードされたライブラリーを含む)を記述する。要素はCARがライブラリーの絶対ファイル名(文字列)であるようなリストである。残りのリスト要素は以下の形式をもつ:
var
シンボルvarが変数として定義された。
(defun . fun)
関数funは定義済み。(defun . fun)
はfunを関数として定義されていることを表す。
(defface . face)
フェイスfaceが定義された。
(require . feature)
フィーチャfeatureがリクワイアされた。
(provide . feature)
フィーチャfeatureがプロバイドされた。
(cl-defmethod method specializers)
cl-defmethod
を使用してスペシャライザーspecializersとともにmethodという名前が定義された。
(define-type . type)
型typeが定義された。
load-history
の値には、CARがnil
であるような要素が1つ含まれるかもしれない。この要素はファイルをvisitしていないバッファーでeval-buffer
により作成された定義を記述する。
コマンドeval-region
はload-history
を更新しますが、要素を置き換えずに、visitされているファイルの要素にたいして定義されたシンボルを追加します。evalについてを参照してください。
load-history
に加えて、関数はそれぞれシンボルプロパティfunction-history
で自身のヒストリーを追跡します。この点において関数が特別扱いされる理由は、関数は2つの異なるファイルにおいて2段階で定義されることがよくある(典型的にはそのうちの一方がautoloadされる)ので、ファイルを正しいunloadを可能にするために、そのファイルが関数定義に何を行ったかをより正確に知る必要があるのです。
シンボルプロパティfunction-history
には(file1 def2 file2 def3 ...)
という形式のリストが保持されています。ここでfile1は定義を最後に変更したファイル、def2はfile1の前にfile2によってセットされた定義、...となります。論理的にはこのリストの最後はその関数を最初に定義したファイルですが、容量削減のために通常は最後の要素は省略されます。