[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) ----------------------------------------