https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112013-09-26T16:20:04ZRuby Issue Tracking SystemRuby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419882013-09-26T16:20:04Zsorah (Sorah Fukumori)her@sorah.jp
<ul></ul><p>hm...</p>
<p>ruby -e'class Regexp; def =~(o); true; end; end; p /a/ =~ "b"' #=> nil</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419892013-09-26T16:39:53ZAnonymous
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>0</i> to <i>100</i></li></ul><p>This issue was solved with changeset r43050.<br>
Goro, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<ul>
<li>
<p>insns.def (opt_regexpmatch1): check Regexp#=~ is not defined before<br>
calling rb_reg_match()</p>
</li>
<li>
<p>test/ruby/test_regexp.rb: add test</p>
</li>
<li>
<p>vm.c (ruby_vm_redefined_flag): change type to short[]</p>
</li>
<li>
<p>vm.c (vm_redefinition_check_flag): return REGEXP_REDEFINED_OP_FLAG if<br>
klass == rb_cRegexp</p>
</li>
<li>
<p>vm.c (vm_init_redefined_flag): setup BOP flag for Regexp#=~</p>
</li>
<li>
<p>vm_insnhelper.h: add REGEXP_REDEFINED_OP_FLAG</p>
</li>
</ul>
<p><a href="/issues/8953">[ruby-core:57385]</a> [Bug <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal (Closed)" href="https://redmine.ruby-lang.org/issues/8953">#8953</a>]</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419902013-09-26T16:46:08Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Status</strong> changed from <i>Closed</i> to <i>Open</i></li><li><strong>% Done</strong> changed from <i>100</i> to <i>50</i></li></ul><p>The problem still exists for opt_regexpmatch1, right?</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419912013-09-26T16:46:32Zsorah (Sorah Fukumori)her@sorah.jp
<ul></ul><blockquote>
<p>The problem still exists for opt_regexpmatch1, right?</p>
</blockquote>
<p>s/opt_regexpmatch1/opt_regexpmatch2/</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419922013-09-26T16:48:36ZAnonymous
<ul></ul><p>Ah you are right. Thanks for pointing that out sorah.</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419932013-09-26T16:52:26Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> set to <i>sorah (Sorah Fukumori)</i></li></ul><p>Testing my patch on my machine for regexpmatch2</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419942013-09-26T16:58:31Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li><li><strong>% Done</strong> changed from <i>50</i> to <i>100</i></li></ul><p>This issue was solved with changeset r43052.<br>
Goro, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<ul>
<li>
<p>insns.def (opt_regexpmatch2): Check String#=~ hasn't overridden<br>
before calling rb_reg_match().</p>
</li>
<li>
<p>test/ruby/test_string.rb: Test for above.</p>
</li>
<li>
<p>vm.c (vm_init_redefined_flag): Add BOP flag for String#=~</p>
</li>
</ul>
<p><a href="/issues/8953">[ruby-core:57385]</a> [Bug <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal (Closed)" href="https://redmine.ruby-lang.org/issues/8953">#8953</a>]</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=419952013-09-26T16:59:38Zsorah (Sorah Fukumori)her@sorah.jp
<ul><li><strong>Backport</strong> changed from <i>1.9.3: UNKNOWN, 2.0.0: UNKNOWN</i> to <i>1.9.3: UNKNOWN, 2.0.0: REQUIRED</i></li></ul><p>Please backport r43050, 43052</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=420072013-09-27T00:59:25Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Tracker</strong> changed from <i>Bug</i> to <i>Backport</i></li><li><strong>Project</strong> changed from <i>Ruby master</i> to <i>Backport200</i></li><li><strong>Status</strong> changed from <i>Closed</i> to <i>Assigned</i></li><li><strong>Assignee</strong> changed from <i>sorah (Sorah Fukumori)</i> to <i>nagachika (Tomoyuki Chikanaga)</i></li></ul> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=420132013-09-27T01:13:22Zko1 (Koichi Sasada)
<ul></ul><p>I checked previous behavior.</p>
<p>versions/install-tags_v1_6_5_/bin/ruby<br>
versions/install-tags_v1_6_6_/bin/ruby<br>
versions/install-tags_v1_6_7_/bin/ruby<br>
versions/install-tags_v1_6_8_/bin/ruby<br>
versions/install-tags_v1_8_5_/bin/ruby<br>
versions/install-tags_v1_8_5_113_/bin/ruby<br>
versions/install-tags_v1_8_5_114_/bin/ruby<br>
versions/install-tags_v1_8_5_115_/bin/ruby<br>
versions/install-tags_v1_8_5_11_/bin/ruby<br>
versions/install-tags_v1_8_5_12_/bin/ruby<br>
versions/install-tags_v1_8_5_231_/bin/ruby<br>
versions/install-tags_v1_8_5_2_/bin/ruby<br>
versions/install-tags_v1_8_5_35_/bin/ruby<br>
versions/install-tags_v1_8_5_52_/bin/ruby<br>
versions/install-tags_v1_8_5_preview1_/bin/ruby<br>
versions/install-tags_v1_8_5_preview2_/bin/ruby<br>
versions/install-tags_v1_8_5_preview3_/bin/ruby<br>
versions/install-tags_v1_8_5_preview4_/bin/ruby<br>
versions/install-tags_v1_8_5_preview5_/bin/ruby<br>
versions/install-tags_v1_8_6_/bin/ruby<br>
versions/install-tags_v1_8_6_110_/bin/ruby<br>
versions/install-tags_v1_8_6_111_/bin/ruby<br>
versions/install-tags_v1_8_6_114_/bin/ruby<br>
versions/install-tags_v1_8_6_230_/bin/ruby<br>
versions/install-tags_v1_8_6_286_/bin/ruby<br>
versions/install-tags_v1_8_6_287_/bin/ruby<br>
versions/install-tags_v1_8_6_368_/bin/ruby<br>
versions/install-tags_v1_8_6_369_/bin/ruby<br>
versions/install-tags_v1_8_6_36_/bin/ruby<br>
versions/install-tags_v1_8_6_383_/bin/ruby<br>
versions/install-tags_v1_8_6_388_/bin/ruby<br>
versions/install-tags_v1_8_6_398_/bin/ruby<br>
versions/install-tags_v1_8_6_399_/bin/ruby<br>
versions/install-tags_v1_8_6_420_/bin/ruby<br>
versions/install-tags_v1_8_6_preview1_/bin/ruby<br>
versions/install-tags_v1_8_6_preview2_/bin/ruby<br>
versions/install-tags_v1_8_6_preview3_/bin/ruby<br>
versions/install-tags_v1_8_7_/bin/ruby<br>
versions/install-tags_v1_8_7_160_/bin/ruby<br>
versions/install-tags_v1_8_7_173_/bin/ruby<br>
versions/install-tags_v1_8_7_174_/bin/ruby<br>
versions/install-tags_v1_8_7_17_/bin/ruby<br>
versions/install-tags_v1_8_7_22_/bin/ruby<br>
versions/install-tags_v1_8_7_248_/bin/ruby<br>
versions/install-tags_v1_8_7_249_/bin/ruby<br>
versions/install-tags_v1_8_7_299_/bin/ruby<br>
versions/install-tags_v1_8_7_301_/bin/ruby<br>
versions/install-tags_v1_8_7_302_/bin/ruby<br>
versions/install-tags_v1_8_7_330_/bin/ruby<br>
versions/install-tags_v1_8_7_334_/bin/ruby<br>
versions/install-tags_v1_8_7_352_/bin/ruby<br>
versions/install-tags_v1_8_7_357_/bin/ruby<br>
versions/install-tags_v1_8_7_358_/bin/ruby<br>
versions/install-tags_v1_8_7_369_/bin/ruby<br>
versions/install-tags_v1_8_7_370_/bin/ruby<br>
versions/install-tags_v1_8_7_371_/bin/ruby<br>
versions/install-tags_v1_8_7_373_/bin/ruby<br>
versions/install-tags_v1_8_7_374_/bin/ruby<br>
versions/install-tags_v1_8_7_71_/bin/ruby<br>
versions/install-tags_v1_8_7_72_/bin/ruby<br>
versions/install-tags_v1_8_7_preview1_/bin/ruby<br>
versions/install-tags_v1_8_7_preview2_/bin/ruby<br>
versions/install-tags_v1_8_7_preview3_/bin/ruby<br>
versions/install-tags_v1_8_7_preview4_/bin/ruby<br>
versions/install-tags_v1_9_0_0_/bin/ruby<br>
versions/install-tags_v1_9_0_1_/bin/ruby<br>
versions/install-tags_v1_9_0_2_/bin/ruby<br>
versions/install-tags_v1_9_0_3_/bin/ruby<br>
versions/install-tags_v1_9_0_4_/bin/ruby<br>
versions/install-tags_v1_9_0_5_/bin/ruby<br>
versions/install-tags_v1_9_1_0_/bin/ruby<br>
versions/install-tags_v1_9_1_126_/bin/ruby<br>
versions/install-tags_v1_9_1_127_/bin/ruby<br>
versions/install-tags_v1_9_1_128_/bin/ruby<br>
versions/install-tags_v1_9_1_129_/bin/ruby<br>
versions/install-tags_v1_9_1_243_/bin/ruby<br>
versions/install-tags_v1_9_1_376_/bin/ruby<br>
versions/install-tags_v1_9_1_378_/bin/ruby<br>
versions/install-tags_v1_9_1_429_/bin/ruby<br>
versions/install-tags_v1_9_1_430_/bin/ruby<br>
versions/install-tags_v1_9_1_431_/bin/ruby<br>
versions/install-tags_v1_9_1_preview1_/bin/ruby<br>
versions/install-tags_v1_9_1_preview2_/bin/ruby<br>
versions/install-tags_v1_9_1_rc1_/bin/ruby<br>
versions/install-tags_v1_9_1_rc2_/bin/ruby<br>
versions/install-tags_v1_9_2_0_/bin/ruby<br>
versions/install-tags_v1_9_2_136_/bin/ruby<br>
versions/install-tags_v1_9_2_180_/bin/ruby<br>
versions/install-tags_v1_9_2_290_/bin/ruby<br>
versions/install-tags_v1_9_2_318_/bin/ruby<br>
versions/install-tags_v1_9_2_320_/bin/ruby<br>
versions/install-tags_v1_9_2_preview1_/bin/ruby<br>
versions/install-tags_v1_9_2_preview2_/bin/ruby<br>
versions/install-tags_v1_9_2_preview3_/bin/ruby<br>
versions/install-tags_v1_9_2_rc1_/bin/ruby<br>
versions/install-tags_v1_9_2_rc2_/bin/ruby<br>
versions/install-tags_v1_9_3_0_/bin/ruby<br>
versions/install-tags_v1_9_3_125_/bin/ruby<br>
versions/install-tags_v1_9_3_194_/bin/ruby<br>
versions/install-tags_v1_9_3_195_/bin/ruby<br>
versions/install-tags_v1_9_3_286_/bin/ruby<br>
versions/install-tags_v1_9_3_327_/bin/ruby<br>
versions/install-tags_v1_9_3_360_/bin/ruby<br>
versions/install-tags_v1_9_3_362_/bin/ruby<br>
versions/install-tags_v1_9_3_374_/bin/ruby<br>
versions/install-tags_v1_9_3_385_/bin/ruby<br>
versions/install-tags_v1_9_3_392_/bin/ruby<br>
versions/install-tags_v1_9_3_429_/bin/ruby<br>
versions/install-tags_v1_9_3_448_/bin/ruby<br>
versions/install-tags_v1_9_3_preview1_/bin/ruby<br>
versions/install-tags_v1_9_3_rc1_/bin/ruby<br>
versions/install-tags_v2_0_0_0_/bin/ruby<br>
versions/install-tags_v2_0_0_195_/bin/ruby<br>
versions/install-tags_v2_0_0_247_/bin/ruby<br>
versions/install-tags_v2_0_0_preview1_/bin/ruby<br>
versions/install-tags_v2_0_0_preview2_/bin/ruby<br>
versions/install-tags_v2_0_0_rc1_/bin/ruby<br>
versions/install-tags_v2_0_0_rc2_/bin/ruby</p>
<p>And all of versions ignore the redefinition.<br>
I implemented 1.9 VM as this behaviour because I think it is spec.</p>
<p>Could you ask matz?</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=420152013-09-27T01:23:16Zko1 (Koichi Sasada)
<ul></ul><p>(2013/09/27 1:13), ko1 (Koichi Sasada) wrote:</p>
<blockquote>
<p>And all of versions ignore the redefinition.<br>
I implemented 1.9 VM as this behaviour because I think it is spec.</p>
<p>Could you ask matz?</p>
</blockquote>
<p>I have no objection about that.<br>
However, please be more careful to change the behavior.<br>
(this phrase is also for me, of course)</p>
<p>--<br>
// SASADA Koichi at atdot dot net</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=420172013-09-27T01:53:17Zakr (Akira Tanaka)akr@fsij.org
<ul></ul><p>2013/9/27 ko1 (Koichi Sasada) <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a>:</p>
<blockquote>
<p>Issue <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literal (Closed)" href="https://redmine.ruby-lang.org/issues/8953">#8953</a> has been updated by ko1 (Koichi Sasada).</p>
</blockquote>
<blockquote>
<p>And all of versions ignore the redefinition.<br>
I implemented 1.9 VM as this behaviour because I think it is spec.</p>
</blockquote>
<p>I also think so.<br>
The spec is one of the reason Ruby can assign named capture to local variable.</p>
<h2>% ruby -e '/def(?<var>.*)/ =~ "abcdefghi"; p var'<br>
"ghi"</var>
</h2>
<p>Tanaka Akira</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=420712013-09-28T22:09:06Znagachika (Tomoyuki Chikanaga)nagachika00@gmail.com
<ul><li><strong>Tracker</strong> changed from <i>Backport</i> to <i>Feature</i></li><li><strong>Project</strong> changed from <i>Backport200</i> to <i>Ruby master</i></li><li><strong>Assignee</strong> changed from <i>nagachika (Tomoyuki Chikanaga)</i> to <i>Anonymous</i></li></ul> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=421542013-10-01T18:04:45Zko1 (Koichi Sasada)
<ul><li><strong>Category</strong> set to <i>core</i></li><li><strong>Target version</strong> set to <i>2.1.0</i></li><li><strong>Assignee</strong> changed from <i>Anonymous</i> to <i>matz (Yukihiro Matsumoto)</i></li></ul><p>Could you check it?</p> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=448022014-01-30T06:17:19Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<ul><li><strong>Target version</strong> changed from <i>2.1.0</i> to <i>2.2.0</i></li></ul> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=692442018-01-05T21:00:24Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Target version</strong> deleted (<del><i>2.2.0</i></del>)</li></ul> Ruby master - Feature #8953: `str =~ /pattern/` does not call =~ method if (1) str is a String, (2) /pattern/ is a Regexp literalhttps://redmine.ruby-lang.org/issues/8953?journal_id=940432021-10-06T20:36:16Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Closed</i></li></ul><p>This was fixed in Ruby 2.2:</p>
<pre><code>$ ruby22 -ve 's = "foo"; class << s; def =~ (rhs); raise "a"; end; end; s =~ /foo/'
ruby 2.2.10p489 (2018-03-28 revision 63023) [x86_64-openbsd]
-e:1:in `=~': a (RuntimeError)
from -e:1:in `<main>'
</code></pre>