mirror of
https://github.com/golang/go
synced 2024-09-30 00:24:29 -06:00
cmd/compile: document parsing decision for imported interfaces
Fixes #13245. Change-Id: I87be63cc7b27f70ca2f9fb6bc9908b9061fe3d9d Reviewed-on: https://go-review.googlesource.com/17203 Reviewed-by: Chris Manghane <cmang@golang.org>
This commit is contained in:
parent
ccdcd6e903
commit
8ae423ef84
@ -3279,11 +3279,25 @@ func (p *parser) hidden_interfacedcl() *Node {
|
||||
defer p.trace("hidden_interfacedcl")()
|
||||
}
|
||||
|
||||
// TODO(gri) possible conflict here: both cases may start with '@' per grammar
|
||||
// (issue 13245).
|
||||
// The original (now defunct) grammar in go.y accepted both a method
|
||||
// or an (embedded) type:
|
||||
//
|
||||
// hidden_interfacedcl:
|
||||
// sym '(' ohidden_funarg_list ')' ohidden_funres
|
||||
// {
|
||||
// $$ = Nod(ODCLFIELD, newname($1), typenod(functype(fakethis(), $3, $5)));
|
||||
// }
|
||||
// | hidden_type
|
||||
// {
|
||||
// $$ = Nod(ODCLFIELD, nil, typenod($1));
|
||||
// }
|
||||
//
|
||||
// But the current textual export code only exports (inlined) methods,
|
||||
// even if the methods came from embedded interfaces. Furthermore, in
|
||||
// the original grammar, hidden_type may also start with a sym (LNAME
|
||||
// or '@'), complicating matters further. Since we never have embedded
|
||||
// types, only parse methods here.
|
||||
|
||||
switch p.tok {
|
||||
case LNAME, '@', '?':
|
||||
s1 := p.sym()
|
||||
p.want('(')
|
||||
s3 := p.ohidden_funarg_list()
|
||||
@ -3291,12 +3305,6 @@ func (p *parser) hidden_interfacedcl() *Node {
|
||||
s5 := p.ohidden_funres()
|
||||
|
||||
return Nod(ODCLFIELD, newname(s1), typenod(functype(fakethis(), s3, s5)))
|
||||
|
||||
default:
|
||||
s1 := p.hidden_type()
|
||||
|
||||
return Nod(ODCLFIELD, nil, typenod(s1))
|
||||
}
|
||||
}
|
||||
|
||||
func (p *parser) ohidden_funres() *NodeList {
|
||||
|
Loading…
Reference in New Issue
Block a user