[#49993] メソッド呼び出し時の引数の値を VM 側で取得する方法について — Tetsuo Handa <penguin-kernel@...>

初めまして。 Linux カーネルプログラマの熊猫と申します。

12 messages 2017/02/28
[#49995] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について — SASADA Koichi <ko1@...> 2017/02/28

On 2017/02/28 14:06, Tetsuo Handa wrote:

[ruby-dev:49997] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について

From: Tetsuo Handa <penguin-kernel@...>
Date: 2017-02-28 05:53:15 UTC
List: ruby-dev #49997
SASADA Koichi さんは書きました:
> On 2017/02/28 14:06, Tetsuo Handa wrote:
> > @@ -1352,6 +1405,7 @@ vm_call_iseq_setup_tailcall(rb_thread_t
> >      vm_push_frame(th, iseq, VM_FRAME_MAGIC_METHOD | finish_flag,
> >  		  ci->recv, ci->defined_class, VM_ENVVAL_BLOCK_PTR(ci->blockptr),
> >  		  iseq->iseq_encoded + ci->aux.opt_pc, sp, 0, ci->me);
> > +    dump_function_entry(th, ci->argc, argv);
> >  
> >      cfp->sp = sp_orig;
> >      return Qundef;
> 
> 肝心のパッチですが、cfp->sp = sp_orig; の後に dump_function_entry() を呼
> んだ方がいいかも。ちゃんと動かしてないので勘ですが。
> 
> -- 
> // SASADA Koichi at atdot dot net
> 

dump_function_entry() 呼び出しを cfp->sp の設定後に移動させてみましたが、
同じ結果でした。 rb_inspect() に渡すことができないオブジェクトが存在するのでしょうか?

----------------------------------------
# tail /tmp/ruby.log
class=Pathname method=chop_basename filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/.ext/common/pathname.rb line=43 argc=1 argv[0](30a7960)="/root/rpmbuild/BUILD/"
class=Pathname method=chop_basename filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/.ext/common/pathname.rb line=43 argc=1 argv[0](30a77d0)="/root/rpmbuild/"
class=Pathname method=chop_basename filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/.ext/common/pathname.rb line=43 argc=1 argv[0](30a7618)="/root/"
class=Pathname method=chop_basename filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/.ext/common/pathname.rb line=43 argc=1 argv[0](30a74d8)="/"
class=RDoc::Store method=add_file filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/store.rb line=179 argc=2 argv[0](3088448)="prelude.c" argv[1](30a71e0)="prelude.c"
class=RDoc::TopLevel method=initialize filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/top_level.rb line=42 argc=2 argv[0](3088448)="prelude.c" argv[1](30a71e0)="prelude.c"
class=RDoc::Context method=initialize filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/context.rb line=119 argc=0
class=RDoc::CodeObject method=initialize filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/code_object.rb line=107 argc=0
class=RDoc::CodeObject method=initialize_visibility filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/code_object.rb line=125 argc=0
class=RDoc::Context::Section method=initialize filename=/root/rpmbuild/BUILD/ruby-2.0.0-p648/lib/rdoc/context/section.rb line=41 argc=3 argv[0](30a7140)
----------------------------------------

In This Thread