aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-02 10:38:38 +0000
committerktsj <ktsj@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-07-02 10:38:38 +0000
commit1bfd387a795aba1d65ede9aeace35c99e0812c14 (patch)
tree619642af89d89705218358801cc14f3a9cf8d511
parentbe8744fd08906bee30ca9b8320e1b62bfb3fb7c5 (diff)
downloadruby-1bfd387a795aba1d65ede9aeace35c99e0812c14.tar.gz
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
-rw-r--r--test/ruby/test_symbol.rb12
-rw-r--r--vm.c2
2 files changed, 13 insertions, 1 deletions
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));