[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:7087] Lisp_Object の値の妥当性の判定方法について教えてください



藤井です。

From: Kyotaro HORIGUCHI <horiguti@xxxxxxxxxxx>
Subject: Re: [MD:7087] Lisp_Object の値の妥当性の判定方法について教えてください
Date: Thu, 08 Dec 2005 21:30:20 +0900 (JST)
> > Lisp_Object に格納されているアドレスが妥当な値であるかどうかを調べる方
> > 法について教えてください。
> 
>  どうやっているのかは知らないのですが, conservative stack scan っ
> てそれをやっているのではないでしょうか.

conservative GC って、「とりあえずそれらしいものはみんなマークしてしま
え」という GC ですよね。細かい所までは調べないのではないでしょうか?デー
タ種別ビットをチェックしている程度以上のことはしていないのではないかと
思います。
# 実際に emacs のコードを見ての発言ではないので、間違ってるかもしれませ
# んが。

>  あと, LispObject を何か int と非互換な型にしてうまく隠蔽した上で
> コンパイルすると変なものを代入しようとしたときにエラーになる..とか.
> (無理)

いつ発生するか分からないものを動的に捉えるより、静的なチェックに頼った
方がいいのかもしれないですね。以下の推測が正しければそれで見付かるはず
ですし。

From: "M.Fujii" <boochang@xxxxxxxxxxxx>
> Meadow 3 では Cygwin でビルドすると LispObject の下位 3 ビットがオブジェ
> クトの種別を判定するためのフラグとして用いられるので、LispObject に
> int 値をそのまま代入すると、かなりの確率で emacs は整数以外のオブジェク
> トだと誤認識します。今回の mark_object で落ちる件もそうだと思っています。

とりあえず静的チェックをかける方法を試してみようと考えていますが、他に
何か良い方法があればお願いします。

--
藤井 正行 / Masayuki FUJII