ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: merch-redmine@jeremyevans.net
To: ruby-core@ruby-lang.org
Subject: [ruby-core:95193] [Ruby master Bug#16100] Visibility modifiers don't call super correctly when overridden in alternative ways
Date: Wed, 02 Oct 2019 22:33:34 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-81868.20191002223333.4ae5464f173ddf6a@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-16100.20190814030525@ruby-lang.org

Issue #16100 has been updated by jeremyevans0 (Jeremy Evans).

Status changed from Open to Closed

prebsch (Patrick Rebsch) wrote:
> The source code makes it clear that the argument-less version is dependent upon a scope. So if I understand you correctly, the call to `super` in `Parent` is what would be calling this, and since that is in the scope of `Parent`, the originating call from `Child_1` doesn't work because the scope doesn't match?

Sorry for taking a long time to respond.  Yes, the `Child1.private` call sets the `private` scope visibility in the `Parent` scope, because that is the current scope when `super` is called in `Parent.private`.

I'm going to close this now, as I don't think this behavior is a bug.

----------------------------------------
Bug #16100: Visibility modifiers don't call super correctly when overridden in alternative ways
https://bugs.ruby-lang.org/issues/16100#change-81868

* Author: prebsch (Patrick Rebsch)
* Status: Closed
* Priority: Normal
* Assignee: 
* Target version: 
* ruby -v: ruby 2.7.0dev (2019-08-14) [x86_64-darwin18]
* Backport: 2.5: UNKNOWN, 2.6: UNKNOWN
----------------------------------------
It seems that the method visibility modifiers don't call `super` correctly when they are overridden in certain ways. I expected the following examples to all behave the same since they are all being defined on the singleton class, but only the first operates correctly presumably because it is explicitly defined on the singleton class. I've reproduced this behavior with `2.7.0`, `2.6.3`, and `2.5.5`.

``` ruby
def test_visibility(description, klass)
  puts "Case: #{ description }"
  puts "  #=> #{ klass.private_instance_methods.include?(:private_method) }"
  puts
end

test_visibility('explicit', Class.new {
  def self.private(*); super; end
  private; def private_method; end
})

test_visibility('opened singleton', Class.new {
  class << self
    def private(*); super; end
  end
  private; def private_method; end
})

test_visibility('include/prepend to singleton', Class.new {
  module M
    def private(*); super; end
  end
  singleton_class.prepend(M)
  private; def private_method; end
})
```

```
Case: explicit
  #=> true

Case: opened singleton
  #=> false

Case: include/prepend to singleton
  #=> false
```




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

      parent reply	other threads:[~2019-10-02 22:33 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-16100.20190814030525@ruby-lang.org>
2019-08-14  3:05 ` [ruby-core:94335] [Ruby master Bug#16100] Visibility modifiers don't call super correctly when overridden in alternative ways pjrebsch
2019-08-14  3:50 ` [ruby-core:94336] " merch-redmine
2019-08-17  1:54 ` [ruby-core:94396] " pjrebsch
2019-10-02 22:33 ` merch-redmine [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-81868.20191002223333.4ae5464f173ddf6a@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).