From 78cf46078e8de57c84807111938173afcb4bcf73 Mon Sep 17 00:00:00 2001 From: mame Date: Thu, 14 Sep 2017 05:12:34 +0000 Subject: Add method coverage git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- compile.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'compile.c') diff --git a/compile.c b/compile.c index 0c317d4488..026eb3b18a 100644 --- a/compile.c +++ b/compile.c @@ -277,6 +277,19 @@ struct iseq_compile_data_ensure_node_stack { ADD_INSN2((seq), (line), trace2, INT2FIX(RUBY_EVENT_COVERAGE), INT2FIX(counter_idx * 16 + COVERAGE_INDEX_BRANCHES)); \ } \ } while (0) +#define ADD_TRACE_METHOD_COVERAGE(seq, line, method_name) \ + do { \ + if (ISEQ_COVERAGE(iseq) && \ + ISEQ_METHOD_COVERAGE(iseq) && \ + (line) > 0) { \ + VALUE methods = ISEQ_METHOD_COVERAGE(iseq); \ + long counter_idx = RARRAY_LEN(methods) / 3; \ + rb_ary_push(methods, ID2SYM(method_name)); \ + rb_ary_push(methods, INT2FIX(line)); \ + rb_ary_push(methods, INT2FIX(0)); \ + ADD_INSN2((seq), (line), trace2, INT2FIX(RUBY_EVENT_COVERAGE), INT2FIX(counter_idx * 16 + COVERAGE_INDEX_METHODS)); \ + } \ + } while (0) #define ADD_TRACE(seq, line, event) \ do { \ @@ -637,6 +650,7 @@ rb_iseq_compile_node(rb_iseq_t *iseq, NODE *node) case ISEQ_TYPE_METHOD: { ADD_TRACE(ret, FIX2INT(iseq->body->location.first_lineno), RUBY_EVENT_CALL); + ADD_TRACE_METHOD_COVERAGE(ret, FIX2INT(iseq->body->location.first_lineno), rb_intern_str(iseq->body->location.label)); CHECK(COMPILE(ret, "scoped node", node->nd_body)); ADD_TRACE(ret, nd_line(node), RUBY_EVENT_RETURN); break; -- cgit v1.2.3