[ruby-core:99431] [Ruby master Bug#16931] `defined?` against a protected method call on an inherited instance returns wrong `nil`
From:
nagachika00@...
Date:
2020-08-01 08:34:21 UTC
List:
ruby-core #99431
Issue #16931 has been updated by nagachika (Tomoyuki Chikanaga).
Backport changed from 2.5: REQUIRED, 2.6: REQUIRED, 2.7: REQUIRED to 2.5: REQUIRED, 2.6: REQUIRED, 2.7: DONE
ruby_2_7 23d130a9ddcaf766d6ce309f8518b434a2537fc1 merged revision(s) d05f04d27dd86c67e4a8dfff4392f806cf577bdf.
----------------------------------------
Bug #16931: `defined?` against a protected method call on an inherited instance returns wrong `nil`
https://bugs.ruby-lang.org/issues/16931#change-86883
* Author: nobu (Nobuyoshi Nakada)
* Status: Closed
* Priority: Normal
* ruby -v: 2.8.0dev (2020-06-02T08:21:03Z master 56ca006784)
* Backport: 2.5: REQUIRED, 2.6: REQUIRED, 2.7: DONE
----------------------------------------
The following code shows `:callable` first, but `nil` next, since 1.9.
If the method is callable, `defined?` expression has to return truthy value.
``` ruby
class A
def foo
:callable
end
protected :foo
def t(x)
x.foo
end
def q(x)
defined?(x.foo)
end
end
class B<A
end
a = A.new
b = B.new
p a.t(b) #=> :callable
p a.q(b) #=> nil
```
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>