* include/ruby/intern.h: remove prototypes about coverage.
* iseq.c (prepare_iseq_build): add prototype. * parse.y (coverage): ditto. * thread.c (clear_coverage): ditto. * thread.c (update_coverage): use rb_sourceline. * thread.c (rb_get_coverages): rename and move to vm.c. * vm.c (rb_vm_get_coverages): ditto. * ext/coverage/coverage.c: add rdoc. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
da1263d2ac
commit
ae3a03eb07
18
ChangeLog
18
ChangeLog
@ -1,3 +1,21 @@
|
|||||||
|
Thu Jul 3 23:26:36 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
|
* include/ruby/intern.h: remove prototypes about coverage.
|
||||||
|
|
||||||
|
* iseq.c (prepare_iseq_build): add prototype.
|
||||||
|
|
||||||
|
* parse.y (coverage): ditto.
|
||||||
|
|
||||||
|
* thread.c (clear_coverage): ditto.
|
||||||
|
|
||||||
|
* thread.c (update_coverage): use rb_sourceline.
|
||||||
|
|
||||||
|
* thread.c (rb_get_coverages): rename and move to vm.c.
|
||||||
|
|
||||||
|
* vm.c (rb_vm_get_coverages): ditto.
|
||||||
|
|
||||||
|
* ext/coverage/coverage.c: add rdoc.
|
||||||
|
|
||||||
Thu Jul 3 21:51:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
Thu Jul 3 21:51:21 2008 Yusuke Endoh <mame@tsg.ne.jp>
|
||||||
|
|
||||||
* ext/coverage/coverage.c, ext/coverage/extconf.rb: eliminate
|
* ext/coverage/coverage.c, ext/coverage/extconf.rb: eliminate
|
||||||
|
@ -1,11 +1,47 @@
|
|||||||
|
/************************************************
|
||||||
|
|
||||||
|
coverage.c -
|
||||||
|
|
||||||
|
$Author: $
|
||||||
|
|
||||||
|
Copyright (c) 2008 Yusuke Endoh
|
||||||
|
|
||||||
|
************************************************/
|
||||||
|
|
||||||
#include "ruby.h"
|
#include "ruby.h"
|
||||||
|
|
||||||
VALUE rb_mCoverage;
|
extern void rb_enable_coverages(void);
|
||||||
|
|
||||||
|
/* Coverage provides coverage measurement feature for Ruby.
|
||||||
|
*
|
||||||
|
* = Usage
|
||||||
|
*
|
||||||
|
* (1) require "coverage.so"
|
||||||
|
* (2) require or load Ruby source file
|
||||||
|
* (3) Coverage.result will return a hash that contains filename as key and
|
||||||
|
* coverage array as value.
|
||||||
|
*
|
||||||
|
* = Example
|
||||||
|
*
|
||||||
|
* [foo.rb]
|
||||||
|
* s = 0
|
||||||
|
* 10.times do |x|
|
||||||
|
* s += x
|
||||||
|
* end
|
||||||
|
*
|
||||||
|
* if s == 45
|
||||||
|
* p :ok
|
||||||
|
* else
|
||||||
|
* p :ng
|
||||||
|
* end
|
||||||
|
* [EOF]
|
||||||
|
*
|
||||||
|
* require "coverage.so"
|
||||||
|
* require "foo.rb"
|
||||||
|
* p COVERAGE__ #=> {"foo.rb"=>[1, 1, 10, nil, nil, 1, 1, nil, 0, nil]}
|
||||||
|
*/
|
||||||
void
|
void
|
||||||
Init_coverage(void)
|
Init_coverage(void)
|
||||||
{
|
{
|
||||||
rb_enable_coverages();
|
rb_enable_coverages();
|
||||||
rb_mCoverage = rb_define_module("Coverage");
|
|
||||||
rb_define_module_function(rb_mCoverage, "result", rb_get_coverages, 0);
|
|
||||||
}
|
}
|
||||||
|
@ -626,8 +626,6 @@ VALUE rb_mutex_synchronize(VALUE self);
|
|||||||
VALUE rb_barrier_new(void);
|
VALUE rb_barrier_new(void);
|
||||||
VALUE rb_barrier_wait(VALUE self);
|
VALUE rb_barrier_wait(VALUE self);
|
||||||
VALUE rb_barrier_release(VALUE self);
|
VALUE rb_barrier_release(VALUE self);
|
||||||
VALUE rb_get_coverages(void);
|
|
||||||
void rb_enable_coverages(void);
|
|
||||||
/* time.c */
|
/* time.c */
|
||||||
VALUE rb_time_new(time_t, long);
|
VALUE rb_time_new(time_t, long);
|
||||||
VALUE rb_time_nano_new(time_t, long);
|
VALUE rb_time_nano_new(time_t, long);
|
||||||
|
3
iseq.c
3
iseq.c
@ -194,7 +194,8 @@ prepare_iseq_build(rb_iseq_t *iseq,
|
|||||||
|
|
||||||
iseq->coverage = Qfalse;
|
iseq->coverage = Qfalse;
|
||||||
if (!GET_THREAD()->parse_in_eval) {
|
if (!GET_THREAD()->parse_in_eval) {
|
||||||
VALUE coverages = rb_get_coverages();
|
extern VALUE rb_vm_get_coverages(void);
|
||||||
|
VALUE coverages = rb_vm_get_coverages();
|
||||||
if (RTEST(coverages)) {
|
if (RTEST(coverages)) {
|
||||||
iseq->coverage = rb_hash_aref(coverages, filename);
|
iseq->coverage = rb_hash_aref(coverages, filename);
|
||||||
if (NIL_P(iseq->coverage)) iseq->coverage = Qfalse;
|
if (NIL_P(iseq->coverage)) iseq->coverage = Qfalse;
|
||||||
|
3
parse.y
3
parse.y
@ -4672,7 +4672,8 @@ debug_lines(const char *f)
|
|||||||
static VALUE
|
static VALUE
|
||||||
coverage(const char *f, int n)
|
coverage(const char *f, int n)
|
||||||
{
|
{
|
||||||
VALUE coverages = rb_get_coverages();
|
extern VALUE rb_vm_get_coverages(void);
|
||||||
|
VALUE coverages = rb_vm_get_coverages();
|
||||||
if (RTEST(coverages)) {
|
if (RTEST(coverages)) {
|
||||||
VALUE fname = rb_str_new2(f);
|
VALUE fname = rb_str_new2(f);
|
||||||
VALUE lines = rb_ary_new2(n);
|
VALUE lines = rb_ary_new2(n);
|
||||||
|
19
thread.c
19
thread.c
@ -2116,7 +2116,8 @@ clear_coverage_i(st_data_t key, st_data_t val, st_data_t dummy)
|
|||||||
static void
|
static void
|
||||||
clear_coverage(void)
|
clear_coverage(void)
|
||||||
{
|
{
|
||||||
VALUE coverages = rb_get_coverages();
|
extern VALUE rb_vm_get_coverages(void);
|
||||||
|
VALUE coverages = rb_vm_get_coverages();
|
||||||
if (RTEST(coverages)) {
|
if (RTEST(coverages)) {
|
||||||
st_foreach(RHASH_TBL(coverages), clear_coverage_i, 0);
|
st_foreach(RHASH_TBL(coverages), clear_coverage_i, 0);
|
||||||
}
|
}
|
||||||
@ -3529,19 +3530,12 @@ rb_check_deadlock(rb_vm_t *vm)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VALUE
|
|
||||||
rb_get_coverages(void)
|
|
||||||
{
|
|
||||||
return GET_VM()->coverages;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
update_coverage(rb_event_flag_t event, VALUE proc, VALUE self, ID id, VALUE klass)
|
update_coverage(rb_event_flag_t event, VALUE proc, VALUE self, ID id, VALUE klass)
|
||||||
{
|
{
|
||||||
rb_control_frame_t *cfp = GET_THREAD()->cfp;
|
VALUE coverage = GET_THREAD()->cfp->iseq->coverage;
|
||||||
VALUE coverage = cfp->iseq->coverage;
|
|
||||||
if (coverage) {
|
if (coverage) {
|
||||||
long line = vm_get_sourceline(cfp) - 1;
|
long line = rb_sourceline() - 1;
|
||||||
long count;
|
long count;
|
||||||
if (RARRAY_PTR(coverage)[line] == Qnil) {
|
if (RARRAY_PTR(coverage)[line] == Qnil) {
|
||||||
rb_bug("bug");
|
rb_bug("bug");
|
||||||
@ -3556,8 +3550,13 @@ update_coverage(rb_event_flag_t event, VALUE proc, VALUE self, ID id, VALUE klas
|
|||||||
void
|
void
|
||||||
rb_enable_coverages(void)
|
rb_enable_coverages(void)
|
||||||
{
|
{
|
||||||
|
VALUE rb_mCoverage;
|
||||||
|
|
||||||
if (!RTEST(GET_VM()->coverages)) {
|
if (!RTEST(GET_VM()->coverages)) {
|
||||||
|
extern VALUE rb_vm_get_coverages(void);
|
||||||
GET_VM()->coverages = rb_hash_new();
|
GET_VM()->coverages = rb_hash_new();
|
||||||
rb_add_event_hook(update_coverage, RUBY_EVENT_COVERAGE, Qnil);
|
rb_add_event_hook(update_coverage, RUBY_EVENT_COVERAGE, Qnil);
|
||||||
|
rb_mCoverage = rb_define_module("Coverage");
|
||||||
|
rb_define_module_function(rb_mCoverage, "result", rb_vm_get_coverages, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user