mirror of
https://github.com/golang/go.git
synced 2025-05-28 19:02:22 +00:00
cmd/compile/internal/ir: prune down possible Ntype nodes
Ident, ParenExpr, SelectorExpr, and StarExpr used to need to be allowed as Ntypes for the old -G=0 type checker to represent some type expressions before type checking, but now they're only ever used to represent value expressions. Change-Id: Idd4901ae6149ecc81acf1c52de3bc914d9e73418 Reviewed-on: https://go-review.googlesource.com/c/go/+/403844 TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: David Chase <drchase@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
3abe8fe00b
commit
cf66a82b0b
@ -439,16 +439,6 @@ func NewParenExpr(pos src.XPos, x Node) *ParenExpr {
|
||||
func (n *ParenExpr) Implicit() bool { return n.flags&miniExprImplicit != 0 }
|
||||
func (n *ParenExpr) SetImplicit(b bool) { n.flags.set(miniExprImplicit, b) }
|
||||
|
||||
func (*ParenExpr) CanBeNtype() {}
|
||||
|
||||
// SetOTYPE changes n to be an OTYPE node returning t,
|
||||
// like all the type nodes in type.go.
|
||||
func (n *ParenExpr) SetOTYPE(t *types.Type) {
|
||||
n.op = OTYPE
|
||||
n.typ = t
|
||||
t.SetNod(n)
|
||||
}
|
||||
|
||||
// A RawOrigExpr represents an arbitrary Go expression as a string value.
|
||||
// When printed in diagnostics, the string value is written out exactly as-is.
|
||||
type RawOrigExpr struct {
|
||||
@ -558,10 +548,6 @@ func (n *SelectorExpr) FuncName() *Name {
|
||||
return fn
|
||||
}
|
||||
|
||||
// Before type-checking, bytes.Buffer is a SelectorExpr.
|
||||
// After type-checking it becomes a Name.
|
||||
func (*SelectorExpr) CanBeNtype() {}
|
||||
|
||||
// A SliceExpr is a slice expression X[Low:High] or X[Low:High:Max].
|
||||
type SliceExpr struct {
|
||||
miniExpr
|
||||
@ -633,17 +619,6 @@ func NewStarExpr(pos src.XPos, x Node) *StarExpr {
|
||||
func (n *StarExpr) Implicit() bool { return n.flags&miniExprImplicit != 0 }
|
||||
func (n *StarExpr) SetImplicit(b bool) { n.flags.set(miniExprImplicit, b) }
|
||||
|
||||
func (*StarExpr) CanBeNtype() {}
|
||||
|
||||
// SetOTYPE changes n to be an OTYPE node returning t,
|
||||
// like all the type nodes in type.go.
|
||||
func (n *StarExpr) SetOTYPE(t *types.Type) {
|
||||
n.op = OTYPE
|
||||
n.X = nil
|
||||
n.typ = t
|
||||
t.SetNod(n)
|
||||
}
|
||||
|
||||
// A TypeAssertionExpr is a selector expression X.(Type).
|
||||
// Before type-checking, the type is Ntype.
|
||||
type TypeAssertExpr struct {
|
||||
|
@ -31,8 +31,6 @@ func NewIdent(pos src.XPos, sym *types.Sym) *Ident {
|
||||
|
||||
func (n *Ident) Sym() *types.Sym { return n.sym }
|
||||
|
||||
func (*Ident) CanBeNtype() {}
|
||||
|
||||
// Name holds Node fields used only by named nodes (ONAME, OTYPE, some OLITERAL).
|
||||
type Name struct {
|
||||
miniExpr
|
||||
|
@ -821,11 +821,11 @@ func tcStar(n *ir.StarExpr, top int) ir.Node {
|
||||
n.SetType(nil)
|
||||
return n
|
||||
}
|
||||
|
||||
// TODO(mdempsky): Remove (along with ctxType above) once I'm
|
||||
// confident this code path isn't needed any more.
|
||||
if l.Op() == ir.OTYPE {
|
||||
n.SetOTYPE(types.NewPtr(l.Type()))
|
||||
// Ensure l.Type gets CalcSize'd for the backend. Issue 20174.
|
||||
types.CheckSize(l.Type())
|
||||
return n
|
||||
base.Fatalf("unexpected type in deref expression: %v", l)
|
||||
}
|
||||
|
||||
if !t.IsPtr() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user