なかだです。

At Sun, 22 Sep 2002 21:08:59 +0900,
Yukihiro Matsumoto wrote:
> コミットしてください。で、call_trace_funcの中で
> ruby_in_compileを見た方が良いですか?

入れました。

ところでruby_in_compileで思い出しましたが、1.7では組み込みクラ
スの生成にもallocateが呼ばれるため、パーサの最中にもスレッドが
スイッチする可能性があり、パーサの再入性が問題になる可能性があ
ります。

class << String
  alias_method(:__allocate__, :allocate)
  def allocate(*args)
    s = __allocate__(*args)
    c = @allocate_hook
    @allocate_hook = nil
    c.call if c
    s
  end
  def allocate_hook(&block)
    @allocate_hook = block
  end
end

x = 0
s = "p x"
String.allocate_hook do
  p __FILE__
  # eval("x = 1")	# コメントアウトを外すと
end
eval(s)			# syntax errorが起きる

ruby_in_compileをロックに使おうかと思ったんですが、その前に組み
込みMutexが必要になりそうなので後回しにしました。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦