diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 05:12:34 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-09-14 05:12:34 +0000 |
commit | 78cf46078e8de57c84807111938173afcb4bcf73 (patch) | |
tree | 3a49a247b3763fc9b32264d5f68163282acc14ef /thread.c | |
parent | a5641cdf7a6ef8ed86209080775fa866a360d346 (diff) | |
download | ruby-78cf46078e8de57c84807111938173afcb4bcf73.tar.gz |
Add method coverage
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'thread.c')
-rw-r--r-- | thread.c | 28 |
1 files changed, 27 insertions, 1 deletions
@@ -4094,6 +4094,7 @@ clear_coverage_i(st_data_t key, st_data_t val, st_data_t dummy) VALUE coverage = (VALUE)val; VALUE lines = RARRAY_AREF(coverage, COVERAGE_INDEX_LINES); VALUE branches = RARRAY_AREF(coverage, COVERAGE_INDEX_BRANCHES); + VALUE methods = RARRAY_AREF(coverage, COVERAGE_INDEX_METHODS); if (lines) { for (i = 0; i < RARRAY_LEN(lines); i++) { @@ -4108,6 +4109,11 @@ clear_coverage_i(st_data_t key, st_data_t val, st_data_t dummy) RARRAY_ASET(counters, i, INT2FIX(0)); } } + if (methods) { + for (i = 2; i < RARRAY_LEN(methods); i += 3) { + RARRAY_ASET(methods, i, INT2FIX(0)); + } + } return ST_CONTINUE; } @@ -5016,6 +5022,19 @@ update_coverage(VALUE data, const rb_trace_arg_t *trace_arg) } break; } + case COVERAGE_INDEX_METHODS: { + VALUE methods = RARRAY_AREF(coverage, COVERAGE_INDEX_METHODS); + if (methods) { + long count; + long idx = arg / 16 * 3 + 2; + VALUE num = RARRAY_AREF(methods, idx); + count = FIX2LONG(num) + 1; + if (POSFIXABLE(count)) { + RARRAY_ASET(methods, idx, LONG2FIX(count)); + } + } + break; + } } } } @@ -5088,7 +5107,14 @@ rb_default_coverage(int n) RARRAY_ASET(coverage, COVERAGE_INDEX_BRANCHES, branches); if (mode & COVERAGE_TARGET_METHODS) { - /* not implemented yet */ + methods = rb_ary_tmp_new(0); + /* internal data structures for method coverage: + * + * [symbol_of_method_name, lineno_of_method_head, counter, + * ...] + * + * Example: [:foobar, 1, 0, ...] + */ } RARRAY_ASET(coverage, COVERAGE_INDEX_METHODS, methods); |