]> Cypherpunks repositories - gostls13.git/commit
[dev.typeparams] go/types: refactor untyped conversion for typeparams
authorRob Findley <rfindley@google.com>
Fri, 15 Jan 2021 16:42:10 +0000 (11:42 -0500)
committerRobert Findley <rfindley@google.com>
Wed, 20 Jan 2021 15:51:19 +0000 (15:51 +0000)
commit734cb8be0a05f6dba241a14f94a1d238a41d4ded
treebce06e65cf0de9df6cf36385ac9de2c9143ac6ee
parentd8796b5670d46a4197fc5e81a32d127c45ab6557
[dev.typeparams] go/types: refactor untyped conversion for typeparams

Some logic was missing in the merge from dev.go2go to deal with untyped
conversion of generic types. Part of this was due to the complexity of
the merge, as untyped conversion had been refactored on master.

Rather than back out the refactoring of untyped conversion, in this CL I
have decided to take it one step further. It was always problematic that
isRepresentable and canConvertUntyped mutated their arguments. In
retrospect the refactoring was perhaps too conservative.

This CL performs the following refactoring:
 + Replace 'isRepresentable' with 'representation': a Checker method
   produces the rounded representation of an untyped constant operand as
   a target type.
 + Make some functions return error codes rather than errors, and factor
   out the construction of the error message for invalid conversion.
   This avoided some indirect code.
 + Replace implicitType with implicitTypeAndValue, and have it handle
   the case of a constant basic operand, returning the rounded value.
 + Eliminate canConvertUntyped, lifting the logic to update expr types
   and values to the two callers.
 + Add handling for Sum types in implicitTypeAndValue. Here, the
   decision was made to depart from dev.go2go (and types2), and produce
   a Sum type as output. This seemed most correct on first principles,
   and tests still passed (though some logic for recording types had to
   be updated to allow for Sum types).

Change-Id: Ic93901f69e6671b83b14ee2bf185a4ed767e31ee
Reviewed-on: https://go-review.googlesource.com/c/go/+/284256
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Robert Griesemer <gri@golang.org>
Trust: Robert Findley <rfindley@google.com>
src/go/types/assignments.go
src/go/types/expr.go
src/go/types/operand.go
src/go/types/predicates.go