func (c *funcContext) objectName(o types.Object) string { if o.Pkg() != c.p.pkg || o.Parent() == c.p.pkg.Scope() { c.p.dependencies[o] = true } if o.Pkg() != c.p.pkg { pkgVar, found := c.p.pkgVars[o.Pkg().Path()] if !found { pkgVar = fmt.Sprintf(`go$packages["%s"]`, o.Pkg().Path()) } return pkgVar + "." + o.Name() } name, found := c.p.objectVars[o] if !found { name = c.newVariable(o.Name()) c.p.objectVars[o] = name } switch o.(type) { case *types.Var, *types.Const: if o.Exported() && o.Parent() == c.p.pkg.Scope() { return "go$pkg." + name } } return name }
// isLocal reports whether obj is local to some function. // Precondition: not a struct field or interface method. func isLocal(obj types.Object) bool { // [... 5=stmt 4=func 3=file 2=pkg 1=universe] var depth int for scope := obj.Parent(); scope != nil; scope = scope.Parent() { depth++ } return depth >= 4 }
func (c *PkgContext) objectName(o types.Object) string { if o.Pkg() != nil && o.Pkg() != c.pkg { pkgVar, found := c.pkgVars[o.Pkg().Path()] if !found { pkgVar = fmt.Sprintf(`Go$packages["%s"]`, o.Pkg().Path()) } return pkgVar + "." + o.Name() } name, found := c.objectVars[o] if !found { name = c.newVariable(o.Name()) c.objectVars[o] = name } switch o.(type) { case *types.Var, *types.Const: if o.Parent() == c.pkg.Scope() { return "Go$pkg." + name } } return name }
func isGlobalObject(obj types.Object) bool { pkg := obj.Pkg() return pkg == nil || obj.Parent() == pkg.Scope() }
func (gtc *GTC) isGlobal(o types.Object) bool { return !gtc.isImported(o) && o.Parent() == gtc.pkg.Scope() }