From: SASADA Koichi Date: 2008-12-25T00:20:48+09:00 Subject: [ruby-dev:37585] Re: [Bug:trunk] eval with binding  ささだです. U.Nakamura wrote:: >> # その1 >> x = 0 >> eval("p x", TOPLEVEL_BINDING) >> # 1.8 => 0 >> # trunk => NameError Index: vm.c =================================================================== --- vm.c (リビジョン 20969) +++ vm.c (作業コピー) @@ -1240,7 +1240,10 @@ rb_iseq_eval(VALUE iseqval) vm_set_top_stack(th, iseqval); if (!rb_const_defined(rb_cObject, rb_intern("TOPLEVEL_BINDING"))) { - rb_define_global_const("TOPLEVEL_BINDING", rb_binding_new()); + VALUE bind; + rb_vm_set_finish_env(th); /* push dummy frame */ + rb_define_global_const("TOPLEVEL_BINDING", bind); + vm_pop_frame(th); /* pop dummy frame */ } val = vm_exec(th); tmp = iseqval; /* prohibit tail call optimization */  これで直るのではないかと思います.ご確認いただけませんか. >> >> # その2 >> BEGIN{$b = binding} >> x = 0 >> eval("p x", $b) >> # 1.8 => NameError >> # trunk => 0  こちらは,前から書いていたとおり,仕様としていただけると.「こういう場 合に嫌だ」とか,そういう話ってありますかね. -- // SASADA Koichi at atdot dot net