]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] go/types: fix some merge errors in call.go
authorRob Findley <rfindley@google.com>
Fri, 15 Jan 2021 17:45:11 +0000 (12:45 -0500)
committerRobert Findley <rfindley@google.com>
Tue, 19 Jan 2021 22:53:48 +0000 (22:53 +0000)
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>

src/go/types/call.go

index e10e0a643d4e82755497dc8cef45c3a23c1c2119..97a9d0ea8f3024179152c173a5c8a6e5444fc61e 100644 (file)
@@ -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
@@ -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 {
@@ -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)
@@ -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)