summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--insns.def2
-rw-r--r--test/ruby/test_method.rb13
2 files changed, 14 insertions, 1 deletions
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))