mirror of
https://github.com/golang/go
synced 2024-11-17 02:54:45 -07:00
[dev.unified] cmd/compile: refactor reflectdata.{TypePtr,ITabAddr}
Minor refactoring to decouple from base.Pos and deduplicate some common code paths. Passes toolstash -cmp. Change-Id: I8c0724cf821d28b0ede3b0e8e4b2d02302d9af3b Reviewed-on: https://go-review.googlesource.com/c/go/+/413355 TryBot-Result: Gopher Robot <gobot@golang.org> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: David Chase <drchase@google.com>
This commit is contained in:
parent
fc5dad6646
commit
f70775ff22
@ -842,9 +842,15 @@ func TypeLinksym(t *types.Type) *obj.LSym {
|
|||||||
return TypeSym(t).Linksym()
|
return TypeSym(t).Linksym()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Deprecated: Use TypePtrAt instead.
|
||||||
func TypePtr(t *types.Type) *ir.AddrExpr {
|
func TypePtr(t *types.Type) *ir.AddrExpr {
|
||||||
n := ir.NewLinksymExpr(base.Pos, TypeLinksym(t), types.Types[types.TUINT8])
|
return TypePtrAt(base.Pos, t)
|
||||||
return typecheck.Expr(typecheck.NodAddr(n)).(*ir.AddrExpr)
|
}
|
||||||
|
|
||||||
|
// TypePtrAt returns an expression that evaluates to the
|
||||||
|
// *runtime._type value for t.
|
||||||
|
func TypePtrAt(pos src.XPos, t *types.Type) *ir.AddrExpr {
|
||||||
|
return typecheck.LinksymAddr(pos, TypeLinksym(t), types.Types[types.TUINT8])
|
||||||
}
|
}
|
||||||
|
|
||||||
// ITabLsym returns the LSym representing the itab for concrete type typ implementing
|
// ITabLsym returns the LSym representing the itab for concrete type typ implementing
|
||||||
@ -864,9 +870,15 @@ func ITabLsym(typ, iface *types.Type) *obj.LSym {
|
|||||||
return lsym
|
return lsym
|
||||||
}
|
}
|
||||||
|
|
||||||
// ITabAddr returns an expression representing a pointer to the itab
|
// Deprecated: Use ITabAddrAt instead.
|
||||||
// for concrete type typ implementing interface iface.
|
|
||||||
func ITabAddr(typ, iface *types.Type) *ir.AddrExpr {
|
func ITabAddr(typ, iface *types.Type) *ir.AddrExpr {
|
||||||
|
return ITabAddrAt(base.Pos, typ, iface)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ITabAddrAt returns an expression that evaluates to the
|
||||||
|
// *runtime.itab value for concrete type typ implementing interface
|
||||||
|
// iface.
|
||||||
|
func ITabAddrAt(pos src.XPos, typ, iface *types.Type) *ir.AddrExpr {
|
||||||
s, existed := ir.Pkgs.Itab.LookupOK(typ.LinkString() + "," + iface.LinkString())
|
s, existed := ir.Pkgs.Itab.LookupOK(typ.LinkString() + "," + iface.LinkString())
|
||||||
lsym := s.Linksym()
|
lsym := s.Linksym()
|
||||||
|
|
||||||
@ -874,8 +886,7 @@ func ITabAddr(typ, iface *types.Type) *ir.AddrExpr {
|
|||||||
writeITab(lsym, typ, iface, false)
|
writeITab(lsym, typ, iface, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
n := ir.NewLinksymExpr(base.Pos, lsym, types.Types[types.TUINT8])
|
return typecheck.LinksymAddr(pos, lsym, types.Types[types.TUINT8])
|
||||||
return typecheck.Expr(typecheck.NodAddr(n)).(*ir.AddrExpr)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// needkeyupdate reports whether map updates with t as a key
|
// needkeyupdate reports whether map updates with t as a key
|
||||||
|
@ -13,6 +13,7 @@ import (
|
|||||||
"cmd/compile/internal/base"
|
"cmd/compile/internal/base"
|
||||||
"cmd/compile/internal/ir"
|
"cmd/compile/internal/ir"
|
||||||
"cmd/compile/internal/types"
|
"cmd/compile/internal/types"
|
||||||
|
"cmd/internal/obj"
|
||||||
"cmd/internal/objabi"
|
"cmd/internal/objabi"
|
||||||
"cmd/internal/src"
|
"cmd/internal/src"
|
||||||
)
|
)
|
||||||
@ -119,6 +120,13 @@ func ComputeAddrtaken(top []ir.Node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// LinksymAddr returns a new expression that evaluates to the address
|
||||||
|
// of lsym. typ specifies the type of the addressed memory.
|
||||||
|
func LinksymAddr(pos src.XPos, lsym *obj.LSym, typ *types.Type) *ir.AddrExpr {
|
||||||
|
n := ir.NewLinksymExpr(pos, lsym, typ)
|
||||||
|
return Expr(NodAddrAt(pos, n)).(*ir.AddrExpr)
|
||||||
|
}
|
||||||
|
|
||||||
func NodNil() ir.Node {
|
func NodNil() ir.Node {
|
||||||
n := ir.NewNilExpr(base.Pos)
|
n := ir.NewNilExpr(base.Pos)
|
||||||
n.SetType(types.Types[types.TNIL])
|
n.SetType(types.Types[types.TNIL])
|
||||||
|
Loading…
Reference in New Issue
Block a user