From: Ryan Davis Date: 2009-09-18T15:40:16+09:00 Subject: Re: Kernel.eval("local_variables",binding) bug in Ruby 1.9 Please send this to ruby-core@ On Sep 17, 2009, at 16:30 , Howard Yeh wrote: > Hi, > > My ruby runtime is "ruby 1.9.1p0 (2009-01-30 revision 21907) [i686- > linux]" > > Kernel eval works for these cases: > > puts "2 times" > 1.times do > a = 1 > p Kernel.eval("local_variables",binding) > end > > puts "while" > while true > a = 1 > p Kernel.eval("local_variables",binding) > break > end > > puts "lambda" > lambda { > a=1 > p Kernel.eval("local_variables",binding) > }.call > > > But I get a segfault with > > for i in 1..100 > a = 1 > p Kernel.eval("local_variables",binding) > break > end > > But you can try, > > for i in 1..100 > a = 1 > r = Kernel.eval("local_variables",binding) > p r.length # => 4, but should be 3 > p r[1..-1] # => [:i,:a,:r] > p r.first.class # => Symbol > p r.first.object_id # => 4087 > p r.first # segfault > break > end > > And we see that there's an extraneous variable reported by evaluating > local_variables. The first element of the result seems an invalid > pointer? > > for i in 1..100 > p Kernel.eval("local_variables") # this works > break > end > >