return &Importer{
ctxt: ctxt,
fset: fset,
- sizes: archSizes[ctxt.GOARCH], // use go/types default if GOARCH not found (map access returns nil)
+ sizes: types.SizesFor(ctxt.GOARCH), // uses go/types default if GOARCH not found
packages: packages,
}
}
}
return filepath.Join(elem...)
}
-
-// common architecture word sizes and alignments
-// TODO(gri) consider making this available via go/types
-var archSizes = map[string]*types.StdSizes{
- "386": {WordSize: 4, MaxAlign: 4},
- "arm": {WordSize: 4, MaxAlign: 4},
- "arm64": {WordSize: 8, MaxAlign: 8},
- "amd64": {WordSize: 8, MaxAlign: 8},
- "amd64p32": {WordSize: 4, MaxAlign: 8},
- "mips": {WordSize: 4, MaxAlign: 4},
- "mipsle": {WordSize: 4, MaxAlign: 4},
- "mips64": {WordSize: 8, MaxAlign: 8},
- "mips64le": {WordSize: 8, MaxAlign: 8},
- "ppc64": {WordSize: 8, MaxAlign: 8},
- "ppc64le": {WordSize: 8, MaxAlign: 8},
- "s390x": {WordSize: 8, MaxAlign: 8},
-}
Importer Importer
// If Sizes != nil, it provides the sizing functions for package unsafe.
- // Otherwise &StdSizes{WordSize: 8, MaxAlign: 8} is used instead.
+ // Otherwise SizesFor("amd64") is used instead.
Sizes Sizes
// If DisableUnusedImportCheck is set, packages are not checked
return s.WordSize // catch-all
}
+// common architecture word sizes and alignments
+var archSizes = map[string]*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},
+ // When adding more architectures here,
+ // update the doc string of SizesFor below.
+}
+
+// SizesFor returns the Sizes for one of these architectures:
+// "386", "arm", "arm64", "amd64", "amd64p32", "mips", "mipsle",
+// "mips64", "mips64le", "ppc64", "ppc64le", "s390x".
+// The result is nil if an architecture is not known.
+func SizesFor(arch string) Sizes {
+ return archSizes[arch]
+}
+
// stdSizes is used if Config.Sizes == nil.
-var stdSizes = StdSizes{8, 8}
+var stdSizes = SizesFor("amd64")
func (conf *Config) alignof(T Type) int64 {
if s := conf.Sizes; s != nil {