Sha256: 6f31066dcfd5f58d5d29bcb9465fadb704ce96a214ee0083192b774a84d6dc21

Contents?: true

Size: 1.77 KB

Versions: 6

Compression:

Stored size: 1.77 KB

Contents

#include <ruby.h>
#include <ruby/debug.h>

#include "sidecar.h"
#include "event_producer.h"
#include "event_store.h"
#include "current_trace.h"
#include "trace.h"
#include "configuration.h"

static rb_event_flag_t traced_events() {
  VALUE main_module = rb_const_get(rb_cObject, rb_intern("StackTrace"));

  rb_event_flag_t events = 0;

  VALUE configuration = rb_funcall(main_module, rb_intern("configuration"), 0);
  VALUE trace_ruby = rb_funcall(configuration, rb_intern("trace_ruby"), 0);
  VALUE trace_c = rb_funcall(configuration, rb_intern("trace_c"), 0);

  if(RTEST(trace_ruby)) events |= RUBY_EVENT_CALL | RUBY_EVENT_RETURN;
  if(RTEST(trace_c)) events |= RUBY_EVENT_C_CALL | RUBY_EVENT_C_RETURN;
  if(events != 0) events |= RUBY_EVENT_RAISE;

  return events;
}

VALUE rb_trace_point(VALUE self) {
  VALUE tracePoint = rb_iv_get(self, "@trace_point");

  if(NIL_P(tracePoint)) {
    tracePoint = rb_tracepoint_new(Qnil, traced_events(), create_event, NULL);
    rb_iv_set(self, "@trace_point", tracePoint);
  }

  return tracePoint;
}

void Init_stack_trace() {
  rb_ext_ractor_safe(true);

  VALUE main_module = rb_const_get(rb_cObject, rb_intern("StackTrace"));
  VALUE configuration_class = rb_const_get(main_module, rb_intern("Configuration"));

  rb_define_singleton_method(main_module, "trace_point", rb_trace_point, 0);
  rb_define_singleton_method(main_module, "start_trace", rb_create_trace, 0);
  rb_define_singleton_method(main_module, "complete_trace", rb_send_eot, 0);
  rb_define_singleton_method(main_module, "current", rb_get_current_trace, 0);

  rb_define_method(configuration_class, "inspect_return_values=", rb_set_inspect_return_values, 1);
  rb_define_method(configuration_class, "inspect_arguments=", rb_set_inspect_arguments, 1);

  Init_event_store();
  Init_sidecar();
}

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
stack_trace-0.8.0 ext/stack_trace/stack_trace.c
stack_trace-0.7.0 ext/stack_trace/stack_trace.c
stack_trace-0.6.0 ext/stack_trace/stack_trace.c
stack_trace-0.5.0 ext/stack_trace/stack_trace.c
stack_trace-0.4.0 ext/stack_trace/stack_trace.c
stack_trace-0.3.0 ext/stack_trace/stack_trace.c