Module: Calleree

Defined in:
lib/calleree.rb,
lib/calleree/version.rb,
ext/calleree/calleree.c

Constant Summary collapse

VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

._start ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
# File 'ext/calleree/calleree.c', line 71

static VALUE
eree_start(VALUE self)
{
    if (!eree_data.tp) {
        eree_data.tp = rb_tracepoint_new(0, RUBY_EVENT_CALL, eree_called, &eree_data);
        rb_gc_register_mark_object(eree_data.tp);
        eree_data.caller_callee = st_init_numtable();
    }
    rb_tracepoint_enable(eree_data.tp);
    return self;
}

._stop ⇒ Object



83
84
85
86
87
88
89
90
# File 'ext/calleree/calleree.c', line 83

static VALUE
eree_stop(VALUE self)
{
    if (eree_data.tp) {
        rb_tracepoint_disable(eree_data.tp);
    }
    return self;
}

.raw_posmap ⇒ Object



129
130
131
132
133
# File 'ext/calleree/calleree.c', line 129

static VALUE
eree_raw_posmap(VALUE self)
{
    return eree_data.files;
}

.raw_result(clear_p) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
126
# File 'ext/calleree/calleree.c', line 114

static VALUE
eree_raw_result(VALUE self, VALUE clear_p)
{
    VALUE ary = rb_ary_new();
    if (eree_data.tp) {
        st_foreach(eree_data.caller_callee, raw_result_i, (st_data_t)ary);

        if (RTEST(clear_p)) {
            st_clear(eree_data.caller_callee);
        }
    }
    return ary;
}

.result(clear: false) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/calleree.rb', line 22

def self.result clear: false
  if respond_to? :raw_posmap
    posnum_set = []
    Calleree.raw_posmap.each{|file, lines|
      lines.each_with_index{|posnum, line|
        posnum_set[posnum] = [file, line] if posnum
      }
    }
    # pp posnum_set
    rs = []
    Calleree.raw_result(clear).each{|i, j, cnt|
      er = posnum_set[i]
      ee = posnum_set[j]
      rs << [er, ee, cnt] if er && ee
    }
    rs
  else
    # USE_LOCINDEX version
    Calleree.raw_result(clear)
  end
end

.start ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/calleree.rb', line 5

def self.start
  if block_given?
    begin
      Calleree._start
      yield
    ensure
      Calleree._stop
    end
  else
    Calleree._start
  end
end

.stop ⇒ Object



18
19
20
# File 'lib/calleree.rb', line 18

def self.stop
  Calleree._stop
end