cmd/gotype: make it compile against Go 1.8 and earlier
types.SizesFor was introduced for Go 1.9. Need to provide
a local implementation to have gotype build against earlier
versions.
Fixes golang/go#19545.
Change-Id: I6fdbe414e6574eda00c01295b666230daff2dfdc
Reviewed-on: https://go-review.googlesource.com/38157
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Alan Donovan <adonovan@google.com>
diff --git a/cmd/gotype/gotype.go b/cmd/gotype/gotype.go
index a85bfa0..7d68d81 100644
--- a/cmd/gotype/gotype.go
+++ b/cmd/gotype/gotype.go
@@ -2,15 +2,18 @@
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// gotype.go is a 1:1 copy of the original source maintained in
-// $GOROOT/src/go/types/gotype.go.
+// gotype.go is a copy of the original source maintained
+// in $GOROOT/src/go/types/gotype.go, but with the call
+// to types.SizesFor factored out so we can provide a local
+// implementation when compiling against Go 1.8 and earlier.
//
-// This copy is here for the sole purpose of satisfying existing
+// This code is here for the sole purpose of satisfying historic
// references to this location, and for making gotype accessible
// via 'go get'.
//
// Do NOT make changes to this version as they will not be maintained
-// (and possibly overwritten). Any changes should be made to the original.
+// (and possibly overwritten). Any changes should be made to the original
+// and then ported to here.
/*
The gotype command, like the front-end of a Go compiler, parses and
@@ -282,7 +285,7 @@
report(err)
},
Importer: importer.For(*compiler, nil),
- Sizes: types.SizesFor(build.Default.Compiler, build.Default.GOARCH),
+ Sizes: SizesFor(build.Default.Compiler, build.Default.GOARCH),
}
defer func() {
diff --git a/cmd/gotype/sizesFor18.go b/cmd/gotype/sizesFor18.go
new file mode 100644
index 0000000..579da86
--- /dev/null
+++ b/cmd/gotype/sizesFor18.go
@@ -0,0 +1,38 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build !go1.9
+
+// This file contains a copy of the implementation of types.SizesFor
+// since this function is not available in go/types before Go 1.9.
+
+package main
+
+import "go/types"
+
+var gcArchSizes = map[string]*types.StdSizes{
+ "386": {4, 4},
+ "arm": {4, 4},
+ "arm64": {8, 8},
+ "amd64": {8, 8},
+ "amd64p32": {4, 8},
+ "mips": {4, 4},
+ "mipsle": {4, 4},
+ "mips64": {8, 8},
+ "mips64le": {8, 8},
+ "ppc64": {8, 8},
+ "ppc64le": {8, 8},
+ "s390x": {8, 8},
+}
+
+func SizesFor(compiler, arch string) types.Sizes {
+ if compiler != "gc" {
+ return nil
+ }
+ s, ok := gcArchSizes[arch]
+ if !ok {
+ return nil
+ }
+ return s
+}
diff --git a/cmd/gotype/sizesFor19.go b/cmd/gotype/sizesFor19.go
new file mode 100644
index 0000000..090ec65
--- /dev/null
+++ b/cmd/gotype/sizesFor19.go
@@ -0,0 +1,13 @@
+// Copyright 2017 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build go1.9
+
+package main
+
+import "go/types"
+
+func SizesFor(compiler, arch string) types.Sizes {
+ return types.SizesFor(compiler, arch)
+}