tools/go/pointer
Peter Collingbourne 4329a10ae7 go.tools/go: separate interface construction from method set construction
We introduce a method (*Interface).Complete(), which is intended
to be called from clients after all embedded interfaces have been
fully defined. For importers, this will definitely be the case
after the import has finished, so each importer have been updated
to do so, with the exception of the gcimporter, which does not use
embedded interfaces, therefore Complete() can be called immediately
after construction.

Building the method set separately from the constructor type caused
some problems with go/importer, which copies the types.Interface
object, leading to there existing two almost-identical interface
types referenced from interface method receivers, only one of which
has been completed. To avoid this situation, the importer has been
modified to construct the interface object only once.

Fixes golang/go#8177.

LGTM=gri
R=gri, dave, gordon.klaus, adonovan
CC=golang-codereviews
https://golang.org/cl/105060044
2014-07-09 20:00:49 -07:00
..
testdata go.tools/go/pointer: eliminate TODOs regarding sound treatment of unsafe.Pointer. 2014-07-08 10:11:36 -04:00
TODO go.tools/go/pointer: eliminate TODOs regarding sound treatment of unsafe.Pointer. 2014-07-08 10:11:36 -04:00
analysis.go go/pointer: fix crash: valueNode(*FreeVar) was allocating 1 node, even for multi-word types. 2014-06-19 15:30:51 -04:00
api.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
callgraph.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
constraint.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
doc.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
example_test.go go.tools/go/loader: add Config.ParserMode configuration parameter. 2014-03-27 12:50:26 -04:00
gen.go go.tools/go: separate interface construction from method set construction 2014-07-09 20:00:49 -07:00
hvn.go go.tools/go/pointer: suppress logging by default 2014-06-16 16:31:30 -04:00
intrinsics.go go.tools/go/pointer: eliminate TODOs regarding sound treatment of unsafe.Pointer. 2014-07-08 10:11:36 -04:00
labels.go go.tools: fix various typos 2014-05-02 14:38:08 -07:00
opt.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
pointer_test.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
print.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
reflect.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
solve.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
stdlib_test.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00
util.go go/pointer: implement pointer equivalence via hash-value numbering, a pre-solver optimization. 2014-06-16 15:46:07 -04:00