bind/package: add lookup function

This commit is contained in:
Sebastien Binet 2015-07-28 14:41:53 +02:00
parent bbb9499368
commit a9624ab5da
1 changed files with 21 additions and 4 deletions

View File

@ -26,8 +26,9 @@ type Package struct {
// NewPackage creates a new Package, tying types.Package and ast.Package together.
func NewPackage(pkg *types.Package, doc *doc.Package) (*Package, error) {
p := &Package{
pkg: pkg,
doc: doc,
pkg: pkg,
doc: doc,
objs: map[string]Object{},
}
err := p.process()
if err != nil {
@ -211,11 +212,11 @@ func (p *Package) process() error {
}
s.meths = append(s.meths, m)
}
p.structs = append(p.structs, s)
p.addStruct(s)
}
for _, fct := range funcs {
p.funcs = append(p.funcs, fct)
p.addFunc(fct)
}
return err
@ -231,6 +232,22 @@ func (p *Package) addVar(obj *types.Var) {
panic(fmt.Errorf("not yet supported: %v (%T)", obj, obj))
}
func (p *Package) addStruct(s Struct) {
p.structs = append(p.structs, s)
p.objs[s.GoName()] = s
}
func (p *Package) addFunc(f Func) {
p.funcs = append(p.funcs, f)
p.objs[f.GoName()] = f
}
// Lookup returns the bind.Object corresponding to a types.Object
func (p *Package) Lookup(o types.Object) (Object, bool) {
obj, ok := p.objs[o.Name()]
return obj, ok
}
// Struct collects informations about a go struct.
type Struct struct {
pkg *Package