Skip to content

Commit

Permalink
go/types: rename UsesCgo to go115UsesCgo
Browse files Browse the repository at this point in the history
This API and functionality was added late in the Go 1.15 release
cycle, and use within gopls has revealed some shortcomings. It's
possible (but not decided) that we'll want a different API long-term,
so for now this CL renames UsesCgo to a non-exported name to avoid
long-term commitment under the Go 1 compat guarantee.

Updates #16623.
Updates #39072.

Change-Id: I04bc0c161a84adebe43e926df5df406bc794c3db
Reviewed-on: https://go-review.googlesource.com/c/go/+/237417
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Heschi Kreinick <heschi@google.com>
  • Loading branch information
mdempsky committed Jun 10, 2020
1 parent ec177e4 commit 6aadfcd
Show file tree
Hide file tree
Showing 5 changed files with 16 additions and 9 deletions.
1 change: 0 additions & 1 deletion api/go1.15.txt
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ pkg debug/pe, const IMAGE_SUBSYSTEM_XBOX = 14
pkg debug/pe, const IMAGE_SUBSYSTEM_XBOX ideal-int
pkg go/printer, const StdFormat = 16
pkg go/printer, const StdFormat Mode
pkg go/types, type Config struct, UsesCgo bool
pkg math/big, method (*Int) FillBytes([]uint8) []uint8
pkg net, method (*Resolver) LookupIP(context.Context, string, string) ([]IP, error)
pkg net/url, method (*URL) EscapedFragment() string
Expand Down
6 changes: 5 additions & 1 deletion src/go/internal/srcimporter/srcimporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"path/filepath"
"strings"
"sync"
_ "unsafe" // for go:linkname
)

// An Importer provides the context for importing packages from source code.
Expand Down Expand Up @@ -133,7 +134,7 @@ func (p *Importer) ImportFrom(path, srcDir string, mode types.ImportMode) (*type
// build.Context's VFS.
conf.FakeImportC = true
} else {
conf.UsesCgo = true
setUsesCgo(&conf)
file, err := p.cgo(bp)
if err != nil {
return nil, err
Expand Down Expand Up @@ -260,3 +261,6 @@ func (p *Importer) joinPath(elem ...string) string {
}
return filepath.Join(elem...)
}

//go:linkname setUsesCgo go/types.srcimporter_setUsesCgo
func setUsesCgo(conf *types.Config)
10 changes: 7 additions & 3 deletions src/go/types/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ type Config struct {
// Do not use casually!
FakeImportC bool

// If UsesCgo is set, the type checker expects the
// If go115UsesCgo is set, the type checker expects the
// _cgo_gotypes.go file generated by running cmd/cgo to be
// provided as a package source file. Qualified identifiers
// referring to package C will be resolved to cgo-provided
// declarations within _cgo_gotypes.go.
//
// It is an error to set both FakeImportC and UsesCgo.
UsesCgo bool
// It is an error to set both FakeImportC and go115UsesCgo.
go115UsesCgo bool

// If Error != nil, it is called with each error found
// during type checking; err has dynamic type Error.
Expand Down Expand Up @@ -140,6 +140,10 @@ type Config struct {
DisableUnusedImportCheck bool
}

func srcimporter_setUsesCgo(conf *Config) {
conf.go115UsesCgo = true
}

// Info holds result type information for a type-checked package.
// Only the information for which a map is provided is collected.
// If the package has type errors, the collected information may
Expand Down
4 changes: 2 additions & 2 deletions src/go/types/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -248,10 +248,10 @@ func (check *Checker) handleBailout(err *error) {
// Files checks the provided files as part of the checker's package.
func (check *Checker) Files(files []*ast.File) error { return check.checkFiles(files) }

var errBadCgo = errors.New("cannot use FakeImportC and UsesCgo together")
var errBadCgo = errors.New("cannot use FakeImportC and go115UsesCgo together")

func (check *Checker) checkFiles(files []*ast.File) (err error) {
if check.conf.FakeImportC && check.conf.UsesCgo {
if check.conf.FakeImportC && check.conf.go115UsesCgo {
return errBadCgo
}

Expand Down
4 changes: 2 additions & 2 deletions src/go/types/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,10 +141,10 @@ func (check *Checker) importPackage(pos token.Pos, path, dir string) *Package {
}

// no package yet => import it
if path == "C" && (check.conf.FakeImportC || check.conf.UsesCgo) {
if path == "C" && (check.conf.FakeImportC || check.conf.go115UsesCgo) {
imp = NewPackage("C", "C")
imp.fake = true // package scope is not populated
imp.cgo = check.conf.UsesCgo
imp.cgo = check.conf.go115UsesCgo
} else {
// ordinary import
var err error
Expand Down

0 comments on commit 6aadfcd

Please sign in to comment.