From 0ff27c4604c76382767b929818d0c428aa74e9f1 Mon Sep 17 00:00:00 2001 From: ktsj Date: Sun, 2 Jul 2017 10:38:38 +0000 Subject: [PATCH] Symbol#== should be able to be redefined * vm.c (vm_init_redefined_flag): set redefinition flag for Symbol#==. The bug was introduced in r58895. * test/ruby/test_symbol.rb: test for above. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59250 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- test/ruby/test_symbol.rb | 12 ++++++++++++ vm.c | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/test/ruby/test_symbol.rb b/test/ruby/test_symbol.rb index e7f3d5a527..ba3256b820 100644 --- a/test/ruby/test_symbol.rb +++ b/test/ruby/test_symbol.rb @@ -514,4 +514,16 @@ class TestSymbol < Test::Unit::TestCase assert_not_equal sym.to_sym.hash, `#{ruby} -e 'puts #{sym.inspect}.to_sym.hash'`.to_i end + + def test_eq_can_be_redefined + assert_in_out_err([], <<-RUBY, ["foo"], []) + class Symbol + def ==(obj) + "foo" + end + end + + puts :a == :a + RUBY + end end diff --git a/vm.c b/vm.c index 6ff1d234a3..814f8b6780 100644 --- a/vm.c +++ b/vm.c @@ -1576,7 +1576,7 @@ vm_init_redefined_flag(void) OP(MULT, MULT), (C(Integer), C(Float)); OP(DIV, DIV), (C(Integer), C(Float)); OP(MOD, MOD), (C(Integer), C(Float)); - OP(Eq, EQ), (C(Integer), C(Float), C(String)); + OP(Eq, EQ), (C(Integer), C(Float), C(String), C(Symbol)); OP(Eqq, EQQ), (C(Integer), C(Float), C(Symbol), C(String), C(NilClass), C(TrueClass), C(FalseClass)); OP(LT, LT), (C(Integer), C(Float));