ruby-dev (Japanese) list archive (unofficial mirror)
 help / color / mirror / Atom feed
* [ruby-dev:46162] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit
       [not found] <20120925010148.477C46821D@sakura.atdot.net>
@ 2012-09-25 16:06 ` SASADA Koichi
  2012-09-27  2:51   ` [ruby-dev:46167] " Nobuyoshi Nakada
  0 siblings, 1 reply; 4+ messages in thread
From: SASADA Koichi @ 2012-09-25 16:06 UTC (permalink / raw
  To: ruby developers list

2点ほど.

(1) ChangeLog 間違ってない? あと2つ修正したファイルが.

(2) この修正でいいんでしょうか.
  nil check 追加するんじゃなくて,
  そもそも nil 入ってる状況がまずいといことはない?
 (cfp->klasss の扱いって,まだよくわかってないのですが)


(2012/09/25 10:01), nobu wrote:
> nobu	2012-09-25 09:59:29 +0900 (Tue, 25 Sep 2012)
> 
>   New Revision: 37030
> 
>   http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37030
> 
>   Log:
>     insns.def: super from at_exit
>     
>     * insns.def (invokesuper): klass in cfp is not valid in at_exit and
>       END blocks.  [ruby-core:47680] [Bug #7064]
> 
>   Modified files:
>     trunk/ChangeLog
>     trunk/insns.def
>     trunk/test/ruby/test_super.rb
>     trunk/vm_insnhelper.c
> 
> Index: ChangeLog
> ===================================================================
> --- ChangeLog	(revision 37029)
> +++ ChangeLog	(revision 37030)
> @@ -1,3 +1,8 @@
> +Tue Sep 25 09:59:26 2012  Nobuyoshi Nakada  <nobu@ruby-lang.org>
> +
> +	* insns.def (invokesuper): klass in cfp is not valid in at_exit and
> +	  END blocks.  [ruby-core:47680] [Bug #7064]
> +
>  Tue Sep 25 08:11:11 2012  NARUSE, Yui  <naruse@ruby-lang.org>
>  
>  	* iseq.c (rb_iseq_defined_string): the index of defined_strings must
> Index: insns.def
> ===================================================================
> --- insns.def	(revision 37029)
> +++ insns.def	(revision 37030)
> @@ -1035,6 +1035,9 @@
>      flag = VM_CALL_SUPER_BIT | VM_CALL_FCALL_BIT;
>  
>      klass = GET_CFP()->klass;
> +    if (NIL_P(klass)) {
> +	vm_super_outside();
> +    }
>      if (!NIL_P(RCLASS_REFINED_CLASS(klass))) {
>  	klass = RCLASS_REFINED_CLASS(klass);
>      }
> Index: vm_insnhelper.c
> ===================================================================
> --- vm_insnhelper.c	(revision 37029)
> +++ vm_insnhelper.c	(revision 37030)
> @@ -1460,6 +1460,12 @@
>  }
>  
>  static void
> +vm_super_outside(void)
> +{
> +    rb_raise(rb_eNoMethodError, "super called outside of method");
> +}
> +
> +static void
>  vm_search_superclass(rb_control_frame_t *reg_cfp, rb_iseq_t *iseq,
>  		     VALUE sigval,
>  		     ID *idp, VALUE *klassp)
> @@ -1472,7 +1478,7 @@
>      }
>  
>      if (iseq == 0) {
> -	rb_raise(rb_eNoMethodError, "super called outside of method");
> +	vm_super_outside();
>      }
>  
>      id = iseq->defined_method_id;
> @@ -1492,8 +1498,7 @@
>  	    while (1) {
>  		lcfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(lcfp);
>  		if (RUBY_VM_CONTROL_FRAME_STACK_OVERFLOW_P(th, lcfp)) {
> -		    rb_raise(rb_eNoMethodError,
> -			     "super called outside of method");
> +		    vm_super_outside();
>  		}
>  		if (lcfp->ep == tep) {
>  		    break;
> @@ -1503,7 +1508,7 @@
>  
>  	/* temporary measure for [Bug #2420] [Bug #3136] */
>  	if (!lcfp->me) {
> -	    rb_raise(rb_eNoMethodError, "super called outside of method");
> +	    vm_super_outside();
>  	}
>  
>  	id = lcfp->me->def->original_id;
> Index: test/ruby/test_super.rb
> ===================================================================
> --- test/ruby/test_super.rb	(revision 37029)
> +++ test/ruby/test_super.rb	(revision 37030)
> @@ -1,4 +1,5 @@
>  require 'test/unit'
> +require_relative 'envutil'
>  
>  class TestSuper < Test::Unit::TestCase
>    class Base
> @@ -347,4 +348,14 @@
>  
>      assert_equal 'hoge', foo.new.bar
>    end
> +
> +  def test_super_in_at_exit
> +    bug7064 = '[ruby-core:47680]'
> +    assert_normal_exit "at_exit {super}", bug7064
> +  end
> +
> +  def test_super_in_END
> +    bug7064 = '[ruby-core:47680]'
> +    assert_normal_exit "END {super}", bug7064
> +  end
>  end
> 


-- 
// SASADA Koichi at atdot dot net

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-dev:46167] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit
  2012-09-25 16:06 ` [ruby-dev:46162] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit SASADA Koichi
@ 2012-09-27  2:51   ` Nobuyoshi Nakada
  2012-09-27  3:01     ` [ruby-dev:46168] " SASADA Koichi
  0 siblings, 1 reply; 4+ messages in thread
From: Nobuyoshi Nakada @ 2012-09-27  2:51 UTC (permalink / raw
  To: ruby developers list

なかだです。

At Wed, 26 Sep 2012 01:06:48 +0900,
SASADA Koichi wrote in [ruby-dev:46162]:
> 
> 2点ほど.
> 
> (1) ChangeLog 間違ってない? あと2つ修正したファイルが.

メインはinsns.defなので省きました。

> (2) この修正でいいんでしょうか.
>   nil check 追加するんじゃなくて,
>   そもそも nil 入ってる状況がまずいといことはない?
>  (cfp->klasss の扱いって,まだよくわかってないのですが)

トップレベルのブロック、つまりメソッド外から呼ばれているので
klassがnilなのは正常です。refined classのチェックが入ったのでそ
の前にさらにnilチェックが必要になったわけです。

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-dev:46168] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit
  2012-09-27  2:51   ` [ruby-dev:46167] " Nobuyoshi Nakada
@ 2012-09-27  3:01     ` SASADA Koichi
  2012-09-28  1:09       ` [ruby-dev:46171] " Nobuyoshi Nakada
  0 siblings, 1 reply; 4+ messages in thread
From: SASADA Koichi @ 2012-09-27  3:01 UTC (permalink / raw
  To: ruby developers list

(2012/09/27 11:51), Nobuyoshi Nakada wrote:
>> > (1) ChangeLog 間違ってない? あと2つ修正したファイルが.
> メインはinsns.defなので省きました。

 ポリシーを確認しておきたいんですが,メインなファイルだけでいいんでしょ
うか.付随する修正とか,テストとか,とりあえず全部書いているんですが,確
かに意味があまりないといえばないかも.


>> > (2) この修正でいいんでしょうか.
>> >   nil check 追加するんじゃなくて,
>> >   そもそも nil 入ってる状況がまずいといことはない?
>> >  (cfp->klasss の扱いって,まだよくわかってないのですが)
> トップレベルのブロック、つまりメソッド外から呼ばれているので
> klassがnilなのは正常です。refined classのチェックが入ったのでそ
> の前にさらにnilチェックが必要になったわけです。

つまりメソッドじゃないと klass は nil なんですね.この辺は自分で一度考え
直さないと....

-- 
// SASADA Koichi at atdot dot net

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [ruby-dev:46171] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit
  2012-09-27  3:01     ` [ruby-dev:46168] " SASADA Koichi
@ 2012-09-28  1:09       ` Nobuyoshi Nakada
  0 siblings, 0 replies; 4+ messages in thread
From: Nobuyoshi Nakada @ 2012-09-28  1:09 UTC (permalink / raw
  To: ruby developers list

なかだです。

At Thu, 27 Sep 2012 12:01:07 +0900,
SASADA Koichi wrote in [ruby-dev:46168]:
> (2012/09/27 11:51), Nobuyoshi Nakada wrote:
> >> > (1) ChangeLog 間違ってない? あと2つ修正したファイルが.
> > メインはinsns.defなので省きました。
> 
>  ポリシーを確認しておきたいんですが,メインなファイルだけでいいんでしょ
> うか.付随する修正とか,テストとか,とりあえず全部書いているんですが,確
> かに意味があまりないといえばないかも.

あくまで個人的かつ基本的な方針ですが、以下のようなものは省いてます。
* テスト自体の修正以外でないテストの追加
* 些細あるいは自明と思われるもの

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-09-28  1:03 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20120925010148.477C46821D@sakura.atdot.net>
2012-09-25 16:06 ` [ruby-dev:46162] Re: [ruby-changes:24978] nobu:r37030 (trunk): insns.def: super from at_exit SASADA Koichi
2012-09-27  2:51   ` [ruby-dev:46167] " Nobuyoshi Nakada
2012-09-27  3:01     ` [ruby-dev:46168] " SASADA Koichi
2012-09-28  1:09       ` [ruby-dev:46171] " Nobuyoshi Nakada

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).