go/test/typeparam
Dan Scales 8e6dfe1b31 [dev.typeparams] cmd/compile: export/import of recursive generic types.
Deal with export/import of recursive generic types. This includes
typeparams which have bounds that reference the typeparam.

There are three main changes:

  - Change export/import of typeparams to have an implicit "declaration"
    (doDecl). We need to do a declaration of typeparams (via the
    typeparam's package and unique name), because it may be referenced
    within its bound during its own definition.

  - We delay most of the processing of the Instantiate call until we
    finish the creation of the top-most type (similar to the way we
    delay CheckSize). This is because we can't do the full instantiation
    properly until the base type is fully defined (with methods). The
    functions delayDoInst() and resumeDoInst() delay and resume the
    processing of the instantiations.

  - To do the full needed type substitutions for type instantiations
    during import, I had to separate out the type subster in stencil.go
    and move it to subr.go in the typecheck package. The subster in
    stencil.go now does node substitution and makes use of the type
    subster to do type substitutions.

Notable other changes:
 - In types/builtins.go, put the newly defined typeparam for a union type
   (related to use of real/imag, etc.) in the current package, rather
   than the builtin package, so exports/imports work properly.

 - In types2, allowed NewTypeParam() to be called with a nil bound, and
   allow setting the bound later. (Needed to import a typeparam whose
   bound refers to the typeparam itself.)

 - During import of typeparams in types2 (importer/import.go), we need
   to keep an index of the typeparams by their package and unique name
   (with id). Use a new map typParamIndex[] for that. Again, this is
   needed to deal with typeparams whose bounds refer to the typeparam
   itself.

 - Added several new tests absdiffimp.go and orderedmapsimp.go. Some of
   the orderemapsimp tests are commented out for now, because there are
   some issues with closures inside instantiations (relating to unexported
   names of closure structs).

 - Renamed some typeparams in test value.go to make them all T (to make
   typeparam uniqueness is working fine).

Change-Id: Ib47ed9471c19ee8e9fbb34e8506907dad3021e5a
Reviewed-on: https://go-review.googlesource.com/c/go/+/323029
Trust: Dan Scales <danscales@google.com>
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
2021-06-04 16:43:27 +00:00
..
absdiffimp.dir [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00
aliasimp.dir [dev.typeparams] cmd/compile: get type aliases working with generic types 2021-05-26 21:38:54 +00:00
chansimp.dir [dev.typeparams] cmd/compile: fixing import of comm clauses/closures in generic functions 2021-05-21 23:13:46 +00:00
factimp.dir [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
listimp.dir [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
listimp2.dir [dev.typeparams] cmd/compile: Fix handling of Name nodes during stenciling 2021-05-24 22:16:09 +00:00
mapimp.dir [dev.typeparams] cmd/compile: add import/export of calls to builtin functions 2021-05-21 17:14:19 +00:00
mapsimp.dir [dev.typeparams] Don't check typecheck(3) on transform, so no need to export/import it 2021-05-24 22:17:33 +00:00
mincheck.dir [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
minimp.dir [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
orderedmapsimp.dir [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00
pairimp.dir [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
setsimp.dir [dev.typeparams] cmd/compile: always generate (*T).M wrappers for instantiated methods 2021-05-26 21:39:54 +00:00
sliceimp.dir [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
stringerimp.dir [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
valimp.dir [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
absdiff.go [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00
absdiffimp.go [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00
adder.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
aliasimp.go [dev.typeparams] cmd/compile: get type aliases working with generic types 2021-05-26 21:38:54 +00:00
append.go cmd/compile: getting more built-ins to work with generics 2021-03-17 16:53:00 +00:00
chans.go cmd/compile: add support for generic channels and type conversion during calls 2021-03-15 20:28:10 +00:00
chansimp.go [dev.typeparams] cmd/compile: fixing import of comm clauses/closures in generic functions 2021-05-21 23:13:46 +00:00
combine.go [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) 2021-05-21 17:03:30 +00:00
cons.go [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) 2021-05-21 17:03:30 +00:00
dictionaryCapture.go [dev.typeparams] cmd/compile: add dictionary argument to generic functions 2021-06-02 20:23:12 +00:00
double.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
fact.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
factimp.go [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) 2021-05-21 17:03:30 +00:00
graph.go cmd/compile: deal with comparable embedded in a constraint 2021-03-16 18:42:06 +00:00
importtest.go [dev.typeparams] cmd/compile: use existing findpkg algorithm when importing through types2 2020-11-11 01:11:43 +00:00
index.go [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) 2021-05-21 17:03:30 +00:00
interfacearg.go cmd/compile: fix creation of named generic types (setting of t.nod) 2021-03-30 04:48:27 +00:00
issue45547.go cmd/compile: look for function in instantiations in all global assignments 2021-04-15 00:14:55 +00:00
issue45722.go cmd/compile: fix handling of ir.CurFunc during stenciling 2021-04-27 16:55:20 +00:00
issue45738.go cmd/compile: fix nongeneric closures in generic functions 2021-04-27 19:30:11 +00:00
issue45817.go [dev.typeparams] cmd/compile: fix use of method values with stenciled methods 2021-05-12 22:25:00 +00:00
issue46472.go [dev.typeparams] cmd/compile: handle ONONAME in subster.node 2021-06-01 17:10:20 +00:00
list.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
list2.go [dev.typeparams] cmd/compile: Fix handling of Name nodes during stenciling 2021-05-24 22:16:09 +00:00
listimp.go [dev.typeparams] cmd/compile: move to new export version, keep reading previous version 2021-05-21 04:03:26 +00:00
listimp2.go [dev.typeparams] cmd/compile: Fix handling of Name nodes during stenciling 2021-05-24 22:16:09 +00:00
lockable.go [dev.typeparams] cmd/compile: export OFUNCINST and OSELRECV2 nodes (for generic functions) 2021-05-21 17:03:30 +00:00
map.go [dev.typeparams] cmd/compile: small fixes for stenciling 2021-02-11 21:46:39 +00:00
mapimp.go [dev.typeparams] cmd/compile: add import/export of calls to builtin functions 2021-05-21 17:14:19 +00:00
maps.go cmd/compile: add support for generic maps 2021-03-15 20:28:34 +00:00
mapsimp.go [dev.typeparams] Don't check typecheck(3) on transform, so no need to export/import it 2021-05-24 22:17:33 +00:00
metrics.go cmd/compile: fix case where func-valued field of a generic type is called 2021-03-15 20:29:11 +00:00
min.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
mincheck.go [dev.typeparams] cmd/compile: adding union support in types1 2021-05-26 15:33:02 +00:00
minimp.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
ordered.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
orderedmap.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
orderedmapsimp.go [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00
pair.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
pairimp.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
pragma.go cmd/compile: propagate pragmas from generic function to stenciled implementation 2021-04-15 00:29:05 +00:00
sets.go cmd/compile: add support for generic maps 2021-03-15 20:28:34 +00:00
setsimp.go [dev.typeparams] cmd/compile: always generate (*T).M wrappers for instantiated methods 2021-05-26 21:39:54 +00:00
settable.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
sliceimp.go [dev.typeparams] cmd/compile: fix handling of Nname field in (*subster).tstruct. 2021-05-21 23:25:07 +00:00
slices.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
smallest.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
smoketest.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
stringable.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
stringer.go [dev.typeparams] cmd/compile: small fixes for stenciling 2021-02-11 21:46:39 +00:00
stringerimp.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
struct.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
sum.go [dev.typeparams] test: update all the typeparam tests to use the new union/tilde syntax 2021-06-03 16:05:22 +00:00
tparam1.go [dev.typeparams] cmd/compile/internal/types2: set compiler error message for undeclared variable 2020-12-02 04:48:13 +00:00
typelist.go cmd/compile: deal correctly with unnamed function params during stenciling 2021-03-31 00:52:26 +00:00
valimp.go [dev.typeparams] cmd/compile: get export/import of generic types & functions working 2021-05-21 03:41:18 +00:00
value.go [dev.typeparams] cmd/compile: export/import of recursive generic types. 2021-06-04 16:43:27 +00:00