summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/gc/go.y13
-rw-r--r--test/parentype.go17
2 files changed, 29 insertions, 1 deletions
diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y
index d68576428..320c9c684 100644
--- a/src/cmd/gc/go.y
+++ b/src/cmd/gc/go.y
@@ -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
{
diff --git a/test/parentype.go b/test/parentype.go
new file mode 100644
index 000000000..f163f55d6
--- /dev/null
+++ b/test/parentype.go
@@ -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)));
+}