カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
rails と yarv という Ruby 界の二大キラーが競演できたら素晴らしかろうと、動作の確認をちょっとしてみました。rails の手前の rubygems で落ちました。とりえあず再現する最小のコードをメモっておきます。
./miniruby -e '
> loop do
> begin
> {}
> ensure
> noop = nil
> end
> end
> '
DBG> : noop
DBG> : ":0:in `initialize'"
DBG> : ":0:in `initialize'"
-- stack frame ------------
0x2ad4a008 (0000): 00000001
0x2ad4a00c (0001): 00000001
0x2ad4a010 (0002): 00000001 <- lfp <- dfp
-- control frame ----------
c:0004 p:-001 s:0003 b:0003 l:0002 d:0002 CFUNC i:initialize s: -
c:0003 p:-001 s:0002 b:0002 l:0001 d:0001 CFUNC i:initialize s: -
c:0002 p:-001 s:0001 b:0001 l:0000 d:0000 CFUNC i:initialize s: -
c:0001 p:-001 s:0000 b:-001 l:0000 d:0000 ------ i:- s: -
---------------------------
[BUG] NODE_DASGN_CURR, but lv == 1 (line: 6)
ruby 1.9.0 (2006-02-14) [i686-linux]
アボートしました
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).
うへ。今見つけたので、直しました。ところで、バグ報告はMLに頂けるとさくっと対処できると思うんですが、いかがでしょうか。
そうですね。ML に参加したいと思います。と思ったら atdot.net に繋がらないようですので、後ほど。。。
む。時刻がまたずれてる。
なんか学科のネットワークが落ちてるらしく。<br><br>とりあえずパッチです。<br><br>=== compile.c<br>==================================================================<br>--- compile.c (revision 674)<br>+++ compile.c (local)<br>@@ -570,7 +570,6 @@<br> debug_list(LINK_ANCHOR *anchor)<br> {<br> LINK_ELEMENT *list = FIRST_ELEMENT(anchor);<br>- int i = 0;<br> printf("----\n");<br> printf("anch: %p, frst: %p, last: %p\n", &anchor->anchor,<br> anchor->anchor.next, anchor->last);<br>@@ -3109,7 +3108,7 @@<br> idx = get_dyna_var_idx(iseq, node->nd_vid, &lv, &ls);<br> if (nd_type(node) == NODE_DASGN_CURR &&<br> lv > 0 &&<br>- iseq->type != ISEQ_TYPE_RESCUE &&<br>+ iseq->type == ISEQ_TYPE_BLOCK &&<br> iseq->compile_data->for_iseq != 1) {<br> <br> dpi(node->nd_vid);<br>@@ -3342,17 +3341,26 @@<br> case NODE_OP_ASGN_AND:<br> case NODE_OP_ASGN_OR:{<br> LABEL *lfin = NEW_LABEL(nd_line(node));<br>-<br>- COMPILE(ret, "NODE_OP_ASGN_AND#nd_head", node->nd_head);<br>+ LABEL *lassign = NEW_LABEL(nd_line(node));<br>+ <br>+ if (nd_type(node) == NODE_OP_ASGN_OR) {<br>+ defined_expr(iseq, ret, node->nd_head, lassign, Qfalse);<br>+ ADD_INSNL(ret, nd_line(node), unless, lassign);<br>+ }<br>+ <br>+ COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_head", node->nd_head);<br> ADD_INSN(ret, nd_line(node), dup);<br>+ <br> if (nd_type(node) == NODE_OP_ASGN_AND) {<br> ADD_INSNL(ret, nd_line(node), unless, lfin);<br> }<br> else {<br> ADD_INSNL(ret, nd_line(node), if, lfin) ;<br> }<br>+<br> ADD_INSN(ret, nd_line(node), pop);<br>- COMPILE(ret, "NODE_OP_ASGN_AND#nd_value", node->nd_value);<br>+ ADD_LABEL(ret, lassign);<br>+ COMPILE(ret, "NODE_OP_ASGN_AND/OR#nd_value", node->nd_value);<br> ADD_LABEL(ret, lfin);<br> <br> if (poped) {
最小コードではちゃんと動くようになりました。あとでrubygemsでも試してみます。次から報告はMLにしますね。