// isPackageLevel reports whether obj is a package-level object. func isPackageLevel(obj types.Object) bool { // TODO(adonovan): fix go/types bug: // obj.Parent().Parent() == obj.Pkg().Scope() // doesn't work because obj.Parent() gets mutated during // dot-imports. return obj.Pkg().Scope().Lookup(obj.Name()) == obj }
// packageLevelValue returns the package-level value corresponding to // the specified named object, which may be a package-level const // (*Const), var (*Global) or func (*Function) of some package in // prog. It returns nil if the object is not found. // func (prog *Program) packageLevelValue(obj types.Object) Value { if pkg, ok := prog.packages[obj.Pkg()]; ok { return pkg.values[obj] } return nil }