// Copyright 2021 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file contains test cases for typeset-only constraint elements.
// TODO(gri) gofmt once/if gofmt supports this notation.

package p

type (
        _[_ t] t
        _[_ ~t] t
        _[_ t|t] t
        _[_ ~t|t] t
        _[_ t|~t] t
        _[_ ~t|~t] t

        _[_ t, _, _ t|t] t
        _[_ t, _, _ ~t|t] t
        _[_ t, _, _ t|~t] t
        _[_ t, _, _ ~t|~t] t

        _[_ t.t] t
        _[_ ~t.t] t
        _[_ t.t|t.t] t
        _[_ ~t.t|t.t] t
        _[_ t.t|~t.t] t
        _[_ ~t.t|~t.t] t

        _[_ t, _, _ t.t|t.t] t
        _[_ t, _, _ ~t.t|t.t] t
        _[_ t, _, _ t.t|~t.t] t
        _[_ t, _, _ ~t.t|~t.t] t

        _[_ struct{}] t
        _[_ ~struct{}] t

        _[_ struct{}|t] t
        _[_ ~struct{}|t] t
        _[_ struct{}|~t] t
        _[_ ~struct{}|~t] t

        _[_ t|struct{}] t
        _[_ ~t|struct{}] t
        _[_ t|~struct{}] t
        _[_ ~t|~struct{}] t
)

// Single-expression type parameter lists and those that don't start
// with a (type parameter) name are considered array sizes.
// The term must be a valid expression (it could be a type - and then
// a type-checker will complain - but we don't allow ~ in the expr).
// TODO(rfindley): Improve error recover here. In these cases go/parser error
// recovery is worse than cmd/compile/internal/syntax, and unnecessary type
// declarations had to be inserted to force synchronization.
type _[t] t
type _[~ /* ERROR "expected operand" */ t] t
type /* ERROR "expected ']'" */ Sync int  // placeholder to synchronize the parser
type _[t|t] t
type _[~ /* ERROR "expected operand" */ t|t] t
type /* ERROR "expected ']'" */ Sync int  // placeholder to synchronize the parser
type _[t| ~ /* ERROR "expected operand" */ t] t
type /* ERROR "expected ']'" */ Sync int  // placeholder to synchronize the parser
type _[~ /* ERROR "expected operand" */ t|~t] t
type /* ERROR "expected ']'" */ Sync int  // placeholder to synchronize the parser

type _[_ t, t /* ERROR "type parameters must be named" */ ] t
type _[_ ~t, t /* ERROR "type parameters must be named" */ ] t
type _[_ t, ~ /* ERROR "type parameters must be named" */ t] t
type _[_ ~t, ~ /* ERROR "type parameters must be named" */ t] t

type _[_ t|t, t /* ERROR "type parameters must be named" */ |t] t
type _[_ ~t|t, t /* ERROR "type parameters must be named" */ |t] t
type _[_ t|t, ~ /* ERROR "type parameters must be named" */ t|t] t
type _[_ ~t|t, ~ /* ERROR "type parameters must be named" */ t|t] t
