diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2019-05-26 14:05:34 +0200 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2019-05-29 14:58:40 +0200 |
| commit | f5a25d38ac7d97da62dafe2c809672e89f40aa25 (patch) | |
| tree | 414326b06028219a50c4c0bdd4ea1b6feed48267 | |
| parent | 59a32682c0fd52c0d7a2cd9db0aac63a9e890825 (diff) | |
pkg/cover: factor out common code into combinePrefix
Combining of prefixes is now repeated in 2 places.
Factor it out into a common function.
| -rw-r--r-- | pkg/cover/report.go | 33 |
1 files changed, 14 insertions, 19 deletions
diff --git a/pkg/cover/report.go b/pkg/cover/report.go index 3f00f75da..a85b091d6 100644 --- a/pkg/cover/report.go +++ b/pkg/cover/report.go @@ -55,14 +55,13 @@ func MakeReportGenerator(vmlinux, srcDir, arch string) (*ReportGenerator, error) } func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error { - var prefix string if len(pcs) == 0 { return fmt.Errorf("no coverage data available") } for i, pc := range pcs { pcs[i] = PreviousInstructionPC(rg.arch, pc) } - covered, prefix1, err := rg.symbolize(pcs) + covered, prefix, err := rg.symbolize(pcs) if err != nil { return err } @@ -74,16 +73,8 @@ func (rg *ReportGenerator) Do(w io.Writer, pcs []uint64) error { if err != nil { return err } - if len(uncoveredPCs) == 0 { - prefix = prefix1 - } else { - i := 0 - for ; i < len(prefix1) && i < len(prefix2); i++ { - if prefix1[i] != prefix2[i] { - break - } - } - prefix = prefix1[:i] + if len(uncoveredPCs) != 0 { + prefix = combinePrefix(prefix, prefix2) } return rg.generate(w, prefix, covered, uncovered) } @@ -244,13 +235,7 @@ func (rg *ReportGenerator) symbolize(pcs []uint64) ([]symbolizer.Frame, string, if prefix == "" { prefix = frame.File } else { - i := 0 - for ; i < len(prefix) && i < len(frame.File); i++ { - if prefix[i] != frame.File[i] { - break - } - } - prefix = prefix[:i] + prefix = combinePrefix(prefix, frame.File) if prefix == "" { break } @@ -259,6 +244,16 @@ func (rg *ReportGenerator) symbolize(pcs []uint64) ([]symbolizer.Frame, string, return frames, prefix, nil } +func combinePrefix(prefix, prefix2 string) string { + i := 0 + for ; i < len(prefix) && i < len(prefix2); i++ { + if prefix[i] != prefix2[i] { + break + } + } + return prefix[:i] +} + func parseFile(fn string) ([][]byte, error) { data, err := ioutil.ReadFile(fn) if err != nil { |
