Project

General

Profile

Actions

Bug #9452

closed

Refining methods that should be private

Added by rbjl (Jan Lelis) about 10 years ago. Updated about 10 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.2.0dev (2014-01-25 trunk 44707) [x86_64-linux]
[ruby-core:60111]

Description

Are refinements also meant to add private methods? This is what I tried:

module R
  refine Object do
    def m
      puts "Success!"
    end

    private(:m)
  end
end

using R

m # success
42.m # success (= not private)

However, I can get near the desired functionality by defining a private method first:

class Object
  private
  def m
  end
end

module R
  refine Object do
    def m
      puts "Success!"
    end
  end
end

using R
m # success
42.m # no success (= it is private)

It calls the right code. But requires global core ext.

Updated by shugo (Shugo Maeda) about 10 years ago

  • Assignee set to shugo (Shugo Maeda)

Updated by shugo (Shugo Maeda) about 10 years ago

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

Applied in changeset r44931.


  • vm_insnhelper.c (vm_call_method): should check ci->me->flag of
    a refining method in case the method is private.
    [ruby-core:60111] [Bug #9452]

  • vm_method.c (make_method_entry_refined): set me->flag of a refined
    method entry to NOEX_PUBLIC in case the original method is private
    and it is refined as a public method. The original flag is stored
    in me->def->body.orig_me, so it's OK to make a refined method
    entry public. [ruby-core:60111] [Bug #9452]

  • test/ruby/test_refinement.rb: related tests.

Updated by nagachika (Tomoyuki Chikanaga) about 10 years ago

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

Updated by nagachika (Tomoyuki Chikanaga) about 10 years ago

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

r44931 was backported to ruby_2_0_0 at r44967.

Updated by naruse (Yui NARUSE) about 10 years ago

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

r45107.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0