https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2010-03-15T18:29:34Z
Ruby Issue Tracking System
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=8972
2010-03-15T18:29:34Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul></ul><p>=begin<br>
String#=== を再定義するだけで再現できました。</p>
<p>$ ruby -ve '<br>
class String<br>
def ===(other)<br>
self == other<br>
end<br>
end<br>
case ""<br>
when ""<br>
end'<br>
ruby 1.9.2dev (2010-03-15 trunk 26937) [x86_64-darwin10.2.0]<br>
-e:3: warning: method redefined; discarding old ===<br>
-e:7:in <code><main>': method </code>===' called on hidden T_STRING object (0x0000010085be60 flags=0x500805 klass=0x0) (NotImplementedError)<br>
=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=8973
2010-03-15T20:40:38Z
sorah (Sorah Fukumori)
her@sorah.jp
<ul></ul><h2>=begin<br>
ソラです。<br>
1.9.2devと1.9.1で例外メッセージが異なるようです。参考にも。</h2>
<h2>% ruby -ve '<br>
class String<br>
def ===(other)<br>
self == other<br>
end<br>
end<br>
case ""<br>
when ""<br>
end'<br>
ruby 1.9.1p378 (2010-01-10 revision 26273) [i386-darwin10.2.0]<br>
-e:3: warning: method redefined; discarding old ===<br>
-e:7:in <code><main>': method </code>===' called on terminated object (0x00000101028870) (NotImplementedError)</h2>
<p>% ruby192 -ve '<br>
class String<br>
def ===(other)<br>
self == other<br>
end<br>
end<br>
case ""<br>
when ""<br>
end'<br>
ruby 1.9.2dev (2010-03-15 trunk 26939) [x86_64-darwin10.2.0]<br>
-e:3: warning: method redefined; discarding old ===<br>
-e:7:in <code><main>': method </code>===' called on hidden T_STRING object (0x0000010085c4c8 flags=0x500805 klass=0x0) (NotImplementedError)<br>
=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=8974
2010-03-15T22:32:41Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul></ul><p>=begin<br>
1.9.2dev は以下の patch で直りました。<br>
修正の方向性が正しければコミットします。<br>
如何でしょう?</p>
<p>diff --git a/compile.c b/compile.c<br>
index 1db4e9c..b47999b 100644<br>
--- a/compile.c<br>
+++ b/compile.c<br>
@@ -4426,7 +4426,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ANCHOR *ret, NODE * node, int poped)<br>
case NODE_STR:{<br>
debugp_param("nd_lit", node->nd_lit);<br>
if (!poped) {</p>
<ul>
<li>
<pre><code> hide_obj(node->nd_lit);
</code></pre>
</li>
</ul>
<ul>
<li>
<pre><code> OBJ_FREEZE(node->nd_lit);
ADD_INSN1(ret, nd_line(node), putstring, node->nd_lit);
</code></pre>
}<br>
break;</li>
</ul>
<p>=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=8987
2010-03-16T08:21:15Z
shyouhei (Shyouhei Urabe)
shyouhei@ruby-lang.org
<ul></ul><p>=begin<br>
いや、ここは小手先の修正ではなくきちんと設計されているべき所です。<br>
#1137の議論を読み返していただくとよいのですが、リテラルの文字列がObjectSpaceから弄れちゃうよという問題があって、</p>
<ol>
<li>freezeすればいいじゃん</li>
<li>そもそもObjectSpaceから見えているのは根本的にまずい</li>
</ol>
<p>という主張が争った結果、現在は2を採用しているのですね。したがって1に持っていくならまず「2がかっこいい」とするまつもとさんを説得するなどの必要があります。</p>
<p>あと仮に1に振るならその他のhide_objしている箇所をどうするべきかも考慮の対象になるでしょう。<br>
=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=8993
2010-03-16T10:24:09Z
ko1 (Koichi Sasada)
<ul></ul><p>=begin<br>
ささだです.</p>
<p>(2010/03/16 8:21), Shyouhei Urabe wrote::</p>
<blockquote>
<p>いや、ここは小手先の修正ではなくきちんと設計されているべき所です。<br>
#1137の議論を読み返していただくとよいのですが、リテラルの文字列がObjectSpaceから弄れちゃうよという問題があって、</p>
<ol>
<li>freezeすればいいじゃん</li>
<li>そもそもObjectSpaceから見えているのは根本的にまずい</li>
</ol>
<p>という主張が争った結果、現在は2を採用しているのですね。したがって1に持っていくならまず「2がかっこいい」とするまつもとさんを説得するなどの必要があります。</p>
<p>あと仮に1に振るならその他のhide_objしている箇所をどうするべきかも考慮の対象になるでしょう。</p>
</blockquote>
<p> 1 でも問題無いような気がするので,1 に統一するのはどうでしょうか.2<br>
は,私もかっこいいと思うのですが,感覚的にそう思う以外に利点はなさそうに<br>
思います.すでにこういう困った例も出てきているわけですし.</p>
<p>--<br>
// SASADA Koichi at atdot dot net</p>
<p>=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=9007
2010-03-16T15:14:48Z
shyouhei (Shyouhei Urabe)
shyouhei@ruby-lang.org
<ul></ul><p>=begin<br>
putstringのオペランドをVALUEじゃない何かにすればいいんじゃないですか?<br>
void*, size_t, rb_encoding* のtupleとか。<br>
=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=9030
2010-03-17T11:55:58Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul></ul><p>=begin<br>
String に限らず、=== が再定義されるだけで発生します。<br>
隠しオブジェクト用のメソッドテーブルが必要なんじゃないでしょうか?</p>
<p>$ ruby -ve '<br>
class Float<br>
def ===(x)<br>
true<br>
end<br>
end<br>
case true<br>
when ""<br>
end'<br>
ruby 1.9.2dev (2010-03-17 trunk 26960) [x86_64-darwin10.2.0]<br>
-e:1: warning: method redefined; discarding old ===<br>
-e:1:in <code><main>': method </code>===' called on hidden T_STRING object (0x00000100856f00 flags=0x500805 klass=0x0) (NotImplementedError)</p>
<p>=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=9597
2010-03-31T18:51:11Z
shyouhei (Shyouhei Urabe)
shyouhei@ruby-lang.org
<ul><li><strong>Category</strong> set to <i>core</i></li><li><strong>Priority</strong> changed from <i>Normal</i> to <i>5</i></li></ul><p>=begin<br>
本件は1.9.2までに改善されるべきだと思います。<br>
いろいろなやり方がありえそうですが、費用対効果でいうととりあえずfreezeするほうに全部倒すというのが現実的でしょうか。<br>
=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=9940
2010-04-08T02:01:52Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40877">[ruby-dev:40877]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: method `===' called on hidden T_STRING object (NotImplementedError) (Closed)" href="https://redmine.ruby-lang.org/issues/2965">#2965</a>] method `===' called on hidden T_STRING object (NotImplementedError)"<br>
on Wed, 31 Mar 2010 18:51:12 +0900, Shyouhei Urabe <a href="mailto:redmine@ruby-lang.org" class="email">redmine@ruby-lang.org</a> writes:</p>
<p>|本件は1.9.2までに改善されるべきだと思います。<br>
|いろいろなやり方がありえそうですが、費用対効果でいうととりあえずfreezeするほうに全部倒すというのが現実的でしょうか。</p>
<p>賛成します。</p>
<p>=end</p>
Ruby master - Bug #2965: method `===' called on hidden T_STRING object (NotImplementedError)
https://redmine.ruby-lang.org/issues/2965?journal_id=9995
2010-04-09T14:24:34Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Closed</i></li></ul><p>=begin<br>
<a href="https://blade.ruby-lang.org/ruby-dev/40647">[ruby-dev:40647]</a> で提示したパッチを適用してコミットしました。</p>
<p>=end</p>