]> Cypherpunks repositories - gostls13.git/commitdiff
go/types: document that selectors are not recorded in Info.Types
authorRobert Griesemer <gri@golang.org>
Mon, 7 Nov 2016 23:56:41 +0000 (15:56 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 8 Nov 2016 00:51:14 +0000 (00:51 +0000)
Fixes #11944.

Change-Id: I424ba93725f22fd599e052eb182f9ba2fca8e8bd
Reviewed-on: https://go-review.googlesource.com/32881
Reviewed-by: Alan Donovan <adonovan@google.com>
src/go/types/api.go
src/go/types/check.go

index ca109f0a80fdb735ec72affb74d38bcc9e3bf558..44949895a7b9db03eb0c2a438c3009436d701551 100644 (file)
@@ -135,7 +135,8 @@ type Config struct {
 // be incomplete.
 type Info struct {
        // Types maps expressions to their types, and for constant
-       // expressions, their values. Invalid expressions are omitted.
+       // expressions, also their values. Invalid expressions are
+       // omitted.
        //
        // For (possibly parenthesized) identifiers denoting built-in
        // functions, the recorded signatures are call-site specific:
@@ -143,9 +144,13 @@ type Info struct {
        // an argument-specific signature. Otherwise, the recorded type
        // is invalid.
        //
-       // Identifiers on the lhs of declarations (i.e., the identifiers
-       // which are being declared) are collected in the Defs map.
-       // Identifiers denoting packages are collected in the Uses maps.
+       // The Types map does not record the type of every identifier,
+       // only those that appear where an arbitrary expression is
+       // permitted. For instance, the identifier f in a selector
+       // expression x.f is found only in the Selections map, the
+       // identifier z in a variable declaration 'var z int' is found
+       // only in the Defs map, and identifiers denoting packages in
+       // qualified identifiers are collected in the Uses map.
        Types map[ast.Expr]TypeAndValue
 
        // Defs maps identifiers to the objects they define (including
index 0279be0e84843b642b1d8562416ca32255c048ed..28e94f1940e189ba52a818e05f12ad2a3b39f16d 100644 (file)
@@ -345,7 +345,6 @@ func (check *Checker) recordImplicit(node ast.Node, obj Object) {
 func (check *Checker) recordSelection(x *ast.SelectorExpr, kind SelectionKind, recv Type, obj Object, index []int, indirect bool) {
        assert(obj != nil && (recv == nil || len(index) > 0))
        check.recordUse(x.Sel, obj)
-       // TODO(gri) Should we also call recordTypeAndValue?
        if m := check.Selections; m != nil {
                m[x] = &Selection{kind, recv, obj, index, indirect}
        }