func TestLinkgetlineFromPos(t *testing.T) {
ctxt := new(Link)
- ctxt.hash = make(map[SymVer]*LSym)
+ ctxt.hash = make(map[string]*LSym)
+ ctxt.vhash = make(map[string]*LSym)
afile := src.NewFileBase("a.go", "a.go")
bfile := src.NewFileBase("b.go", "/foo/bar/b.go")
Flag_optimize bool
Bso *bufio.Writer
Pathname string
- hash map[SymVer]*LSym
+ hash map[string]*LSym // name -> sym mapping for version == 0
+ vhash map[string]*LSym // name -> sym mapping for version == 1
PosTable src.PosTable
InlTree InlTree // global inlining tree used by gc/inl.go
Imports []string
}
}
-type SymVer struct {
- Name string
- Version int // TODO: make int16 to match LSym.Version?
-}
-
// LinkArch is the definition of a single architecture.
type LinkArch struct {
*sys.Arch
func Linknew(arch *LinkArch) *Link {
ctxt := new(Link)
- ctxt.hash = make(map[SymVer]*LSym)
+ ctxt.hash = make(map[string]*LSym)
+ ctxt.vhash = make(map[string]*LSym)
ctxt.Arch = arch
ctxt.Pathname = objabi.WorkingDir()
// LookupInit looks up the symbol with name name and version v.
// If it does not exist, it creates it and passes it to initfn for one-time initialization.
func (ctxt *Link) LookupInit(name string, v int, init func(s *LSym)) *LSym {
- s := ctxt.hash[SymVer{name, v}]
- if s != nil {
+ var m map[string]*LSym
+ switch v {
+ case 0:
+ m = ctxt.hash
+ case 1:
+ m = ctxt.vhash
+ default:
+ ctxt.Diag("LookupInit: bad version %d", v)
+ }
+ if s := m[name]; s != nil {
return s
}
- s = &LSym{Name: name, Version: int16(v)}
- ctxt.hash[SymVer{name, v}] = s
+ s := &LSym{Name: name, Version: int16(v)}
+ m[name] = s
if init != nil {
init(s)
}