[#84280] [Ruby trunk Bug#14181] hangs or deadlocks from waitpid, threads, and trapping SIGCHLD — nobu@...
Issue #14181 has been updated by nobu (Nobuyoshi Nakada).
3 messages
2017/12/15
[#84398] [Ruby trunk Bug#14220] WEBrick changes - failures on MSWIN, MinGW — Greg.mpls@...
Issue #14220 has been reported by MSP-Greg (Greg L).
3 messages
2017/12/22
[#84472] Re: [ruby-dev:50394] [Ruby trunk Bug#14240] warn four special variables: $; $, $/ $\ — Eric Wong <normalperson@...>
Shouldn't English posts be on ruby-core instead of ruby-dev?
3 messages
2017/12/26
[ruby-core:84540] [Ruby trunk Bug#14252] Refined Method Visibility Lost with Dynamic Dispatch and Reflection
From:
shugo@...
Date:
2017-12-28 02:28:02 UTC
List:
ruby-core #84540
Issue #14252 has been updated by shugo (Shugo Maeda).
sonnym (Sonny Michaud) wrote:
> This works perfectly well for the static `Protected.print` call, but has a number of surprises when trying to do anything more advanced. Namely:
>
> * Attempting to call the method with refined visibility raises a `NoMethodError`
> * The method appears in the `protected_methods` list of the original object
> * The method does not appear in the `public_methods` list of the original object
Reflection APIs do not honor refinements.
If you believe they should, please create a feature ticket for each API family.
Refinements were enabled in Kernel#send by #11476, so it may be reasonable to
enable refinements in Kernel#public_send.
----------------------------------------
Bug #14252: Refined Method Visibility Lost with Dynamic Dispatch and Reflection
https://bugs.ruby-lang.org/issues/14252#change-69068
* Author: sonnym (Sonny Michaud)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
* ruby -v: ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
* Backport: 2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN
----------------------------------------
Consider the following simple objects, one with a protected class method and another with a public class method calling on the protected method. This is accomplished using a refinement that marks the method as public on the singleton class of the original object.
~~~ ruby
class Protected
class << self
protected
def print
:protected
end
end
end
module Publicize
refine Protected.singleton_class do
public :print
end
end
class Public
using Publicize
def self.print
Protected.public_methods.include?(:print) # false
Protected.protected_methods.include?(:print) # true
Protected.print # works
Protected.public_send(:print) # fails
end
end
Public.print
~~~
This works perfectly well for the static `Protected.print` call, but has a number of surprises when trying to do anything more advanced. Namely:
* Attempting to call the method with refined visibility raises a `NoMethodError`
* The method appears in the `protected_methods` list of the original object
* The method does not appear in the `public_methods` list of the original object
As a user, I would expect all those things to be not the case, since, if I opened the class directly and changed the visibility of the method, those three items would no longer be true.
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>