mirror of
https://github.com/golang/go
synced 2024-11-26 17:07:09 -07:00
cmd/compile: don't set Ntype in noder2 anymore
Now that we are no longer calling the old typechecker at all during the noder2 pass, we don't need to create and set an Ntype node ((which is just a node representation of the type which we already know) for the Name and Closure nodes. This should reduce memory usage a bit for -G=3. Change-Id: I6b1345007ce067a89ee64955a53f25645c303f4d Reviewed-on: https://go-review.googlesource.com/c/go/+/308909 Trust: Dan Scales <danscales@google.com> Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org>
This commit is contained in:
parent
756e2b1529
commit
281d168e2d
@ -506,7 +506,10 @@ func inlcopy(n ir.Node) ir.Node {
|
|||||||
newfn.Nname = ir.NewNameAt(oldfn.Nname.Pos(), oldfn.Nname.Sym())
|
newfn.Nname = ir.NewNameAt(oldfn.Nname.Pos(), oldfn.Nname.Sym())
|
||||||
// XXX OK to share fn.Type() ??
|
// XXX OK to share fn.Type() ??
|
||||||
newfn.Nname.SetType(oldfn.Nname.Type())
|
newfn.Nname.SetType(oldfn.Nname.Type())
|
||||||
|
// Ntype can be nil for -G=3 mode.
|
||||||
|
if oldfn.Nname.Ntype != nil {
|
||||||
newfn.Nname.Ntype = inlcopy(oldfn.Nname.Ntype).(ir.Ntype)
|
newfn.Nname.Ntype = inlcopy(oldfn.Nname.Ntype).(ir.Ntype)
|
||||||
|
}
|
||||||
newfn.Body = inlcopylist(oldfn.Body)
|
newfn.Body = inlcopylist(oldfn.Body)
|
||||||
// Make shallow copy of the Dcl and ClosureVar slices
|
// Make shallow copy of the Dcl and ClosureVar slices
|
||||||
newfn.Dcl = append([]*ir.Name(nil), oldfn.Dcl...)
|
newfn.Dcl = append([]*ir.Name(nil), oldfn.Dcl...)
|
||||||
@ -1213,7 +1216,10 @@ func (subst *inlsubst) closure(n *ir.ClosureExpr) ir.Node {
|
|||||||
newfn.SetIsHiddenClosure(true)
|
newfn.SetIsHiddenClosure(true)
|
||||||
newfn.Nname = ir.NewNameAt(n.Pos(), ir.BlankNode.Sym())
|
newfn.Nname = ir.NewNameAt(n.Pos(), ir.BlankNode.Sym())
|
||||||
newfn.Nname.Func = newfn
|
newfn.Nname.Func = newfn
|
||||||
|
// Ntype can be nil for -G=3 mode.
|
||||||
|
if oldfn.Nname.Ntype != nil {
|
||||||
newfn.Nname.Ntype = subst.node(oldfn.Nname.Ntype).(ir.Ntype)
|
newfn.Nname.Ntype = subst.node(oldfn.Nname.Ntype).(ir.Ntype)
|
||||||
|
}
|
||||||
newfn.Nname.Defn = newfn
|
newfn.Nname.Defn = newfn
|
||||||
|
|
||||||
m.(*ir.ClosureExpr).Func = newfn
|
m.(*ir.ClosureExpr).Func = newfn
|
||||||
|
@ -360,8 +360,6 @@ func (g *irgen) funcLit(typ2 types2.Type, expr *syntax.FuncLit) ir.Node {
|
|||||||
typ := g.typ(typ2)
|
typ := g.typ(typ2)
|
||||||
fn.Nname.Func = fn
|
fn.Nname.Func = fn
|
||||||
fn.Nname.Defn = fn
|
fn.Nname.Defn = fn
|
||||||
// Set Ntype for now to be compatible with later parts of compile, remove later.
|
|
||||||
fn.Nname.Ntype = ir.TypeNode(typ)
|
|
||||||
typed(typ, fn.Nname)
|
typed(typ, fn.Nname)
|
||||||
fn.SetTypecheck(1)
|
fn.SetTypecheck(1)
|
||||||
|
|
||||||
|
@ -147,9 +147,6 @@ func (g *irgen) objFinish(name *ir.Name, class ir.Class, typ *types.Type) {
|
|||||||
sym.SetFunc(true)
|
sym.SetFunc(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// We already know name's type, but typecheck is really eager to try
|
|
||||||
// recomputing it later. This appears to prevent that at least.
|
|
||||||
name.Ntype = ir.TypeNode(typ)
|
|
||||||
name.SetTypecheck(1)
|
name.SetTypecheck(1)
|
||||||
name.SetWalkdef(1)
|
name.SetWalkdef(1)
|
||||||
|
|
||||||
|
@ -298,7 +298,6 @@ func (g *irgen) genericSubst(newsym *types.Sym, nameNode *ir.Name, targs []ir.No
|
|||||||
subst.fields(ir.PPARAM, append(oldt.Recvs().FieldSlice(), oldt.Params().FieldSlice()...), newf.Dcl),
|
subst.fields(ir.PPARAM, append(oldt.Recvs().FieldSlice(), oldt.Params().FieldSlice()...), newf.Dcl),
|
||||||
subst.fields(ir.PPARAMOUT, oldt.Results().FieldSlice(), newf.Dcl))
|
subst.fields(ir.PPARAMOUT, oldt.Results().FieldSlice(), newf.Dcl))
|
||||||
|
|
||||||
newf.Nname.Ntype = ir.TypeNode(newt)
|
|
||||||
newf.Nname.SetType(newt)
|
newf.Nname.SetType(newt)
|
||||||
ir.MarkFunc(newf.Nname)
|
ir.MarkFunc(newf.Nname)
|
||||||
newf.SetTypecheck(1)
|
newf.SetTypecheck(1)
|
||||||
@ -497,8 +496,7 @@ func (subst *subster) node(n ir.Node) ir.Node {
|
|||||||
|
|
||||||
case ir.OCLOSURE:
|
case ir.OCLOSURE:
|
||||||
x := x.(*ir.ClosureExpr)
|
x := x.(*ir.ClosureExpr)
|
||||||
// Need to save/duplicate x.Func.Nname,
|
// Need to duplicate x.Func.Nname, x.Func.Dcl, x.Func.ClosureVars, and
|
||||||
// x.Func.Nname.Ntype, x.Func.Dcl, x.Func.ClosureVars, and
|
|
||||||
// x.Func.Body.
|
// x.Func.Body.
|
||||||
oldfn := x.Func
|
oldfn := x.Func
|
||||||
newfn := ir.NewFunc(oldfn.Pos())
|
newfn := ir.NewFunc(oldfn.Pos())
|
||||||
@ -522,8 +520,6 @@ func (subst *subster) node(n ir.Node) ir.Node {
|
|||||||
newfn.Dcl = subst.namelist(oldfn.Dcl)
|
newfn.Dcl = subst.namelist(oldfn.Dcl)
|
||||||
newfn.ClosureVars = subst.namelist(oldfn.ClosureVars)
|
newfn.ClosureVars = subst.namelist(oldfn.ClosureVars)
|
||||||
|
|
||||||
// Set Ntype for now to be compatible with later parts of compiler
|
|
||||||
newfn.Nname.Ntype = subst.node(oldfn.Nname.Ntype).(ir.Ntype)
|
|
||||||
typed(subst.typ(oldfn.Nname.Type()), newfn.Nname)
|
typed(subst.typ(oldfn.Nname.Type()), newfn.Nname)
|
||||||
typed(newfn.Nname.Type(), m)
|
typed(newfn.Nname.Type(), m)
|
||||||
newfn.SetTypecheck(1)
|
newfn.SetTypecheck(1)
|
||||||
|
Loading…
Reference in New Issue
Block a user