mirror of
https://github.com/golang/go
synced 2024-11-22 00:44:39 -07:00
disallow parens around type in struct literal syntax,
per discussion with gri. R=ken OCL=35108 CL=35108
This commit is contained in:
parent
8f8b735295
commit
9c3c140984
@ -70,7 +70,7 @@
|
||||
%type <list> interfacedcl_list vardcl vardcl_list structdcl structdcl_list
|
||||
%type <list> common_dcl constdcl constdcl1 constdcl_list typedcl_list
|
||||
|
||||
%type <node> convtype dotdotdot
|
||||
%type <node> convtype dotdotdot littype
|
||||
%type <node> indcl interfacetype structtype ptrtype
|
||||
%type <node> chantype non_chan_type othertype non_fn_type fntype
|
||||
|
||||
@ -862,7 +862,7 @@ pexpr:
|
||||
if($2 == LBODY)
|
||||
loophack = 1;
|
||||
}
|
||||
| pexpr '{' braced_keyval_list '}'
|
||||
| littype '{' braced_keyval_list '}'
|
||||
{
|
||||
// composite expression
|
||||
$$ = nod(OCOMPLIT, N, $1);
|
||||
@ -870,6 +870,20 @@ 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
|
||||
@ -942,6 +956,7 @@ convtype:
|
||||
}
|
||||
| structtype
|
||||
|
||||
|
||||
/*
|
||||
* to avoid parsing conflicts, type is split into
|
||||
* channel types
|
||||
|
@ -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{<can't iterate on maps>}" },
|
||||
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) {
|
||||
|
12
test/fixedbugs/bug207.go
Normal file
12
test/fixedbugs/bug207.go
Normal file
@ -0,0 +1,12 @@
|
||||
// $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"
|
@ -10,8 +10,6 @@ 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)));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user