]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: rename UsesCgo to go115UsesCgo
authorMatthew Dempsky <mdempsky@google.com>
Wed, 10 Jun 2020 19:47:23 +0000 (12:47 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Wed, 10 Jun 2020 21:39:03 +0000 (21:39 +0000)
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>
api/go1.15.txt
src/go/internal/srcimporter/srcimporter.go
src/go/types/api.go
src/go/types/check.go
src/go/types/resolver.go

index f16faa07800b27b62b088982d165bea29d7c663c..b51837cf3806c58ac76172b374300383493fdba7 100644 (file)
@@ -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
index daef27c8b9dc86be5e83e0f143e727813a1f068b..90bb3a9bc11554e60163d9b59f4989c8d757a554 100644 (file)
@@ -20,6 +20,7 @@ import (
        "path/filepath"
        "strings"
        "sync"
+       _ "unsafe" // for go:linkname
 )
 
 // An Importer provides the context for importing packages from source code.
@@ -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
@@ -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)
index 7787b88906e3586fd1524d728bfbe3fee56fb6a4..1abcd9d9512271a9b4813358045a0f44dc50dc44 100644 (file)
@@ -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.
@@ -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
index a94770ffef3ed67b3f9e352e4e8ee03836252a75..007babdf9d67aca2c309be73e84519de444ca0d1 100644 (file)
@@ -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
        }
 
index f80b4ec7841f17d79c2c9ced9b6581c44e02645a..078adc5ec7808e02320f073d51c8eed0583cccc4 100644 (file)
@@ -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