Skip to content

Commit

Permalink
[dev.typeparams] go/types: fix some merge errors in call.go
Browse files Browse the repository at this point in the history
Some comments were left unresolved in the merge of call.go. Resolve them
to get tests to pass (tests to be added in a later CL).

Change-Id: Icf894593e7dd5131406c4eece8d43d4cd3170d1c
Reviewed-on: https://go-review.googlesource.com/c/go/+/284255
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>
  • Loading branch information
findleyr committed Jan 19, 2021
1 parent 3e15bf7 commit 48a3cb3
Showing 1 changed file with 12 additions and 14 deletions.
26 changes: 12 additions & 14 deletions src/go/types/call.go
Expand Up @@ -116,9 +116,7 @@ func (check *Checker) call(x *operand, call *ast.CallExpr, orig ast.Expr) exprKi
// If the first argument is a type, assume we have explicit type arguments.

// check number of type arguments
// TODO(rFindley)
// if !check.conf.InferFromConstraints && n != len(sig.tparams) || n > len(sig.tparams) {
if n != len(sig.tparams) || n > len(sig.tparams) {
if n > len(sig.tparams) {
check.errorf(args[n-1], 0, "got %d type arguments but want %d", n, len(sig.tparams))
x.mode = invalid
x.expr = orig
Expand All @@ -127,7 +125,8 @@ func (check *Checker) call(x *operand, call *ast.CallExpr, orig ast.Expr) exprKi

// collect types
targs := make([]Type, n)
// TODO(rFindley) positioner?
// TODO(rFindley) use a positioner here? instantiate would need to be
// updated accordingly.
poslist := make([]token.Pos, n)
for i, a := range args {
if a.mode != typexpr {
Expand Down Expand Up @@ -192,7 +191,11 @@ func (check *Checker) call(x *operand, call *ast.CallExpr, orig ast.Expr) exprKi
return expression
}

// If we reach here, orig must have been a regular call, not an index expression.
// If we reach here, orig must have been a regular call, not an index
// expression.
// TODO(rFindley) with a manually constructed AST it is possible to reach
// this assertion. We should return an invalidAST error here
// rather than panicking.
assert(!call.Brackets)

sig = check.arguments(call, sig, args)
Expand Down Expand Up @@ -411,15 +414,10 @@ func (check *Checker) arguments(call *ast.CallExpr, sig *Signature, args []*oper
if failed >= 0 {
// Some type arguments couldn't be inferred. Use
// bounds type inference to try to make progress.
// TODO(rFindley)
/*
if check.conf.InferFromConstraints {
targs, failed = check.inferB(sig.tparams, targs)
if targs == nil {
return // error already reported
}
}
*/
targs, failed = check.inferB(sig.tparams, targs)
if targs == nil {
return // error already reported
}
if failed >= 0 {
// at least one type argument couldn't be inferred
assert(targs[failed] == nil)
Expand Down

0 comments on commit 48a3cb3

Please sign in to comment.