mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
[dev.typeparams] cmd/compile: formalize "hidden parameters" idea
This CL formalizes the closure-var trick used for method-value wrappers to be reusable for defining other functions that take hidden parameters via the closure-context register. In particular, it: 1. Adds a new ir.NewHiddenParam function for creating hidden parameters. 2. Changes ir.NewClosureVar to copy Type/Typecheck from the closure variable, so that callers can needing to manually copy these. 3. Updates existing code accordingly (i.e., method-value wrappers to start using ir.NewHiddenParam, and closure builders to stop copying types). Longer term, I anticipate using this to pass dictionaries to stenciled functions within unified IR. Change-Id: I9da3ffdb2a26d15c6e89a21b4e080686d6dc872c Reviewed-on: https://go-review.googlesource.com/c/go/+/332612 Trust: Matthew Dempsky <mdempsky@google.com> Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
This commit is contained in:
parent
611056ec34
commit
5dac279fbd
8 changed files with 43 additions and 39 deletions
|
|
@ -1623,11 +1623,7 @@ func (r *reader) funcLit() ir.Node {
|
|||
|
||||
fn.ClosureVars = make([]*ir.Name, 0, r.len())
|
||||
for len(fn.ClosureVars) < cap(fn.ClosureVars) {
|
||||
pos := r.pos()
|
||||
outer := r.useLocal()
|
||||
|
||||
cv := ir.NewClosureVar(pos, fn, outer)
|
||||
r.setType(cv, outer.Type())
|
||||
ir.NewClosureVar(r.pos(), fn, r.useLocal())
|
||||
}
|
||||
|
||||
r.addBody(fn)
|
||||
|
|
@ -2204,17 +2200,10 @@ func (r *reader) methodValueWrapper(tbase *types.Type, method *types.Field, targ
|
|||
pos := base.AutogeneratedPos
|
||||
|
||||
fn := r.newWrapperFunc(pos, sym, nil, method)
|
||||
fn.SetNeedctxt(true)
|
||||
sym.Def = fn
|
||||
|
||||
// Declare and initialize variable holding receiver.
|
||||
recv := ir.NewNameAt(pos, typecheck.Lookup(".this"))
|
||||
recv.Class = ir.PAUTOHEAP
|
||||
recv.SetType(recvType)
|
||||
recv.Curfn = fn
|
||||
recv.SetIsClosureVar(true)
|
||||
recv.SetByval(true)
|
||||
fn.ClosureVars = append(fn.ClosureVars, recv)
|
||||
recv := ir.NewHiddenParam(pos, fn, typecheck.Lookup(".this"), recvType)
|
||||
|
||||
addTailCall(pos, fn, recv, method)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue