Module: Kernel

Defined in:
(unknown)

Instance Method Summary collapse

Instance Method Details

#callsite_hashObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'ext/callsite_hash.c', line 32

static VALUE rb_f_callsite(VALUE obj) {
  struct FRAME *frame = ruby_frame;
  NODE *n;
  int csite = 0;
  int files = 0;

  if (frame->last_func == ID_ALLOCATOR) frame = frame->prev;

  ruby_set_current_source();
  if (ruby_sourcefile) csite += strhash(ruby_sourcefile);
  csite += frame->last_func + ruby_sourceline; 

  for (; frame && (n = frame->node) && files < 10; frame = frame->prev) {
    if (frame->prev && frame->prev->last_func) {
      if (frame->prev->node == n) {
        if (frame->prev->last_func == frame->last_func) continue;
      }
      csite += frame->prev->last_func;
    }
    if (n->nd_file) {
      csite += strhash(n->nd_file);
      files++;
    } 
    csite += nd_line(n);
  }

  return INT2FIX(csite);
}