allow parens to disambiguate types.

examples:

	chan <- (chan int)
	chan (<- chan int)
	(map[string]func())("a": main)

R=ken
OCL=25151
CL=25151
This commit is contained in:
Russ Cox 2009-02-18 10:07:46 -08:00
parent 6950491b4f
commit ebc10db3e1
2 changed files with 29 additions and 1 deletions

View File

@ -1004,6 +1004,10 @@ convtype:
$$->type = $5;
}
| structtype
| '(' type ')'
{
$$ = $2;
}
/*
* to avoid parsing conflicts, type is split into
@ -1031,6 +1035,10 @@ Btype:
| Bchantype
| Bfntype
| Bothertype
| '(' type ')'
{
$$ = $2;
}
non_name_type:
chantype
@ -1052,6 +1060,10 @@ Bnon_chan_type:
nametype
| Bfntype
| Bothertype
| '(' Btype ')'
{
$$ = $2;
}
Anon_fn_type:
Achantype
@ -1062,7 +1074,6 @@ Bnon_fn_type:
| Bchantype
| Bothertype
nametype:
LATYPE
{

17
test/parentype.go Normal file
View File

@ -0,0 +1,17 @@
// $G $D/$F.go
// Copyright 2009 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.
package main
func f(interface{})
func g() {}
func main() {
f(map[string]string("a":"b","c":"d"));
f((map[string]string)("a":"b","c":"d"));
f((map[string]func())("a":g,"c":g));
f(make(chan(<-chan int)));
f(make(chan<-(chan int)));
}