[prev in list] [next in list] [prev in thread] [next in thread]
List: ruby-core
Subject: [ruby-core:62242] [ruby-trunk - Bug #9622] Extra method arguments are magically swallowed after firs
From: usa () garbagecollect ! jp
Date: 2014-04-30 7:10:18
Message-ID: redmine.journal-46393.20140430071018.80004fe0650ca7e4 () ruby-lang ! org
[Download RAW message or body]
Issue #9622 has been updated by Usaku NAKAMURA.
Backport changed from 1.9.3: REQUIRED, 2.0.0: REQUIRED, 2.1: REQUIRED to 1.9.3: \
REQUIRED, 2.0.0: DONE, 2.1: REQUIRED
backported into ruby_2_0_0 at r45748.
----------------------------------------
Bug #9622: Extra method arguments are magically swallowed after first successful \
call, possible method cache bug https://bugs.ruby-lang.org/issues/9622#change-46393
* Author: Jean Boussier
* Status: Closed
* Priority: Normal
* Assignee:
* Category: core
* Target version:
* ruby -v: 2.0.0
* Backport: 1.9.3: REQUIRED, 2.0.0: DONE, 2.1: REQUIRED
----------------------------------------
The following code behaviour totally change since ruby 2.0.0
~~~
class Foo
def bar(*args)
attribute(:bar, *args)
end
def attribute(name)
puts name
end
end
foo = Foo.new
begin
foo.bar(100)
rescue => e
puts e.class.name
end
foo.bar # legit
5.times do
foo.bar(100)
end
puts 'No errors??? WTF???'
~~~
ruby < 2.0 output:
~~~
ArgumentError
bar
(eval):3:in `attribute': wrong number of arguments (2 for 1) (ArgumentError)
from (eval):3:in `bar'
from foo.rb:28
from foo.rb:27:in `times'
from foo.rb:27
~~~
Which is expected.
But ruby >= 2.0 output
~~~
ArgumentError
bar
bar
bar
bar
bar
bar
No errors??? WTF???
~~~
In short, after the first successful call, the extra arguments are just ignored. I \
have no idea of what is going on here, but it look like a broken optimization.
All rubies >= 2.0 are affected. 1.8.7 and 1.9.3 are fine.
Regards.
A gist describing the issue: https://gist.github.com/byroot/9495455
--
https://bugs.ruby-lang.org/
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic