https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2012-12-18T02:33:57Z
Ruby Issue Tracking System
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=34803
2012-12-18T02:33:57Z
ko1 (Koichi Sasada)
<ul><li><strong>Category</strong> set to <i>core</i></li><li><strong>Assignee</strong> set to <i>mame (Yusuke Endoh)</i></li><li><strong>Target version</strong> set to <i>2.0.0</i></li></ul><p>mame-san, how about this ticket?</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=34834
2012-12-19T02:46:05Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<ul></ul><p>Bump. /cc nobu</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=34837
2012-12-19T10:04:54Z
zenspider (Ryan Davis)
<ul></ul><p>I'm getting bit by this in my multi-version CI on Flay and any other project that uses the sexp gem and calls my deep_clone:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">deep_clone</span>
<span class="no">Marshal</span><span class="p">.</span><span class="nf">load</span><span class="p">(</span><span class="no">Marshal</span><span class="p">.</span><span class="nf">dump</span><span class="p">(</span><span class="nb">self</span><span class="p">))</span>
<span class="k">end</span>
</code></pre>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=34943
2012-12-21T22:19:37Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li></ul>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35017
2012-12-23T10:01:31Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</i> to <i>Rejected</i></li></ul><p>If <code>method_missing</code> does not deal with a method call, it should raise <code>NoMethodError</code>.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">method_missing</span> <span class="nb">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span>
<span class="vi">@calls</span> <span class="o"><<</span> <span class="p">[</span><span class="nb">name</span><span class="p">,</span> <span class="n">args</span><span class="p">]</span>
<span class="k">super</span>
<span class="k">end</span>
</code></pre>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35039
2012-12-24T04:59:30Z
Anonymous
<ul></ul><p>On Sun, Dec 23, 2012 at 10:01:33AM +0900, nobu (Nobuyoshi Nakada) wrote:</p>
<blockquote>
<p>Issue <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: r38175 introduces incompatibility (Closed)" href="https://redmine.ruby-lang.org/issues/7564">#7564</a> has been updated by nobu (Nobuyoshi Nakada).</p>
<p>Status changed from Assigned to Rejected</p>
<p>If <code>method_missing</code> does not deal with a method call, it should raise <code>NoMethodError</code>.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">method_missing</span> <span class="nb">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span>
<span class="vi">@calls</span> <span class="o"><<</span> <span class="p">[</span><span class="nb">name</span><span class="p">,</span> <span class="n">args</span><span class="p">]</span>
<span class="k">super</span>
<span class="k">end</span>
</code></pre>
</blockquote>
<p>Before this changeset, <code>method_missing</code> <em>did</em> deal with all method<br>
calls. That's why this is not backwards compatible.</p>
<p>--<br>
Aaron Patterson<br>
<a href="http://tenderlovemaking.com/" class="external">http://tenderlovemaking.com/</a></p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35131
2012-12-29T13:35:20Z
zenspider (Ryan Davis)
<ul></ul><p>I still think this is a bug, as shown by needing a <code>respond_to?</code> that does nothing more than call super:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Sexp</span> <span class="o"><</span> <span class="no">Array</span>
<span class="k">def</span> <span class="nf">inspect</span>
<span class="s2">"s(</span><span class="si">#{</span><span class="n">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:inspect</span><span class="p">).</span><span class="nf">join</span> <span class="s1">', '</span><span class="si">}</span><span class="s2">)"</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">respond_to?</span> <span class="n">meth</span>
<span class="k">super</span>
<span class="k">end</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"WHY_DO_I_NEED_THIS"</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">method_missing</span> <span class="n">meth</span><span class="p">,</span> <span class="n">delete</span> <span class="o">=</span> <span class="kp">false</span>
<span class="k">raise</span> <span class="s2">"shouldn't be here: </span><span class="si">#{</span><span class="n">meth</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">s</span> <span class="o">*</span><span class="n">args</span>
<span class="no">Sexp</span><span class="p">.</span><span class="nf">new</span> <span class="n">args</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="no">Marshal</span><span class="p">.</span><span class="nf">load</span> <span class="no">Marshal</span><span class="p">.</span><span class="nf">dump</span> <span class="n">s</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="nb">puts</span>
<span class="c1"># % WHY_DO_I_NEED_THIS=1 ruby20 trunk_bug.rb && ruby20 trunk_bug.rb</span>
<span class="c1"># s(1, 2, 3)</span>
<span class="c1">#</span>
<span class="c1"># trunk_bug.rb:11:in `method_missing': shouldn't be here: :marshal_dump (RuntimeError)</span>
<span class="c1"># from trunk_bug.rb:19:in `dump'</span>
<span class="c1"># from trunk_bug.rb:19:in `<main>'</span>
</code></pre>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35184
2013-01-03T07:25:45Z
zenspider (Ryan Davis)
<ul><li><strong>Status</strong> changed from <i>Rejected</i> to <i>Open</i></li></ul><p>No, really. This is a bug that needs more eyeballs.</p>
<p>A <code>respond_to?</code> with just a super should be equivalent to no code at all.</p>
<p>Can we get Matz and Mame to weigh in?</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35198
2013-01-04T13:02:03Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul></ul><p>Anonymous wrote:</p>
<blockquote>
<p>Before this changeset, <code>method_missing</code> <em>did</em>deal with all method<br>
calls.</p>
</blockquote>
<p>No, previously <code>respond_to?</code> was called so <code>method_missing</code> did <em>not</em> get called.</p>
<blockquote>
<p>That's why this is not backwards compatible.</p>
</blockquote>
<p>It depended on the internal behavior too much.<br>
And the bug that overriding <code>method_missing</code> without <code>respond_to_missing?</code> has been revealed.<br>
Just like overriding <code>hash</code> without <code>eql?</code>.</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35337
2013-01-11T09:37:53Z
zenspider (Ryan Davis)
<ul></ul><p>This seems highly inconsistent to me. Specifically, MM + RT is the only working solution, but RT implementation is entirely meaningless. It doesn't make sense to me that I need a method table entry that does nothing but super. That should be the same as not existing in the method table.</p>
<p>Notes:</p>
<table>
<thead>
<tr>
<th>Runtime</th>
<th>Passes</th>
<th>Failures</th>
</tr>
</thead>
<tbody>
<tr>
<td>(none)</td>
<td></td>
<td>1.8 1.9 2.0 fails #blah (expected)</td>
</tr>
<tr>
<td>MM</td>
<td>1.8 1.9</td>
<td>2.0 raises w/ <code>marshal_dump</code>
</td>
</tr>
<tr>
<td>MM + RT</td>
<td>1.8 1.9 2.0</td>
<td></td>
</tr>
<tr>
<td>MM + RTM</td>
<td>1.8 1.9</td>
<td>2.0 raises w/ <code>marshal_dump</code> (doesn't use RTM)</td>
</tr>
<tr>
<td>MM + RT + RTM</td>
<td>1.8 1.9 2.0</td>
<td></td>
</tr>
<tr>
<td>MM + ARTM</td>
<td>1.8</td>
<td>1.9 SSE, 2.0 raises</td>
</tr>
<tr>
<td>MM + RT + ARTM</td>
<td>1.8</td>
<td>1.9 SSE, 2.0 SSE (<code>SystemStackError</code>)</td>
</tr>
<tr>
<td>RT</td>
<td></td>
<td>1.8 1.9 2.0 fails #blah (expected)</td>
</tr>
<tr>
<td>RTM</td>
<td></td>
<td>1.8 1.9 2.0 fails #blah (expected)</td>
</tr>
<tr>
<td>ARTM</td>
<td></td>
<td>1.8 2.0 fails #blah (expected), 1.9 SSE</td>
</tr>
</tbody>
</table>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Sexp</span> <span class="o"><</span> <span class="no">Array</span>
<span class="k">def</span> <span class="nf">inspect</span>
<span class="s2">"s(</span><span class="si">#{</span><span class="n">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:inspect</span><span class="p">).</span><span class="nf">join</span> <span class="s1">', '</span><span class="si">}</span><span class="s2">)"</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">method_missing</span> <span class="n">meth</span><span class="p">,</span> <span class="n">delete</span> <span class="o">=</span> <span class="kp">false</span>
<span class="n">x</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="k">return</span> <span class="n">x</span> <span class="k">if</span> <span class="n">x</span> <span class="o">=</span> <span class="n">find</span> <span class="p">{</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span> <span class="no">Sexp</span> <span class="o">===</span> <span class="n">o</span> <span class="o">&&</span> <span class="n">o</span><span class="p">.</span><span class="nf">first</span> <span class="o">==</span> <span class="n">meth</span> <span class="p">}</span>
<span class="k">raise</span> <span class="s2">"shouldn't be here: </span><span class="si">#{</span><span class="nb">inspect</span><span class="si">}</span><span class="s2">.</span><span class="si">#{</span><span class="n">meth</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"MM"</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">respond_to?</span> <span class="n">meth</span><span class="p">,</span> <span class="kp">private</span> <span class="o">=</span> <span class="kp">false</span>
<span class="nb">p</span> <span class="ss">:respond_to?</span> <span class="o">=></span> <span class="n">meth</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"V"</span><span class="p">]</span>
<span class="k">super</span>
<span class="k">end</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"RT"</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">respond_to_missing?</span> <span class="n">meth</span><span class="p">,</span> <span class="kp">private</span> <span class="o">=</span> <span class="kp">false</span>
<span class="nb">p</span> <span class="ss">:respond_to_missing?</span> <span class="o">=></span> <span class="n">meth</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"V"</span><span class="p">]</span>
<span class="k">super</span>
<span class="k">end</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"RTM"</span><span class="p">]</span>
<span class="k">alias</span> <span class="n">respond_to_missing?</span> <span class="nb">respond_to?</span> <span class="k">if</span> <span class="no">ENV</span><span class="p">[</span><span class="s2">"ARTM"</span><span class="p">]</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">s</span> <span class="o">*</span><span class="n">args</span>
<span class="no">Sexp</span><span class="p">.</span><span class="nf">new</span> <span class="n">args</span>
<span class="k">end</span>
<span class="k">END</span> <span class="p">{</span> <span class="nb">puts</span> <span class="p">}</span>
<span class="nb">p</span> <span class="no">Marshal</span><span class="p">.</span><span class="nf">load</span> <span class="no">Marshal</span><span class="p">.</span><span class="nf">dump</span> <span class="n">s</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">)</span>
<span class="nb">p</span> <span class="n">s</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="n">s</span><span class="p">(</span><span class="ss">:blah</span><span class="p">)).</span><span class="nf">blah</span>
</code></pre>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35418
2013-01-15T09:55:23Z
ko1 (Koichi Sasada)
<ul><li><strong>Priority</strong> changed from <i>Normal</i> to <i>7</i></li></ul>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35479
2013-01-19T03:48:03Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>Since this is incompatibility, I propose to get back to the old behavior, for 2.0.<br>
We have to discuss the issue that <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/75">@zenspider (Ryan Davis)</a> mentioned in separated thread.</p>
<p>Matz.</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35494
2013-01-20T16:55:22Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li><li><strong>Assignee</strong> changed from <i>mame (Yusuke Endoh)</i> to <i>nobu (Nobuyoshi Nakada)</i></li></ul><p>I agree with Matz. Nobu, please handle this.</p>
Ruby master - Bug #7564: r38175 introduces incompatibility
https://redmine.ruby-lang.org/issues/7564?journal_id=35503
2013-01-20T23:55:44Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Assigned</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 r38888.<br>
Aaron, thank you for reporting this issue.<br>
Your contribution to Ruby is greatly appreciated.<br>
May Ruby be with you.</p>
<hr>
<p>marshal.c: get back to the old behavior</p>
<ul>
<li>marshal.c (w_object, r_object0): separate respond_to checks and<br>
calling, and get back to the old behavior for 2.0. [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: r38175 introduces incompatibility (Closed)" href="https://redmine.ruby-lang.org/issues/7564">#7564</a>]</li>
</ul>