]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/api: internal debugging supprt
authorRobert Griesemer <gri@golang.org>
Mon, 15 Sep 2014 23:40:43 +0000 (16:40 -0700)
committerRobert Griesemer <gri@golang.org>
Mon, 15 Sep 2014 23:40:43 +0000 (16:40 -0700)
Document that the package cache has
an issue (8425) to speed up future
debugging.

LGTM=rsc
R=rsc
CC=golang-codereviews
https://golang.org/cl/143980043

src/cmd/api/goapi.go

index da0dc4a92319a582021a80061190f856779d4067..8494a3f61bdcb8a43fc882d0278889e3b86913fe 100644 (file)
@@ -450,6 +450,11 @@ func contains(list []string, s string) bool {
        return false
 }
 
+// The package cache doesn't operate correctly in rare (so far artificial)
+// circumstances (issue 8425). Disable before debugging non-obvious errors
+// from the type-checker.
+const usePkgCache = true
+
 var (
        pkgCache = map[string]*types.Package{} // map tagKey to package
        pkgTags  = map[string][]string{}       // map import dir to list of relevant tags
@@ -511,11 +516,13 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
        // If we've already done an import with the same set
        // of relevant tags, reuse the result.
        var key string
-       if tags, ok := pkgTags[dir]; ok {
-               key = tagKey(dir, context, tags)
-               if pkg := pkgCache[key]; pkg != nil {
-                       w.imported[name] = pkg
-                       return pkg
+       if usePkgCache {
+               if tags, ok := pkgTags[dir]; ok {
+                       key = tagKey(dir, context, tags)
+                       if pkg := pkgCache[key]; pkg != nil {
+                               w.imported[name] = pkg
+                               return pkg
+                       }
                }
        }
 
@@ -528,9 +535,11 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
        }
 
        // Save tags list first time we see a directory.
-       if _, ok := pkgTags[dir]; !ok {
-               pkgTags[dir] = info.AllTags
-               key = tagKey(dir, context, info.AllTags)
+       if usePkgCache {
+               if _, ok := pkgTags[dir]; !ok {
+                       pkgTags[dir] = info.AllTags
+                       key = tagKey(dir, context, info.AllTags)
+               }
        }
 
        filenames := append(append([]string{}, info.GoFiles...), info.CgoFiles...)
@@ -583,7 +592,9 @@ func (w *Walker) Import(name string) (pkg *types.Package) {
                log.Fatalf("error typechecking package %s: %s (%s)", name, err, ctxt)
        }
 
-       pkgCache[key] = pkg
+       if usePkgCache {
+               pkgCache[key] = pkg
+       }
 
        w.imported[name] = pkg
        return