]> Cypherpunks.ru repositories - gostls13.git/commitdiff
disallow interface { x, y() }
authorRuss Cox <rsc@golang.org>
Mon, 28 Sep 2009 21:05:34 +0000 (14:05 -0700)
committerRuss Cox <rsc@golang.org>
Mon, 28 Sep 2009 21:05:34 +0000 (14:05 -0700)
R=ken
OCL=35042
CL=35044

src/cmd/gc/go.y
test/fixedbugs/bug121.go
test/ken/embed.go
test/ken/interfun.go

index af7285d4a39cde5b2f92f98335d11b4a2132cb06..9aa2f1ab089848a8778bade5b467f5552c0aefa8 100644 (file)
@@ -54,7 +54,7 @@
 %type  <node>  expr_or_type
 %type  <node>  fndcl fnliteral
 %type  <node>  for_body for_header for_stmt if_header if_stmt
-%type  <node>  keyval labelname name
+%type  <node>  interfacedcl keyval labelname name
 %type  <node>  name_or_type non_expr_type
 %type  <node>  new_name dcl_name oexpr typedclname
 %type  <node>  onew_name
@@ -67,7 +67,7 @@
 %type  <list>  xdcl fnbody fnres switch_body loop_body dcl_name_list
 %type  <list>  new_name_list expr_list keyval_list braced_keyval_list expr_or_type_list xdcl_list
 %type  <list>  oexpr_list oexpr_or_type_list caseblock_list stmt_list oarg_type_list arg_type_list
-%type  <list>  interfacedcl_list interfacedcl vardcl vardcl_list structdcl structdcl_list
+%type  <list>  interfacedcl_list vardcl vardcl_list structdcl structdcl_list
 %type  <list>  common_dcl constdcl constdcl1 constdcl_list typedcl_list
 
 %type  <node>  convtype dotdotdot
@@ -1226,9 +1226,12 @@ structdcl_list:
 
 interfacedcl_list:
        interfacedcl
+       {
+               $$ = list1($1);
+       }
 |      interfacedcl_list ';' interfacedcl
        {
-               $$ = concat($1, $3);
+               $$ = list($1, $3);
        }
 
 structdcl:
@@ -1284,17 +1287,13 @@ embed:
        }
 
 interfacedcl:
-       new_name_list indcl
+       new_name indcl
        {
-               NodeList *l;
-
-               for(l=$1; l; l=l->next)
-                       l->n = nod(ODCLFIELD, l->n, $2);
-               $$ = $1;
+               $$ = nod(ODCLFIELD, $1, $2);
        }
 |      packname
        {
-               $$ = list1(nod(ODCLFIELD, N, oldname($1)));
+               $$ = nod(ODCLFIELD, N, oldname($1));
        }
 
 indcl:
index 7bd721815dda1dcd281f122d34f40d9422cf4037..71d3ee4252e6852b37daaf2c12a92886ecedb324 100644 (file)
@@ -9,7 +9,10 @@ package main
 type T func()
 
 type I interface {
-       f, g ();
+       f, g ();        // ERROR "syntax|signature"
+}
+
+type J interface {
        h T;  // ERROR "syntax|signature"
 }
 
index 8f4641e81162411c0a4e20e8775ea50a4ff23a92..5978f7747fdd02a74de065e7d9cbe2a56704db67 100644 (file)
@@ -10,12 +10,12 @@ package main
 type
 I      interface
 {
-       test1,
-       test2,
-       test3,
-       test4,
-       test5,
-       test6,
+       test1() int;
+       test2() int;
+       test3() int;
+       test4() int;
+       test5() int;
+       test6() int;
        test7() int;
 };
 
index 876d94128dc3cfc6debd25d462f9c5e1e472387d..c508c73c302a1f8682a76b99e7b7f1488cc20077 100644 (file)
@@ -18,7 +18,8 @@ type I1 interface
 
 type I2 interface
 {
-       g,f     ()int;
+       g() int;
+       f() int;
 }
 
 func