mirror of https://github.com/golang/go.git
Fix various small bugs related to delaying transformations due to type params. Most of these relate to the need to delay a transformation when an argument of an expression or statement has a type parameter that has a structural constraint. The structural constraint implies the operation should work, but the transformation can't happen until the actual value of the type parameter is known. - delay transformations for send statements and return statements if any args/values have type params. - similarly, delay transformation of a call where the function arg has type parameters. This is mainly important for the case where the function arg is a pure type parameter, but has a structural constraint that requires it to be a function. Move the setting of n.Use to transformCall(), since we may not know how many return values there are until then, if the function arg is a type parameter. - set the type of unary expressions from the type2 type (as we do with most other expressions), since that works better with expressions with type params. - deal with these delayed transformations in subster.node() and convert the CALL checks to a switch statement. - make sure ir.CurFunc is set properly during stenciling, including closures (needed for transforming return statements during stenciling). New test file typelist.go with tests for these cases. Change-Id: I1b82f949d8cec47d906429209e846f4ebc8ec85e Reviewed-on: https://go-review.googlesource.com/c/go/+/305729 Trust: Dan Scales <danscales@google.com> Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Dan Scales <danscales@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> |
||
|---|---|---|
| .. | ||
| absdiff.go | ||
| adder.go | ||
| append.go | ||
| chans.go | ||
| combine.go | ||
| cons.go | ||
| double.go | ||
| fact.go | ||
| graph.go | ||
| importtest.go | ||
| index.go | ||
| list.go | ||
| list2.go | ||
| lockable.go | ||
| map.go | ||
| maps.go | ||
| metrics.go | ||
| min.go | ||
| ordered.go | ||
| orderedmap.go | ||
| pair.go | ||
| sets.go | ||
| settable.go | ||
| slices.go | ||
| smallest.go | ||
| smoketest.go | ||
| stringable.go | ||
| stringer.go | ||
| struct.go | ||
| sum.go | ||
| tparam1.go | ||
| typelist.go | ||
| value.go | ||