Class: Rubinius::Coverage
- Inherits:
-
Object
- Object
- Rubinius::Coverage
- Defined in:
- lib/rubinius/coverage.rb,
lib/rubinius/coverage/version.rb
Defined Under Namespace
Classes: CFG
Constant Summary collapse
- VERSION =
"2.1"
Instance Method Summary collapse
- #coverage(code) ⇒ Object
- #result ⇒ Object
-
#start ⇒ Object
Coverage methods.
Instance Method Details
#coverage(code) ⇒ Object
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
# 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 ⇒ Object
172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# 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 ⇒ Object
Coverage methods
142 143 144 145 146 |
# File 'lib/rubinius/coverage.rb', line 142 def start ObjectSpace.each_object(Rubinius::CallSite) { |cs| cs.reset } nil end |