Commit 8ae423ef authored by Robert Griesemer's avatar Robert Griesemer

cmd/compile: document parsing decision for imported interfaces

Fixes #13245.

Change-Id: I87be63cc7b27f70ca2f9fb6bc9908b9061fe3d9d
Reviewed-on: https://go-review.googlesource.com/17203Reviewed-by: default avatarChris Manghane <cmang@golang.org>
parent ccdcd6e9
...@@ -3279,24 +3279,32 @@ func (p *parser) hidden_interfacedcl() *Node { ...@@ -3279,24 +3279,32 @@ func (p *parser) hidden_interfacedcl() *Node {
defer p.trace("hidden_interfacedcl")() defer p.trace("hidden_interfacedcl")()
} }
// TODO(gri) possible conflict here: both cases may start with '@' per grammar // The original (now defunct) grammar in go.y accepted both a method
// (issue 13245). // 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 { s1 := p.sym()
case LNAME, '@', '?': p.want('(')
s1 := p.sym() s3 := p.ohidden_funarg_list()
p.want('(') p.want(')')
s3 := p.ohidden_funarg_list() s5 := p.ohidden_funres()
p.want(')')
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)) return Nod(ODCLFIELD, newname(s1), typenod(functype(fakethis(), s3, s5)))
}
} }
func (p *parser) ohidden_funres() *NodeList { func (p *parser) ohidden_funres() *NodeList {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment