]> Cypherpunks.ru repositories - gostls13.git/commit
[dev.typeparams] go/*: switch from ListExpr to MultiIndexExpr
authorRob Findley <rfindley@google.com>
Fri, 11 Jun 2021 14:58:43 +0000 (10:58 -0400)
committerRobert Findley <rfindley@google.com>
Fri, 16 Jul 2021 00:44:40 +0000 (00:44 +0000)
commit334f2fc045b7d9d846cccba01b3a0dbf70ddb0db
tree61e338650d1b00b8d509fcedf6715b40deca27a6
parent6b85a218b86fbc46916d838724d674baf312cc3c
[dev.typeparams] go/*: switch from ListExpr to MultiIndexExpr

When instantiating a generic type or function with multiple type
arguments, we need to represent an index expression with multiple
indexes in the AST. Previous to this CL this was done with a new
ast.ListExpr node, which allowed packing multiple expressions into a
single ast.Expr. This compositional pattern can be both inefficient and
cumbersome to work with, and introduces a new node type that only exists
to augment the meaning of an existing node type.

By comparison, other specializations of syntax are given distinct nodes
in go/ast, for example variations of switch or for statements, so the
use of ListExpr was also (arguably) inconsistent.

This CL removes ListExpr, and instead adds a MultiIndexExpr node, which
is exactly like IndexExpr but allows for multiple index arguments. This
requires special handling for this new node type, but a new wrapper in
the typeparams helper package largely mitigates this special handling.

Change-Id: I65eb29c025c599bae37501716284dc7eb953b2ad
Reviewed-on: https://go-review.googlesource.com/c/go/+/327149
Trust: Robert Findley <rfindley@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
14 files changed:
src/go/ast/ast.go
src/go/ast/walk.go
src/go/internal/typeparams/typeparams.go
src/go/parser/parser.go
src/go/printer/nodes.go
src/go/types/call.go
src/go/types/expr.go
src/go/types/exprstring.go
src/go/types/index.go
src/go/types/resolver.go
src/go/types/signature.go
src/go/types/testdata/check/typeinst.go2
src/go/types/testdata/fixedbugs/issue45635.go2
src/go/types/typexpr.go