From c45dd4d4826704471cf9ff2c7869065236dd174e Mon Sep 17 00:00:00 2001 From: Maciej Mensfeld Date: Fri, 30 Aug 2019 11:24:33 +0200 Subject: [PATCH] Make the dot-colon method reference frozen [Feature #16103] Close: https://github.com/ruby/ruby/pull/2267 --- insns.def | 2 +- test/ruby/test_method.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/insns.def b/insns.def index 3b82d4ec93..7fb7a577c8 100644 --- a/insns.def +++ b/insns.def @@ -699,7 +699,7 @@ checktype ret = (TYPE(val) == (int)type) ? Qtrue : Qfalse; } -/* get method reference. */ +/* get frozen method reference. */ DEFINE_INSN methodref (ID id) diff --git a/test/ruby/test_method.rb b/test/ruby/test_method.rb index 1d59ddb594..d85f9010c7 100644 --- a/test/ruby/test_method.rb +++ b/test/ruby/test_method.rb @@ -1141,6 +1141,19 @@ class TestMethod < Test::Unit::TestCase assert_nil(o.method(:foo)) end + def test_method_reference_freeze_state + m = 1.:succ + assert_predicate(m, :frozen?, "dot-symbol method reference should be frozen") + m = 1.method(:succ) + assert_not_predicate(m, :frozen?, "#method method reference should not be frozen") + o = Object.new + def o.foo; 42; end + m = o.:foo + assert_predicate(m, :frozen?, "dot-symbol method reference should be frozen") + m = o.method(:foo) + assert_not_predicate(m, :frozen?, "#method method reference should not be frozen") + end + def test_umethod_bind_call foo = Base.instance_method(:foo) assert_equal(:base, foo.bind_call(Base.new))