ruby-changes:14992
From: shugo <ko1@a...>
Date: Thu, 11 Mar 2010 01:07:23 +0900 (JST)
Subject: [ruby-changes:14992] Ruby:r26867 (trunk): * iseq.c (rb_iseq_clone): sets local_iseq and klass properly.
shugo 2010-03-11 01:07:06 +0900 (Thu, 11 Mar 2010) New Revision: 26867 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=26867 Log: * iseq.c (rb_iseq_clone): sets local_iseq and klass properly. Modified files: trunk/ChangeLog trunk/iseq.c trunk/test/ruby/test_class.rb Index: ChangeLog =================================================================== --- ChangeLog (revision 26866) +++ ChangeLog (revision 26867) @@ -1,3 +1,7 @@ +Thu Mar 11 01:04:48 2010 Shugo Maeda <shugo@r...> + + * iseq.c (rb_iseq_clone): sets local_iseq and klass properly. + Wed Mar 10 21:25:41 2010 Yusuke Endoh <mame@t...> * enum.c (min_ii, max_ii, minmax_ii): remove wrong optimization that Index: iseq.c =================================================================== --- iseq.c (revision 26866) +++ iseq.c (revision 26867) @@ -1344,11 +1344,15 @@ if (!iseq1->orig) { iseq1->orig = iseqval; } + if (iseq0->local_iseq == iseq0) { + iseq1->local_iseq = iseq1; + } if (newcbase) { iseq1->cref_stack = NEW_BLOCK(newcbase); if (iseq0->cref_stack->nd_next) { iseq1->cref_stack->nd_next = iseq0->cref_stack->nd_next; } + iseq1->klass = newcbase; } return newiseq; Index: test/ruby/test_class.rb =================================================================== --- test/ruby/test_class.rb (revision 26866) +++ test/ruby/test_class.rb (revision 26867) @@ -220,4 +220,20 @@ assert_raise(SyntaxError) { eval("class C; return; end") } assert_raise(SyntaxError) { eval("class C; yield; end") } end + + def test_clone + original = Class.new { + def foo + return super() + end + } + mod = Module.new { + def foo + return "mod#foo" + end + } + copy = original.clone + copy.send(:include, mod) + assert_equal("mod#foo", copy.new.foo) + end end -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/