From abe12d8b96be3c12618811f22ca01788366f99f8 Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Thu, 29 Aug 2019 16:58:21 +0900 Subject: Freeze method reference operator object [Feature #16103] --- insns.def | 1 + test/ruby/test_method.rb | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/insns.def b/insns.def index 02330147c4..3b82d4ec93 100644 --- a/insns.def +++ b/insns.def @@ -707,6 +707,7 @@ methodref (VALUE ret) { ret = rb_obj_method(val, ID2SYM(id)); + RB_OBJ_FREEZE_RAW(ret); } /**********************************************************/ diff --git a/test/ruby/test_method.rb b/test/ruby/test_method.rb index ba425a4517..acaf43e46c 100644 --- a/test/ruby/test_method.rb +++ b/test/ruby/test_method.rb @@ -1120,16 +1120,20 @@ class TestMethod < Test::Unit::TestCase def test_method_reference_operator m = 1.:succ + assert_predicate(m, :frozen?) assert_equal(1.method(:succ), m) assert_equal(2, m.()) m = 1.:+ + assert_predicate(m, :frozen?) assert_equal(1.method(:+), m) assert_equal(42, m.(41)) m = 1.:-@ + assert_predicate(m, :frozen?) assert_equal(1.method(:-@), m) assert_equal(-1, m.()) o = Object.new def o.foo; 42; end + assert_predicate(o.:foo, :frozen?) m = o.method(:foo) assert_equal(m, o.:foo) def o.method(m); nil; end -- cgit v1.2.3