From: wanabe Date: 2009-06-24T09:45:44+09:00 Subject: [ruby-dev:38709] trace 命令でのメソッドID/クラスの引渡し ワナベと申します。 trace 命令でイベントフックが呼び出されるときに メソッド ID とクラスを渡すようにしていただけると 拡張ライブラリ等でもそれらが取得できてありがたいです。 rb_thread_method_id_and_classの実装をそのまま用いたパッチを添付します。 Index: insns.def =================================================================== --- insns.def (revision 23834) +++ insns.def (working copy) @@ -852,8 +852,11 @@ () { rb_event_flag_t flag = nf; + ID id = 0; + VALUE klass = 0; - EXEC_EVENT_HOOK(th, flag, GET_SELF(), 0, 0 /* TODO: id, klass */); + rb_vm_method_id_and_class(GET_CFP(), &id, &klass); + EXEC_EVENT_HOOK(th, flag, GET_SELF(), id, klass); } /**********************************************************/ Index: vm.c =================================================================== --- vm.c (revision 23834) +++ vm.c (working copy) @@ -1317,10 +1317,9 @@ } int -rb_thread_method_id_and_class(rb_thread_t *th, - ID *idp, VALUE *klassp) +rb_vm_method_id_and_class(rb_control_frame_t *cfp, + ID *idp, VALUE *klassp) { - rb_control_frame_t *cfp = th->cfp; rb_iseq_t *iseq = cfp->iseq; if (!iseq) { if (idp) *idp = cfp->method_id; @@ -1347,6 +1346,13 @@ } int +rb_thread_method_id_and_class(rb_thread_t *th, + ID *idp, VALUE *klassp) +{ + return rb_vm_method_id_and_class(th->cfp, idp, klassp); +} + +int rb_frame_method_id_and_class(ID *idp, VALUE *klassp) { return rb_thread_method_id_and_class(GET_THREAD(), idp, klassp); -- ワナベ