18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'ext/callsite_hash.c', line 18
static VALUE rb_f_callsite(VALUE obj) {
struct FRAME *frame = ruby_frame;
NODE *n;
int csite = 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); 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);
csite += nd_line(n);
}
return INT2FIX(csite);
}
|