function collectSourceFileData($sourcefile) { $all_lines = array(); $this->getTouchedLines($sourcefile, $all_lines); foreach ($this->getObjectFiles() as $objfile) { DwarfLineInfo::loadObject($objfile); } $exe_lines = DwarfLineInfo::mergedSourceLines($sourcefile); $max_line = max($exe_lines); /* now build a string containing the coverage info. * This is compatible with ArcanistUnitTestResult coverage data: * N not executable * C covered * U uncovered * X unreachable (we can't detect that here) */ $cov = str_repeat('N', $max_line); for ($i = 1; $i <= $max_line; $i++) { if (isset($all_lines[$i])) { $cov[$i - 1] = 'C'; } else { if (isset($exe_lines[$i])) { $cov[$i - 1] = 'U'; } } } return $cov; }