Issue #9486 has been updated by Tomoyuki Chikanaga.


Hello,

These changesets introduce incompatibilities.
I think r45845 and r45856 could be backported (these fix the result [:a, :a, :a] -> [:a, :a] in the ticket's description). r45850 seems like a spec change rather than a bugfix (hide shadowed variable of outer scope).
Any comments?


----------------------------------------
Bug #9486: Multiple Kernel#local_variables entries with block local parameters
https://bugs.ruby-lang.org/issues/9486#change-47300

* Author: Ryan Mulligan
* Status: Closed
* Priority: Normal
* Assignee: Nobuyoshi Nakada
* Category: core
* Target version: current: 2.2.0
* ruby -v: ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
* Backport: 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: REQUIRED
----------------------------------------
Better formatting here: http://stackoverflow.com/questions/21423863/multiple-kernellocal-variables-entries-with-block-local-parameters/21427424?noredirect=1#21427424

I am using this version of Ruby on Arch Linux. I also tried the first code snippet in ruby 1.9, which had the same results.

    ruby -v
    ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
    uname -a
    Linux ryantm0j132 3.12.7-2-ARCH #1 SMP PREEMPT Sun Jan 12 13:09:09 CET 2014 x86_64 GNU/Linux

These three snippets below are separate programs.

When I use block local variables that shadow a variable the local_variables array contains 3 entries:

    a = 1
    puts local_variables.inspect #=> [:a]
    proc { |;a|
    puts local_variables.inspect #=> [:a,:a,:a]
    }.call

If I don't shadow, anything it contains 1 entry:

    puts local_variables.inspect #=> []
    proc { |;b|
    puts local_variables.inspect #=> [:b]
    }.call
    
Another example of the block local variable not shadowing anything:

    a = 1
    puts local_variables.inspect #=> [:a]
    proc { |;b|
    puts local_variables.inspect #=> [:b,:a]
    }.call
    
Is there some reason for these extra entries in the first case? Is it a bug in ruby?



-- 
https://bugs.ruby-lang.org/