aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-11 22:28:33 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2014-03-11 22:28:33 +0000
commit4101a5690e3e8cc4940052ab28c0466e200b256d (patch)
tree76f5353f33cbca8a37d236d82645b6cc58d23f3e
parentc1f1b931716a9b0e5d8ebd1a2ccbefd42d171b9c (diff)
downloadruby-4101a5690e3e8cc4940052ab28c0466e200b256d.tar.gz
insns.def (opt_regexpmatch2): respect redefined match op
* insns.def (opt_regexpmatch2): respect redefined match op Thanks to Sam Rawlins for the fix. * test/ruby/test_string.rb: test based on Tsuyoshi Sawada's report [Bug #9581] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45318 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--insns.def2
-rw-r--r--test/ruby/test_string.rb13
3 files changed, 21 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 486232c14f..4f7a4368e9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Wed Mar 12 07:26:05 2014 Eric Wong <e@80x24.org>
+
+ * insns.def (opt_regexpmatch2): respect redefined match op
+ Thanks to Sam Rawlins for the fix.
+ * test/ruby/test_string.rb: test based on Tsuyoshi Sawada's report
+ [Bug #9581]
+
Tue Mar 11 22:31:25 2014 Kazuki Tsujimoto <kazuki@callcc.net>
* ext/.document: add objspace/objspace_dump.c to document file.
diff --git a/insns.def b/insns.def
index 7942804b6c..7ef4c4c1fe 100644
--- a/insns.def
+++ b/insns.def
@@ -2154,7 +2154,7 @@ opt_regexpmatch2
(VALUE obj2, VALUE obj1)
(VALUE val)
{
- if (RB_TYPE_P(obj2, T_STRING) &&
+ if (CLASS_OF(obj2) == rb_cString &&
BASIC_OP_UNREDEFINED_P(BOP_MATCH, STRING_REDEFINED_OP_FLAG)) {
val = rb_reg_match(obj1, obj2);
}
diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb
index 7ce1c0666c..6cf45fd537 100644
--- a/test/ruby/test_string.rb
+++ b/test/ruby/test_string.rb
@@ -2219,6 +2219,19 @@ class TestString < Test::Unit::TestCase
assert_equal("foo", "" =~ //)
RUBY
end
+
+ class Bug9581 < String
+ def =~ re; :foo end
+ end
+
+ def test_regexp_match_subclass
+ s = Bug9581.new("abc")
+ r = /abc/
+ assert_equal(:foo, s =~ r)
+ assert_equal(:foo, s.send(:=~, r))
+ assert_equal(:foo, s.send(:=~, /abc/))
+ assert_equal(:foo, s =~ /abc/, "should not use optimized instruction")
+ end
end
class TestString2 < TestString