Extracted Builder.findMethod function to handle
methodset/receiver logic common to
function calls (Builder.setCall) and
bound method closure creation (Builder.selector).
Capture: added explicit Name, Type fields to Capture instead
of relying on Outer field, which is now un-exported since its
only purpose is to let Builder.expr(case *ast.FuncLit) know
which values to put in the closure; it is nilled immediately
after.
Simplified Function.lookup() logic: there's no need to walk
the Outer chain each time to set Alloc.Heap=true, as it's
already set during creation of the outermost
Capture{outer:*Alloc}.
Added interp/testdata/boundmeth.go test.
Cosmetic changes:
- add support for bound method thunks to Function.FullName().
- Simplified {Literal,Global,Builtin,Function}.String()
- doc: Captures are no longer necessarily addresses.
- added yet another missing pair of "()" (go/types accessors).
- print "Synthetic" not "Declared at -" for synthetic functions.
- use '$' not center-dot in synthetic identifiers (easier to type).
R=gri
CC=golang-dev
https://golang.org/cl/9654043
Also:
- remove redundant text in doc.go.
- fix (yet more) cases of missing parens in Printf, fallout from
go/types accessors refactoring.
- don't mix spaces and tabs within lines printed by ssa.Function.DumpTo:
it makes it too hard to constructed expected outputs for tests.
(Tabs may appear at line start though.)
Sadly godoc -play won't run this program; it complains it
can't import "code.google.com/p/go.exp/ssa". Any idea why?
R=gri
CC=golang-dev
https://golang.org/cl/9481044