// verify that we can read the copied export data back in
// (use empty package map to avoid collisions)
- savedPkgMap := pkgMap
- savedPkgs := pkgs
- pkgMap = make(map[string]*types.Pkg)
- pkgs = nil
- Import(mkpkg(""), bufio.NewReader(©)) // must not die
- pkgs = savedPkgs
- pkgMap = savedPkgMap
+ savedPkgMap := types.PkgMap
+ savedPkgs := types.PkgList
+ types.PkgMap = make(map[string]*types.Pkg)
+ types.PkgList = nil
+ Import(types.NewPkg(""), bufio.NewReader(©)) // must not die
+ types.PkgList = savedPkgs
+ types.PkgMap = savedPkgMap
} else {
size = export(bout.Writer, Debug_export != 0)
}
Ctxt.DiagFunc = yyerror
Ctxt.Bso = bufio.NewWriter(os.Stdout)
- localpkg = mkpkg("")
+ localpkg = types.NewPkg("")
localpkg.Prefix = "\"\""
// pseudo-package, for scoping
- builtinpkg = mkpkg("go.builtin")
+ builtinpkg = types.NewPkg("go.builtin")
builtinpkg.Prefix = "go.builtin" // not go%2ebuiltin
// pseudo-package, accessed by import "unsafe"
- unsafepkg = mkpkg("unsafe")
+ unsafepkg = types.NewPkg("unsafe")
unsafepkg.Name = "unsafe"
// Pseudo-package that contains the compiler's builtin
// separate package to avoid conflicts with package runtime's
// actual declarations, which may differ intentionally but
// insignificantly.
- Runtimepkg = mkpkg("go.runtime")
+ Runtimepkg = types.NewPkg("go.runtime")
Runtimepkg.Name = "runtime"
Runtimepkg.Prefix = "runtime"
// pseudo-packages used in symbol tables
- itabpkg = mkpkg("go.itab")
+ itabpkg = types.NewPkg("go.itab")
itabpkg.Name = "go.itab"
itabpkg.Prefix = "go.itab" // not go%2eitab
- itablinkpkg = mkpkg("go.itablink")
+ itablinkpkg = types.NewPkg("go.itablink")
itablinkpkg.Name = "go.itablink"
itablinkpkg.Prefix = "go.itablink" // not go%2eitablink
- trackpkg = mkpkg("go.track")
+ trackpkg = types.NewPkg("go.track")
trackpkg.Name = "go.track"
trackpkg.Prefix = "go.track" // not go%2etrack
- typepkg = mkpkg("type")
+ typepkg = types.NewPkg("type")
typepkg.Name = "type"
// pseudo-package used for map zero values
- mappkg = mkpkg("go.map")
+ mappkg = types.NewPkg("go.map")
mappkg.Name = "go.map"
mappkg.Prefix = "go.map"
startProfile()
if flag_race {
- racepkg = mkpkg("runtime/race")
+ racepkg = types.NewPkg("runtime/race")
racepkg.Name = "race"
}
if flag_msan {
- msanpkg = mkpkg("runtime/msan")
+ msanpkg = types.NewPkg("runtime/msan")
msanpkg.Name = "msan"
}
if flag_race && flag_msan {
errorexit()
}
- importpkg := mkpkg(path_)
+ importpkg := types.NewPkg(path_)
if importpkg.Imported {
return importpkg
}
return nil
}
-var pkgMap = make(map[string]*types.Pkg)
-var pkgs []*types.Pkg
-
-func mkpkg(path string) *types.Pkg {
- if p := pkgMap[path]; p != nil {
- return p
- }
-
- p := new(types.Pkg)
- p.Path = path
- p.Prefix = objabi.PathToPrefix(path)
- p.Syms = make(map[string]*types.Sym)
- pkgMap[path] = p
- pkgs = append(pkgs, p)
- return p
-}
-
// The result of addinit MUST be assigned back to n, e.g.
// n.Left = addinit(n.Left, init)
func addinit(n *Node, init []*Node) *Node {
package types
-import "cmd/internal/obj"
+import (
+ "cmd/internal/obj"
+ "cmd/internal/objabi"
+)
type Pkg struct {
Name string // package name, e.g. "sys"
Syms map[string]*Sym
}
+var PkgMap = make(map[string]*Pkg)
+var PkgList []*Pkg
+
+func NewPkg(path string) *Pkg {
+ if p := PkgMap[path]; p != nil {
+ return p
+ }
+
+ p := new(Pkg)
+ p.Path = path
+ p.Prefix = objabi.PathToPrefix(path)
+ p.Syms = make(map[string]*Sym)
+ PkgMap[path] = p
+ PkgList = append(PkgList, p)
+ return p
+}
+
var Nopkg = &Pkg{
Syms: make(map[string]*Sym),
}