https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2015-01-03T14:01:24Z
Ruby Issue Tracking System
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=50770
2015-01-03T14:01:24Z
ktsj (Kazuki Tsujimoto)
kazuki@callcc.net
<ul><li><strong>File</strong> <a href="/attachments/4960">save-target-cfp-in-errinfo.patch</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/4960/save-target-cfp-in-errinfo.patch">save-target-cfp-in-errinfo.patch</a> added</li></ul><p>r33064(<a href="http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=33064&view=revision" class="external">http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?revision=33064&view=revision</a>)</p>
<blockquote>
<p>I'll try to change throw mechanism (not save target dfp, but save target cfp).</p>
</blockquote>
<p>この方針でパッチを書き直しました。</p>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=50865
2015-01-08T19:31:59Z
ko1 (Koichi Sasada)
<ul></ul><p>ありがとうございます!</p>
<p>頂いたパッチを元に、cfp を使うように整理してみました。<br>
<a href="http://www.atdot.net/sp/view/e5ivhn" class="external">http://www.atdot.net/sp/view/e5ivhn</a></p>
<ul>
<li>vm_throw() を簡素化</li>
<li>マクロっぽい名前を関数っぽく</li>
</ul>
<p>一応、test-all/test-rubyspec は通っていますが、良さそうでしたらコミットしてもらえないでしょうか。</p>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=50927
2015-01-11T07:37:45Z
ktsj (Kazuki Tsujimoto)
kazuki@callcc.net
<ul></ul><p>vm_throw_start内にあるflagが立っている場合の処理は<br>
以下のように整理できるんじゃないかと思うのですがどうでしょう。</p>
<pre><code class="diff syntaxhl" data-language="diff"><span class="gh">diff --git a/vm.c b/vm.c
index 45734e1..80b3bbe 100644
</span><span class="gd">--- a/vm.c
</span><span class="gi">+++ b/vm.c
</span><span class="p">@@ -1523,7 +1523,7 @@</span> vm_exec(rb_thread_t *th)
}
}
}
<span class="gd">- else if (state == TAG_BREAK && ((VALUE)escape_cfp & ~0x01) == 0) {
</span><span class="gi">+ else if (state == TAG_BREAK && !escape_cfp) {
</span> type = CATCH_TYPE_BREAK;
search_restart_point:
<span class="gh">diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 05b8d15..744bbfd 100644
</span><span class="gd">--- a/vm_insnhelper.c
</span><span class="gi">+++ b/vm_insnhelper.c
</span><span class="p">@@ -600,8 +600,8 @@</span> vm_throw_start(rb_thread_t * const th, rb_control_frame_t * const reg_cfp, int s
rb_control_frame_t *escape_cfp = NULL;
const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(th); /* end of control frame pointer */
<span class="gd">- if (flag != 0) { /* TODO: memo */
- escape_cfp = (void *) 0x01;
</span><span class="gi">+ if (flag != 0) {
+ /* do nothing */
</span> }
else if (state == TAG_BREAK) {
int is_orphan = 1;
</code></pre>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=50974
2015-01-13T07:27:32Z
ko1 (Koichi Sasada)
<ul></ul><p>なんのために 0x02 の bit について気にしていたか覚えていないのですが(クラスとか、その辺でしたっけ)、<br>
よろしいと思います! よろしくお願いします。</p>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=51034
2015-01-16T02:54:34Z
ktsj (Kazuki Tsujimoto)
kazuki@callcc.net
<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>Applied in changeset r49266.</p>
<hr>
<ul>
<li>
<p>eval_intern.h, vm.c, vm_eval.c, vm_insnhelper.c:<br>
change throw mechanism (not save target ep, but save target cfp).<br>
It fixes `unexpected break' bug that occurs when<br>
TracePoint#binding is called.<br>
<a href="/issues/10689">[ruby-dev:48797]</a> [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: `unexpected break' occurs when TracePoint#binding is called (Closed)" href="https://bugs.ruby-lang.org/issues/10689">#10689</a>]</p>
</li>
<li>
<p>test/ruby/test_settracefunc.rb: add a test.</p>
</li>
</ul>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=51035
2015-01-16T02:59:10Z
ktsj (Kazuki Tsujimoto)
kazuki@callcc.net
<ul></ul><p>レビューありがとうございます。</p>
<blockquote>
<p>なんのために 0x02 の bit について気にしていたか覚えていないのですが(クラスとか、その辺でしたっけ)、</p>
</blockquote>
<p>VM_ENVVAL_BLOCK_PTR_FLAGのことかなぁと思っていました。</p>
Ruby master - Bug #10689: `unexpected break' occurs when TracePoint#binding is called
https://bugs.ruby-lang.org/issues/10689?journal_id=51171
2015-01-22T02:46:24Z
naruse (Yui NARUSE)
naruse@airemix.jp
<ul><li><strong>Backport</strong> changed from <i>2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED</i> to <i>2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: DONE</i></li></ul><p>ruby_2_2 r49374 merged revision(s) 49266.</p>