mirror of https://github.com/golang/go.git
gc: more specific error for statements at top level
R=ken2, r, ken3 CC=golang-dev https://golang.org/cl/1006041
This commit is contained in:
parent
2a591bdf8a
commit
d6e4e18c8c
|
|
@ -53,7 +53,7 @@
|
||||||
%type <node> compound_stmt dotname embed expr
|
%type <node> compound_stmt dotname embed expr
|
||||||
%type <node> expr_or_type
|
%type <node> expr_or_type
|
||||||
%type <node> fndcl fnliteral
|
%type <node> fndcl fnliteral
|
||||||
%type <node> for_body for_header for_stmt if_header if_stmt
|
%type <node> for_body for_header for_stmt if_header if_stmt non_dcl_stmt
|
||||||
%type <node> interfacedcl keyval labelname name
|
%type <node> interfacedcl keyval labelname name
|
||||||
%type <node> name_or_type non_expr_type
|
%type <node> name_or_type non_expr_type
|
||||||
%type <node> new_name dcl_name oexpr typedclname
|
%type <node> new_name dcl_name oexpr typedclname
|
||||||
|
|
@ -271,6 +271,11 @@ xdcl:
|
||||||
{
|
{
|
||||||
$$ = list1($1);
|
$$ = list1($1);
|
||||||
}
|
}
|
||||||
|
| non_dcl_stmt
|
||||||
|
{
|
||||||
|
yyerror("non-declaration statement outside function body");
|
||||||
|
$$ = nil;
|
||||||
|
}
|
||||||
| error
|
| error
|
||||||
{
|
{
|
||||||
$$ = nil;
|
$$ = nil;
|
||||||
|
|
@ -1086,10 +1091,12 @@ fndcl:
|
||||||
$$->nname->ntype = n;
|
$$->nname->ntype = n;
|
||||||
funchdr($$);
|
funchdr($$);
|
||||||
}
|
}
|
||||||
| '(' oarg_type_list_ocomma ')' new_name '(' oarg_type_list_ocomma ')' fnres
|
| '(' oarg_type_list_ocomma ')' sym '(' oarg_type_list_ocomma ')' fnres
|
||||||
{
|
{
|
||||||
Node *rcvr, *t;
|
Node *rcvr, *t;
|
||||||
|
Node *name;
|
||||||
|
|
||||||
|
name = newname($4);
|
||||||
$2 = checkarglist($2, 0);
|
$2 = checkarglist($2, 0);
|
||||||
$6 = checkarglist($6, 1);
|
$6 = checkarglist($6, 1);
|
||||||
$$ = N;
|
$$ = N;
|
||||||
|
|
@ -1108,12 +1115,12 @@ fndcl:
|
||||||
}
|
}
|
||||||
|
|
||||||
$$ = nod(ODCLFUNC, N, N);
|
$$ = nod(ODCLFUNC, N, N);
|
||||||
$$->nname = methodname1($4, rcvr->right);
|
$$->nname = methodname1(name, rcvr->right);
|
||||||
t = nod(OTFUNC, rcvr, N);
|
t = nod(OTFUNC, rcvr, N);
|
||||||
t->list = $6;
|
t->list = $6;
|
||||||
t->rlist = $8;
|
t->rlist = $8;
|
||||||
$$->nname->ntype = t;
|
$$->nname->ntype = t;
|
||||||
$$->shortname = $4;
|
$$->shortname = name;
|
||||||
funchdr($$);
|
funchdr($$);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1340,12 +1347,19 @@ stmt:
|
||||||
{
|
{
|
||||||
$$ = N;
|
$$ = N;
|
||||||
}
|
}
|
||||||
| simple_stmt
|
|
||||||
| compound_stmt
|
| compound_stmt
|
||||||
| common_dcl
|
| common_dcl
|
||||||
{
|
{
|
||||||
$$ = liststmt($1);
|
$$ = liststmt($1);
|
||||||
}
|
}
|
||||||
|
| non_dcl_stmt
|
||||||
|
| error
|
||||||
|
{
|
||||||
|
$$ = N;
|
||||||
|
}
|
||||||
|
|
||||||
|
non_dcl_stmt:
|
||||||
|
simple_stmt
|
||||||
| for_stmt
|
| for_stmt
|
||||||
| switch_stmt
|
| switch_stmt
|
||||||
| select_stmt
|
| select_stmt
|
||||||
|
|
@ -1360,10 +1374,6 @@ stmt:
|
||||||
$$ = $1;
|
$$ = $1;
|
||||||
$$->nelse = list1($3);
|
$$->nelse = list1($3);
|
||||||
}
|
}
|
||||||
| error
|
|
||||||
{
|
|
||||||
$$ = N;
|
|
||||||
}
|
|
||||||
| labelname ':' stmt
|
| labelname ':' stmt
|
||||||
{
|
{
|
||||||
NodeList *l;
|
NodeList *l;
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// errchk $G -e $D/$F.go
|
||||||
|
|
||||||
|
// Copyright 2010 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
|
||||||
|
|
||||||
|
fmt.Printf("hello") // ERROR "non-declaration statement outside function body"
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
}
|
||||||
|
|
||||||
|
x++ // ERROR "non-declaration statement outside function body"
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
}
|
||||||
|
|
||||||
|
x,y := 1, 2 // ERROR "non-declaration statement outside function body"
|
||||||
|
|
||||||
Loading…
Reference in New Issue