1
0
mirror of https://github.com/golang/go synced 2024-11-15 08:20:30 -07:00

internal/abi: clean up type of Kind and Type.Kind_

Currently, Type.Kind_ is a uint8, Kind is a uint, and some of the
abi.Kind consts are not of type Kind. Clean this all up by making Kind
a uint8, then making Type.Kind a Kind, and finally making all Kind
consts actually have type Kind. This has some ripple effect, but I
think all of the changes are improvements.

Change-Id: If39be74699c2cdb52bf0ad7092d392bc8fb68d15
Reviewed-on: https://go-review.googlesource.com/c/go/+/575579
Auto-Submit: Austin Clements <austin@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
This commit is contained in:
Austin Clements 2024-04-01 15:39:41 -04:00 committed by Gopher Robot
parent cb6d15a747
commit 94dba61276
6 changed files with 13 additions and 13 deletions

View File

@ -1346,7 +1346,7 @@ func (p *GCProg) AddSym(s loader.Sym) {
} }
sval := ldr.SymValue(s) sval := ldr.SymValue(s)
if decodetypeUsegcprog(p.ctxt.Arch, typData) == 0 { if !decodetypeUsegcprog(p.ctxt.Arch, typData) {
// Copy pointers from mask into program. // Copy pointers from mask into program.
mask := decodetypeGcmask(p.ctxt, typ) mask := decodetypeGcmask(p.ctxt, typ)
for i := int64(0); i < nptr; i++ { for i := int64(0); i < nptr; i++ {

View File

@ -512,7 +512,7 @@ func (d *deadcodePass) decodeIfaceMethod(ldr *loader.Loader, arch *sys.Arch, sym
if p == nil { if p == nil {
panic(fmt.Sprintf("missing symbol %q", ldr.SymName(symIdx))) panic(fmt.Sprintf("missing symbol %q", ldr.SymName(symIdx)))
} }
if abi.Kind(decodetypeKind(arch, p)&abi.KindMask) != abi.Interface { if decodetypeKind(arch, p) != abi.Interface {
panic(fmt.Sprintf("symbol %q is not an interface", ldr.SymName(symIdx))) panic(fmt.Sprintf("symbol %q is not an interface", ldr.SymName(symIdx)))
} }
relocs := ldr.Relocs(symIdx) relocs := ldr.Relocs(symIdx)
@ -533,7 +533,7 @@ func (d *deadcodePass) decodetypeMethods(ldr *loader.Loader, arch *sys.Arch, sym
panic(fmt.Sprintf("no methods on %q", ldr.SymName(symIdx))) panic(fmt.Sprintf("no methods on %q", ldr.SymName(symIdx)))
} }
off := commonsize(arch) // reflect.rtype off := commonsize(arch) // reflect.rtype
switch abi.Kind(decodetypeKind(arch, p) & abi.KindMask) { switch decodetypeKind(arch, p) {
case abi.Struct: // reflect.structType case abi.Struct: // reflect.structType
off += 4 * arch.PtrSize off += 4 * arch.PtrSize
case abi.Pointer: // reflect.ptrType case abi.Pointer: // reflect.ptrType

View File

@ -37,13 +37,13 @@ func structfieldSize(arch *sys.Arch) int { return abi.StructFieldSize(arch.PtrSi
func uncommonSize(arch *sys.Arch) int { return int(abi.UncommonSize()) } // runtime.uncommontype func uncommonSize(arch *sys.Arch) int { return int(abi.UncommonSize()) } // runtime.uncommontype
// Type.commonType.kind // Type.commonType.kind
func decodetypeKind(arch *sys.Arch, p []byte) uint8 { func decodetypeKind(arch *sys.Arch, p []byte) abi.Kind {
return p[2*arch.PtrSize+7] & abi.KindMask // 0x13 / 0x1f return abi.Kind(p[2*arch.PtrSize+7]) & abi.KindMask // 0x13 / 0x1f
} }
// Type.commonType.kind // Type.commonType.kind
func decodetypeUsegcprog(arch *sys.Arch, p []byte) uint8 { func decodetypeUsegcprog(arch *sys.Arch, p []byte) bool {
return p[2*arch.PtrSize+7] & abi.KindGCProg // 0x13 / 0x1f return abi.Kind(p[2*arch.PtrSize+7])&abi.KindGCProg != 0 // 0x13 / 0x1f
} }
// Type.commonType.size // Type.commonType.size

View File

@ -542,7 +542,7 @@ func (d *dwctxt) newtype(gotype loader.Sym) *dwarf.DWDie {
bytesize := decodetypeSize(d.arch, tdata) bytesize := decodetypeSize(d.arch, tdata)
var die, typedefdie *dwarf.DWDie var die, typedefdie *dwarf.DWDie
switch abi.Kind(kind) { switch kind {
case abi.Bool: case abi.Bool:
die = d.newdie(&dwtypes, dwarf.DW_ABRV_BASETYPE, name) die = d.newdie(&dwtypes, dwarf.DW_ABRV_BASETYPE, name)
newattr(die, dwarf.DW_AT_encoding, dwarf.DW_CLS_CONSTANT, dwarf.DW_ATE_boolean, 0) newattr(die, dwarf.DW_AT_encoding, dwarf.DW_CLS_CONSTANT, dwarf.DW_ATE_boolean, 0)

View File

@ -72,9 +72,9 @@ const (
const ( const (
// TODO (khr, drchase) why aren't these in TFlag? Investigate, fix if possible. // TODO (khr, drchase) why aren't these in TFlag? Investigate, fix if possible.
KindDirectIface = 1 << 5 KindDirectIface Kind = 1 << 5
KindGCProg = 1 << 6 // Type.gc points to GC program KindGCProg Kind = 1 << 6 // Type.gc points to GC program
KindMask = (1 << 5) - 1 KindMask Kind = (1 << 5) - 1
) )
// TFlag is used by a Type to signal what extra type information is // TFlag is used by a Type to signal what extra type information is
@ -166,7 +166,7 @@ var kindNames = []string{
UnsafePointer: "unsafe.Pointer", UnsafePointer: "unsafe.Pointer",
} }
func (t *Type) Kind() Kind { return Kind(t.Kind_ & KindMask) } func (t *Type) Kind() Kind { return t.Kind_ & KindMask }
func (t *Type) HasName() bool { func (t *Type) HasName() bool {
return t.TFlag&TFlagNamed != 0 return t.TFlag&TFlagNamed != 0

View File

@ -661,5 +661,5 @@ func toType(t *abi.Type) Type {
// ifaceIndir reports whether t is stored indirectly in an interface value. // ifaceIndir reports whether t is stored indirectly in an interface value.
func ifaceIndir(t *abi.Type) bool { func ifaceIndir(t *abi.Type) bool {
return t.Kind_&abi.KindDirectIface == 0 return abi.Kind(t.Kind_)&abi.KindDirectIface == 0
} }