ruby-changes:15951
From: mame <ko1@a...>
Date: Wed, 19 May 2010 19:48:59 +0900 (JST)
Subject: [ruby-changes:15951] Ruby:r27892 (trunk): * iseq_compile_each (NODE_DEFINED): put nil first to fix stack
mame 2010-05-19 19:48:17 +0900 (Wed, 19 May 2010) New Revision: 27892 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=27892 Log: * iseq_compile_each (NODE_DEFINED): put nil first to fix stack consistency. [ruby-core:30293] Now, lfinish[0] of defined_expr seems not to be used. Refactoring may be needed. Modified files: trunk/ChangeLog trunk/bootstraptest/test_syntax.rb trunk/compile.c Index: ChangeLog =================================================================== --- ChangeLog (revision 27891) +++ ChangeLog (revision 27892) @@ -1,3 +1,10 @@ +Wed May 19 19:45:10 2010 Yusuke Endoh <mame@t...> + + * iseq_compile_each (NODE_DEFINED): put nil first to fix stack + consistency. [ruby-core:30293] + Now, lfinish[0] of defined_expr seems not to be used. Refactoring + may be needed. + Wed May 19 16:55:09 2010 NARUSE, Yui <naruse@r...> * numeric.c (rb_num2ulong): use rb_big2ulong for data from Index: bootstraptest/test_syntax.rb =================================================================== --- bootstraptest/test_syntax.rb (revision 27891) +++ bootstraptest/test_syntax.rb (revision 27892) @@ -890,3 +890,13 @@ assert_valid_syntax('x y { "#{}".z do end }', bug1240) assert_valid_syntax('y "#{a 1}" do end', '[ruby-core:29579]') +assert_normal_exit %q{ + def foo(&block) + yield + end + + foo do + s = defined?(raise + 1) + Class + end +}, '[ruby-core:30293]' Index: compile.c =================================================================== --- compile.c (revision 27891) +++ compile.c (revision 27892) @@ -4815,11 +4815,12 @@ LABEL *lfinish[2]; lfinish[0] = NEW_LABEL(nd_line(node)); lfinish[1] = 0; + ADD_INSN(ret, nd_line(node), putnil); defined_expr(iseq, ret, node->nd_head, lfinish, Qtrue); + ADD_INSN(ret, nd_line(node), swap); + ADD_INSN(ret, nd_line(node), pop); if (lfinish[1]) { - ADD_INSNL(ret, nd_line(node), jump, lfinish[0]); ADD_LABEL(ret, lfinish[1]); - ADD_INSN(ret, nd_line(node), putnil); } ADD_LABEL(ret, lfinish[0]); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/