mirror of
https://github.com/golang/go
synced 2024-09-04 23:44:16 +00:00
[dev.typeparams] cmd/compile/internal/syntax: accept embedded type literals
The parser accepted embedded elements but the first term of an element had to be a ~-term or a type name. This CL fixes that. Change-Id: I013b6cdc5963fb228867ca6597f9139db2be7ec5 Reviewed-on: https://go-review.googlesource.com/c/go/+/321109 Trust: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com>
This commit is contained in:
parent
f3fc8b5779
commit
81b22480cf
|
@ -1443,6 +1443,18 @@ func (p *parser) interfaceType() *InterfaceType {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
if p.mode&AllowGenerics != 0 {
|
||||||
|
pos := p.pos()
|
||||||
|
if t := p.typeOrNil(); t != nil {
|
||||||
|
f := new(Field)
|
||||||
|
f.pos = pos
|
||||||
|
f.Type = t
|
||||||
|
typ.MethodList = append(typ.MethodList, p.embeddedElem(f))
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if p.mode&AllowGenerics != 0 {
|
if p.mode&AllowGenerics != 0 {
|
||||||
|
|
|
@ -25,7 +25,6 @@ type _ interface {
|
||||||
~int | ~string
|
~int | ~string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
type _ interface {
|
type _ interface {
|
||||||
m()
|
m()
|
||||||
~int
|
~int
|
||||||
|
@ -34,3 +33,48 @@ type _ interface {
|
||||||
~int | ~string
|
~int | ~string
|
||||||
type bool, int, float64
|
type bool, int, float64
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type _ interface {
|
||||||
|
int
|
||||||
|
[]byte
|
||||||
|
[10]int
|
||||||
|
struct{}
|
||||||
|
*int
|
||||||
|
func()
|
||||||
|
interface{}
|
||||||
|
map[string]int
|
||||||
|
chan T
|
||||||
|
chan<- T
|
||||||
|
<-chan T
|
||||||
|
T[int]
|
||||||
|
}
|
||||||
|
|
||||||
|
type _ interface {
|
||||||
|
int | string
|
||||||
|
[]byte | string
|
||||||
|
[10]int | string
|
||||||
|
struct{} | string
|
||||||
|
*int | string
|
||||||
|
func() | string
|
||||||
|
interface{} | string
|
||||||
|
map[string]int | string
|
||||||
|
chan T | string
|
||||||
|
chan<- T | string
|
||||||
|
<-chan T | string
|
||||||
|
T[int] | string
|
||||||
|
}
|
||||||
|
|
||||||
|
type _ interface {
|
||||||
|
~int | string
|
||||||
|
~[]byte | string
|
||||||
|
~[10]int | string
|
||||||
|
~struct{} | string
|
||||||
|
~*int | string
|
||||||
|
~func() | string
|
||||||
|
~interface{} | string
|
||||||
|
~map[string]int | string
|
||||||
|
~chan T | string
|
||||||
|
~chan<- T | string
|
||||||
|
~<-chan T | string
|
||||||
|
~T[int] | string
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue