From: Russ Cox Date: Wed, 30 Sep 2009 04:21:14 +0000 (-0700) Subject: undo 35108 (disallow parens around type in struct literal). X-Git-Tag: weekly.2009-11-06~451 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=6f1698774d7061d30fd74fca7dacde8ea77a39a5;p=gostls13.git undo 35108 (disallow parens around type in struct literal). allow parens around [...]int in struct literal. R=ken OCL=35112 CL=35130 --- diff --git a/src/cmd/gc/go.y b/src/cmd/gc/go.y index 572481309d..bf46f6c1cc 100644 --- a/src/cmd/gc/go.y +++ b/src/cmd/gc/go.y @@ -70,7 +70,7 @@ %type interfacedcl_list vardcl vardcl_list structdcl structdcl_list %type common_dcl constdcl constdcl1 constdcl_list typedcl_list -%type convtype dotdotdot littype +%type convtype dotdotdot %type indcl interfacetype structtype ptrtype %type chantype non_chan_type othertype non_fn_type fntype @@ -862,7 +862,7 @@ pexpr: if($2 == LBODY) loophack = 1; } -| littype '{' braced_keyval_list '}' +| pexpr '{' braced_keyval_list '}' { // composite expression $$ = nod(OCOMPLIT, N, $1); @@ -870,20 +870,6 @@ pexpr: } | fnliteral -littype: - name -| pexpr '.' sym - { - if($1->op == OPACK) { - Sym *s; - s = restrictlookup($3->name, $1->sym->name); - $1->used = 1; - $$ = oldname(s); - break; - } - $$ = nod(OXDOT, $1, newname($3)); - } - expr_or_type: expr | non_expr_type %prec PreferToRightParen @@ -956,7 +942,6 @@ convtype: } | structtype - /* * to avoid parsing conflicts, type is split into * channel types @@ -1031,6 +1016,11 @@ othertype: { $$ = nod(OTARRAY, $2, $4); } +| '[' dotdotdot ']' ntype + { + // array literal of nelem + $$ = nod(OTARRAY, $2, $4); + } | LCOMM LCHAN ntype { $$ = nod(OTCHAN, $3, N); diff --git a/src/pkg/reflect/all_test.go b/src/pkg/reflect/all_test.go index 9fad3947aa..17a526c6fc 100644 --- a/src/pkg/reflect/all_test.go +++ b/src/pkg/reflect/all_test.go @@ -84,15 +84,15 @@ var valueTests = []pair { pair { (bool)(false), "true" }, pair { (*int8)(nil), "*int8(0)" }, pair { (**int8)(nil), "**int8(0)" }, - pair { [5]int32{}, "[5]int32{0, 0, 0, 0, 0}" }, + pair { ([5]int32){}, "[5]int32{0, 0, 0, 0, 0}" }, pair { (**integer)(nil), "**reflect_test.integer(0)" }, pair { (map[string]int32)(nil), "map[string] int32{}" }, pair { (chan<-string)(nil), "chan<- string" }, - pair { struct {c chan *int32; d float32}{}, "struct { c chan *int32; d float32 }{chan *int32, 0}" }, + pair { (struct {c chan *int32; d float32}){}, "struct { c chan *int32; d float32 }{chan *int32, 0}" }, pair { (func(a int8, b int32))(nil), "func(int8, int32)(0)" }, - pair { struct {c func(chan *integer, *int8)}{}, "struct { c func(chan *reflect_test.integer, *int8) }{func(chan *reflect_test.integer, *int8)(0)}" }, - pair { struct {a int8; b int32}{}, "struct { a int8; b int32 }{0, 0}" }, - pair { struct {a int8; b int8; c int32}{}, "struct { a int8; b int8; c int32 }{0, 0, 0}" }, + pair { (struct {c func(chan *integer, *int8)}){}, "struct { c func(chan *reflect_test.integer, *int8) }{func(chan *reflect_test.integer, *int8)(0)}" }, + pair { (struct {a int8; b int32}){}, "struct { a int8; b int32 }{0, 0}" }, + pair { (struct {a int8; b int8; c int32}){}, "struct { a int8; b int8; c int32 }{0, 0, 0}" }, } func testType(t *testing.T, i int, typ Type, want string) { diff --git a/test/fixedbugs/bug207.go b/test/fixedbugs/bug207.go deleted file mode 100644 index de68cfe66b..0000000000 --- a/test/fixedbugs/bug207.go +++ /dev/null @@ -1,12 +0,0 @@ -// $G $D/$F.go && $L $F.$A && ./$A.out - -// 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 - -var _ = []int{} -var _ = ([]int){} // ERROR "syntax" -var _ = [...]int{} -var _ = ([...]int){} // ERROR "syntax" diff --git a/test/parentype.go b/test/parentype.go index dd9c4891c9..d5729f820d 100644 --- a/test/parentype.go +++ b/test/parentype.go @@ -10,6 +10,10 @@ func f(interface{}) func g() {} func main() { f(map[string]string{"a":"b","c":"d"}); + f([...]int{1,2,3}); + f(([...]int){1,2,3}); + 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))); }