From e0bf0374ca11e4a51315500a5b08cda492eb715b Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9my=20Oudompheng?= Date: Wed, 9 Jan 2013 22:03:41 +0100 Subject: [PATCH] go/types: don't parse imported packages multiple times. R=dave, golang-dev, rsc CC=golang-dev https://golang.org/cl/7068044 --- src/pkg/go/types/check.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/pkg/go/types/check.go b/src/pkg/go/types/check.go index 10b67bcab9..cebba7abf5 100644 --- a/src/pkg/go/types/check.go +++ b/src/pkg/go/types/check.go @@ -393,7 +393,18 @@ func check(ctxt *Context, fset *token.FileSet, files map[string]*ast.File) (pkg // resolve identifiers imp := ctxt.Import if imp == nil { - imp = GcImport + // wrap GcImport to import packages only once by default. + imported := make(map[string]bool) + imp = func(imports map[string]*ast.Object, path string) (*ast.Object, error) { + if imported[path] && imports[path] != nil { + return imports[path], nil + } + pkg, err := GcImport(imports, path) + if err == nil { + imported[path] = true + } + return pkg, err + } } pkg, err = ast.NewPackage(fset, files, imp, Universe) if err != nil { -- 2.48.1