1 #ifndef RUBY_PROBES_HELPER_H
2 #define RUBY_PROBES_HELPER_H
9 #define RUBY_DTRACE_HOOK(name, th, klazz, id) \
11 if (RUBY_DTRACE_##name##_ENABLED()) { \
12 VALUE _klass = (klazz); \
14 const char * classname; \
15 const char * methodname; \
16 const char * filename; \
18 rb_thread_method_id_and_class((th), &_id, &_klass); \
21 if (RB_TYPE_P(_klass, T_ICLASS)) { \
22 _klass = RBASIC(_klass)->klass; \
24 else if (FL_TEST(_klass, FL_SINGLETON)) { \
25 _klass = rb_iv_get(_klass, "__attached__"); \
27 switch (TYPE(_klass)) { \
32 VALUE _name = rb_class_path_no_cache(_klass); \
33 if (!NIL_P(_name)) { \
34 classname = StringValuePtr(_name); \
37 classname = "<unknown>"; \
39 methodname = rb_id2name(_id); \
40 filename = rb_sourcefile(); \
41 if (classname && methodname && filename) { \
55 #define RUBY_DTRACE_METHOD_ENTRY_HOOK(th, klass, id) \
56 RUBY_DTRACE_HOOK(METHOD_ENTRY, th, klass, id)
58 #define RUBY_DTRACE_METHOD_RETURN_HOOK(th, klass, id) \
59 RUBY_DTRACE_HOOK(METHOD_RETURN, th, klass, id)
61 #define RUBY_DTRACE_CMETHOD_ENTRY_HOOK(th, klass, id) \
62 RUBY_DTRACE_HOOK(CMETHOD_ENTRY, th, klass, id)
64 #define RUBY_DTRACE_CMETHOD_RETURN_HOOK(th, klass, id) \
65 RUBY_DTRACE_HOOK(CMETHOD_RETURN, th, klass, id)
VALUE rb_class_path_no_cache(VALUE _klass)