@@ -637,6 +637,36 @@ Debase_enable_file_filtering(VALUE self, VALUE value)
637637 return value ;
638638}
639639
640+ #if RUBY_API_VERSION_CODE >= 20500
641+ static const rb_iseq_t *
642+ my_iseqw_check (VALUE iseqw )
643+ {
644+ rb_iseq_t * iseq = DATA_PTR (iseqw );
645+
646+ if (!iseq -> body ) {
647+ ibf_load_iseq_complete (iseq );
648+ }
649+
650+ if (!iseq -> body -> location .label ) {
651+ rb_raise (rb_eTypeError , "uninitialized InstructionSequence" );
652+ }
653+ return iseq ;
654+ }
655+
656+ static void
657+ Debase_set_trace_flag_to_iseq (VALUE self , VALUE rb_iseq )
658+ {
659+ if (!SPECIAL_CONST_P (rb_iseq ) && RBASIC_CLASS (rb_iseq ) == rb_cISeq ) {
660+ rb_iseq_t * iseq = my_iseqw_check (rb_iseq );
661+ rb_iseq_trace_set (iseq , RUBY_EVENT_TRACEPOINT_ALL );
662+ }
663+ }
664+ #else
665+ static void
666+ Debase_set_trace_flag_to_iseq (VALUE self , VALUE rb_iseq ) {
667+ }
668+ #endif
669+
640670static VALUE
641671Debase_init_variables ()
642672{
@@ -680,6 +710,7 @@ Init_debase_internals()
680710 rb_define_module_function (mDebase , "enable_trace_points" , Debase_enable_trace_points , 0 );
681711 rb_define_module_function (mDebase , "prepare_context" , Debase_prepare_context , 0 );
682712 rb_define_module_function (mDebase , "init_variables" , Debase_init_variables , 0 );
713+ rb_define_module_function (mDebase , "set_trace_flag_to_iseq" , Debase_set_trace_flag_to_iseq , 1 );
683714
684715 idAlive = rb_intern ("alive?" );
685716 idAtLine = rb_intern ("at_line" );
0 commit comments