gocore: fix removal of package paths

They aren't always prefixes.  For instance, map[string]foo/bar.
Do a better job by removing word/ everywhere it appears in a type.

Change-Id: I22d8e00f9eef225dd143cad1db3aa0eeb901ad10
Reviewed-on: https://go-review.googlesource.com/92416
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Peter Weinberger <pjw@google.com>
diff --git a/gocore/dwarf.go b/gocore/dwarf.go
index 6aa0fdd..57b389e 100644
--- a/gocore/dwarf.go
+++ b/gocore/dwarf.go
@@ -7,6 +7,7 @@
 import (
 	"debug/dwarf"
 	"fmt"
+	"regexp"
 	"sort"
 	"strings"
 
@@ -299,13 +300,17 @@
 		return s
 	default:
 		name := dt.String()
-		if i := strings.LastIndex(name, "/"); i >= 0 {
-			name = name[i+1:] // Runtime uses only last name in package path.
-		}
-		return name
+		// The runtime uses just package names. DWARF uses whole package paths.
+		// To convert from the latter to the former, get rid of the package paths.
+		// Examples:
+		//   text/template.Template -> template.Template
+		//   map[string]compress/gzip.Writer -> map[string]gzip.Writer
+		return strings.Join(pathRegexp.Split(name, -1), "")
 	}
 }
 
+var pathRegexp = regexp.MustCompile("\\w+/")
+
 // readRuntimeConstants populates the p.rtConstants map.
 func (p *Process) readRuntimeConstants() {
 	p.rtConstants = map[string]int64{}