2006-06-30 (Fri) [長年日記]
_ Binding.of_caller
Binding.of_callerを実装しようと思い立った。
SCOPEのflagsをprevにしてRBasicのflagsを使うようにしたところまでは よかった*1のだが、ruby_dyna_varsどう しようと思ってPUSH_FRAME時にFRAMEに突っ込んでしまったり、vis_mode とかもあるじゃん、とか思ったらもう面倒になって挫折。
とりあえず、パッチを放置しとこう。
以下のコードくらいなら期待通り動く。
def Object.foo eval("p [self, x, y, z]", Binding.of_caller) end x = 1 1.times do y = 2 1.times do z = 3 Object.foo end end
*1 本当は予期せぬ所でRBasicのflagsを書き換えてしまった せいでGCで落ちて大変だったんだけど。