mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: factor out Pkg, Sym, and Type into package types
- created new package cmd/compile/internal/types - moved Pkg, Sym, Type to new package - to break cycles, for now we need the (ugly) types/utils.go file which contains a handful of functions that must be installed early by the gc frontend - to break cycles, for now we need two functions to convert between *gc.Node and *types.Node (the latter is a dummy type) - adjusted the gc's code to use the new package and the conversion functions as needed - made several Pkg, Sym, and Type methods functions as needed - renamed constructors typ, typPtr, typArray, etc. to types.New, types.NewPtr, types.NewArray, etc. Passes toolstash-check -all. Change-Id: I8adfa5e85c731645d0a7fd2030375ed6ebf54b72 Reviewed-on: https://go-review.googlesource.com/39855 Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
19bd145d07
commit
f68f292820
48 changed files with 2433 additions and 2005 deletions
|
|
@ -10,6 +10,7 @@ import (
|
|||
"bufio"
|
||||
"bytes"
|
||||
"cmd/compile/internal/ssa"
|
||||
"cmd/compile/internal/types"
|
||||
"cmd/internal/obj"
|
||||
"cmd/internal/src"
|
||||
"cmd/internal/sys"
|
||||
|
|
@ -347,6 +348,35 @@ func Main(archInit func(*Arch)) {
|
|||
Widthptr = thearch.LinkArch.PtrSize
|
||||
Widthreg = thearch.LinkArch.RegSize
|
||||
|
||||
// initialize types package
|
||||
// (we need to do this to break dependencies that otherwise
|
||||
// would lead to import cycles)
|
||||
types.Widthptr = Widthptr
|
||||
types.Dowidth = dowidth
|
||||
types.Fatalf = Fatalf
|
||||
types.Sconv = func(s *types.Sym, flag, mode int) string {
|
||||
return sconv(s, FmtFlag(flag), fmtMode(mode))
|
||||
}
|
||||
types.Tconv = func(t *types.Type, flag, mode, depth int) string {
|
||||
return tconv(t, FmtFlag(flag), fmtMode(mode), depth)
|
||||
}
|
||||
types.FormatSym = func(sym *types.Sym, s fmt.State, verb rune, mode int) {
|
||||
symFormat(sym, s, verb, fmtMode(mode))
|
||||
}
|
||||
types.FormatType = func(t *types.Type, s fmt.State, verb rune, mode int) {
|
||||
typeFormat(t, s, verb, fmtMode(mode))
|
||||
}
|
||||
types.Cmptyp = cmptyp
|
||||
types.FieldName = func(f *types.Field) string {
|
||||
return f.Sym.Name
|
||||
}
|
||||
types.TypeLinkSym = func(t *types.Type) *obj.LSym {
|
||||
return Linksym(typenamesym(t))
|
||||
}
|
||||
types.FmtLeft = int(FmtLeft)
|
||||
types.FmtUnsigned = int(FmtUnsigned)
|
||||
types.FErr = FErr
|
||||
|
||||
initUniverse()
|
||||
|
||||
blockgen = 1
|
||||
|
|
@ -752,7 +782,7 @@ func loadsys() {
|
|||
inimport = false
|
||||
}
|
||||
|
||||
func importfile(f *Val) *Pkg {
|
||||
func importfile(f *Val) *types.Pkg {
|
||||
path_, ok := f.U.(string)
|
||||
if !ok {
|
||||
yyerror("import path must be a string")
|
||||
|
|
@ -964,28 +994,28 @@ func mkpackage(pkgname string) {
|
|||
|
||||
func clearImports() {
|
||||
for _, s := range localpkg.Syms {
|
||||
if s.Def == nil {
|
||||
if asNode(s.Def) == nil {
|
||||
continue
|
||||
}
|
||||
if s.Def.Op == OPACK {
|
||||
if asNode(s.Def).Op == OPACK {
|
||||
// throw away top-level package name leftover
|
||||
// from previous file.
|
||||
// leave s->block set to cause redeclaration
|
||||
// errors if a conflicting top-level name is
|
||||
// introduced by a different file.
|
||||
if !s.Def.Used() && nsyntaxerrors == 0 {
|
||||
pkgnotused(s.Def.Pos, s.Def.Name.Pkg.Path, s.Name)
|
||||
if !asNode(s.Def).Used() && nsyntaxerrors == 0 {
|
||||
pkgnotused(asNode(s.Def).Pos, asNode(s.Def).Name.Pkg.Path, s.Name)
|
||||
}
|
||||
s.Def = nil
|
||||
continue
|
||||
}
|
||||
|
||||
if s.isAlias() {
|
||||
if IsAlias(s) {
|
||||
// throw away top-level name left over
|
||||
// from previous import . "x"
|
||||
if s.Def.Name != nil && s.Def.Name.Pack != nil && !s.Def.Name.Pack.Used() && nsyntaxerrors == 0 {
|
||||
pkgnotused(s.Def.Name.Pack.Pos, s.Def.Name.Pack.Name.Pkg.Path, "")
|
||||
s.Def.Name.Pack.SetUsed(true)
|
||||
if asNode(s.Def).Name != nil && asNode(s.Def).Name.Pack != nil && !asNode(s.Def).Name.Pack.Used() && nsyntaxerrors == 0 {
|
||||
pkgnotused(asNode(s.Def).Name.Pack.Pos, asNode(s.Def).Name.Pack.Name.Pkg.Path, "")
|
||||
asNode(s.Def).Name.Pack.SetUsed(true)
|
||||
}
|
||||
|
||||
s.Def = nil
|
||||
|
|
@ -993,3 +1023,7 @@ func clearImports() {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func IsAlias(sym *types.Sym) bool {
|
||||
return sym.Def != nil && asNode(sym.Def).Sym != sym
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue