- moved single field and method lookup functionality
from operand.go to new file lookup.go and cleaned
up the lookup implementation
- implemented method set computation using the same
basic structure as for field/method lookup, in new
file methodset.go
- minor related changes
- the method set computation ignores pointer-ness of
the receiver type at the moment (next CL)
- fixed a couple of bugs (missing pkg info for imported
embedded types, wrong test for method expressions)
The method set computation is currently verified by
comparing a regular method lookup with a method-set
based method lookup.
R=adonovan
CC=golang-dev
https://golang.org/cl/10235049
methodIndex() utility was split and specialized to its two
cases, *Interface vs *Named, which are logically quite
different.
We can't memoize promotion wrappers yet; we need typemap.
Terminology:
- "thunks" are now "wrappers"
- "bridge methods" are now "promotion wrappers"
Where the diff is messy it's just because of indentation.
R=gri
CC=golang-dev
https://golang.org/cl/10282043
This partially reverts a previous change, using a []*Field is a better
representation for struct fields than a *Scope, after all; however
*Fields remain Objects.
Fixesgolang/go#5670.
R=adonovan, axwalk
CC=golang-dev
https://golang.org/cl/10207043
- Imported objects that are explicitly exported may have a nil package;
don't use it for qualified name computation (it's not needed).
- isAssignable must check all possibilities before declaring failure.
Fixesgolang/go#5675.
R=adonovan
CC=golang-dev
https://golang.org/cl/10141044
PLEASE NOTE: the APIs for both "importer" and "ssa" packages
will continue to evolve and both need some polishing; the key
thing is that this CL splits them.
The go.types/importer package contains contains the Importer,
which takes care of the mechanics of loading a set of packages
and type-checking them. It exposes for each package a
PackageInfo containing:
- the package's ASTs (i.e. the input to the typechecker)
- the types.Package object
- the memoization of the typechecker callbacks for identifier
resolution, constant folding and expression type inference.
Method-set computation (and hence bridge-method creation) is
now moved to after creation of all packages: since they are no
longer created in topological order, we can't guarantee the
needed delegate methods exist yet.
ssa.Package no longer has public TypeOf, ObjectOf, ValueOf methods.
The private counterparts are valid only during the build phase.
Also:
- added to go/types an informative error (not crash) for an
importer() returning nil without error.
- removed Package.Name(), barely needed.
- changed Package.String() slightly.
- flag what looks like a bug in makeBridgeMethod. Will follow up.
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/9898043
- First step towards unified use of scopes. Will enable
further simplifications.
- Removed various ForEach iterators in favor of the existing
accessor methods, for a thinner API.
- Renamed outer/Outer to parent/Parent for scopes.
- Removed check.lookup in favor of Scope.LookupParent.
R=adonovan
CC=golang-dev
https://golang.org/cl/9862044
Also:
- more cleanup of new identifier resolution code
- removed residue Object.Pos() code
- two separate, equally formatted error messages for redeclaration
errors for easier tool support
- initial support for labels
- enabled several disabled tests
Thic CL will break go.tools/ssa/interp, but the pending
CL 9863045 fixes that.
Fixesgolang/go#5504.
R=adonovan
CC=golang-dev
https://golang.org/cl/9839045
By setting resolve = true in check.go, the type checker
will do all identifier resolution during type checking
time and ignore (and not depend on) parser objects. This
permits the type checker to run easily on ASTs that are
not generated with invariants guaranteed by the parser.
There is a lot of new code; much of it slightly modified
copies of old code. There is also a lot of duplication.
After removing the dead code resulting from resolve = true
permanently (and removing the flag as well), it will be
easier to perform a thorough cleanup. As is, there are
too many intertwined code paths.
For now resolve = false. To be enabled in a successor CL.
R=adonovan
CC=golang-dev
https://golang.org/cl/9606045
They will be deleted from their current homes once this has landed.
Changes made to import paths to make the code compile, and to find
errchk in the right place in cmd/vet's Makefile.
TODO in a later CL: tidy up vet.
R=golang-dev, gri
CC=golang-dev
https://golang.org/cl/9495043