class Rubinius::Coverage

Constants

VERSION

Public Instance Methods

coverage(code) click to toggle source
# File lib/rubinius/coverage.rb, line 148
def coverage(code)
  call_sites = code.call_sites
  return unless call_sites.any? { |cs| cs.invokes + cs.hits + cs.misses > 0 }

  cfg = CFG.new code, call_sites
  cfg.graph

  counts = {}

  total = code.lines.size
  i = 1

  while i < total
    counts[code.lines[i]] = 0
    i += 2
  end

  cfg.basic_blocks.values.each do |bb|
    bb.lines.each { |l| counts[l] = bb.count }
  end

  counts
end
result() click to toggle source
# File lib/rubinius/coverage.rb, line 172
def result
  code_coverage = Hash.new { |h, k| h[k] = [] }

  ObjectSpace.each_object(Rubinius::CompiledCode) do |code|
    lines = code_coverage[code.file.to_s]
    counts = coverage code
    next unless counts

    counts.each { |line, count| lines[line] = count }
  end

  code_coverage.delete_if { |k, v| v.empty? }
  code_coverage
end
start() click to toggle source

Coverage methods

# File lib/rubinius/coverage.rb, line 142
def start
  ObjectSpace.each_object(Rubinius::CallSite) { |cs| cs.reset }

  nil
end