Project

General

Profile

Actions

Bug #9486

closed

Multiple Kernel#local_variables entries with block local parameters

Added by ryantm (Ryan Mulligan) about 10 years ago. Updated over 9 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-linux]
[ruby-core:60501]

Description

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?

Updated by nobu (Nobuyoshi Nakada) about 10 years ago

  • Category set to core
  • Status changed from Open to Assigned
  • Assignee set to nobu (Nobuyoshi Nakada)
  • Target version set to 2.2.0

It's a known bug, but I've forgotten to issue a ticket.
Thank you.

Updated by nobu (Nobuyoshi Nakada) about 10 years ago

  • Backport changed from 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN to 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: REQUIRED

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

Applied in changeset r45847.


missed ref. [ruby-core:60501] [Bug #9486]

Updated by nagachika (Tomoyuki Chikanaga) almost 10 years ago

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?

Updated by nobu (Nobuyoshi Nakada) almost 10 years ago

r45850 is not a subject to be backported.

Updated by nagachika (Tomoyuki Chikanaga) almost 10 years ago

  • Backport changed from 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: REQUIRED to 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: DONE

r45845, r45846 and r45847 were backported into ruby_2_1 at r46596.

Updated by usa (Usaku NAKAMURA) over 9 years ago

  • Backport changed from 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: DONE to 1.9.3: REQUIRED, 2.0.0: DONE, 2.1: DONE

backported r45845 and r45847 into ruby_2_0_0 at r46731.

skipping r45846 because it's not the test for this change.
And, in fact, what is tested here is another problem that exists in the current state 2.0.0.
It is not known at this time how and when it has been fixed in trunk.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0