func (check *Checker) arguments(call *syntax.CallExpr, sig *Signature, targs []Type, xlist []syntax.Expr, args []*operand) (rsig *Signature) {
rsig = sig
- // TODO(gri) try to eliminate this extra verification loop
- for _, a := range args {
- switch a.mode {
- case typexpr:
- check.errorf(a, NotAnExpr, "%s used as value", a)
- return
- case invalid:
- return
- }
- }
-
// Function call argument/parameter count requirements
//
// | standard call | dotdotdot call |
func (check *Checker) arguments(call *ast.CallExpr, sig *Signature, targs []Type, xlist []ast.Expr, args []*operand) (rsig *Signature) {
rsig = sig
- // TODO(gri) try to eliminate this extra verification loop
- for _, a := range args {
- switch a.mode {
- case typexpr:
- check.errorf(a, NotAnExpr, "%s used as value", a)
- return
- case invalid:
- return
- }
- }
-
// Function call argument/parameter count requirements
//
// | standard call | dotdotdot call |
f2(3.14) /* ERROR "not enough arguments in call to f2\n\thave (number)\n\twant (float32, string)" */
f2(3.14, "foo")
f2(x /* ERRORx `cannot use .* in argument` */ , "foo")
- f2(g0 /* ERROR "used as value" */ ())
+ f2(g0 /* ERROR "used as value" */ ()) /* ERROR "not enough arguments in call to f2\n\thave (func())\n\twant (float32, string)" */
f2(g1()) /* ERROR "not enough arguments in call to f2\n\thave (int)\n\twant (float32, string)" */
f2(g2())
// crash 20
type Z20 /* ERROR "invalid recursive type" */ interface{ Z20 }
-func F20[t Z20]() { F20(t /* ERROR "invalid composite literal type" */ {}) }
+func F20[t Z20]() { F20(t /* ERROR "invalid composite literal type" */ /* ERROR "too many arguments in call to F20\n\thave (unknown type)\n\twant ()" */ {}) }
// crash 21
type Z21 /* ERROR "invalid recursive type" */ interface{ Z21 }