]> Cypherpunks repositories - gostls13.git/commitdiff
- language for embedded interfaces (as discussed this morning)
authorRobert Griesemer <gri@golang.org>
Wed, 11 Feb 2009 23:09:15 +0000 (15:09 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 11 Feb 2009 23:09:15 +0000 (15:09 -0800)
- fixed a syntax error

R=r
DELTA=17  (15 added, 0 deleted, 2 changed)
OCL=24876
CL=24889

doc/go_spec.txt

index cddcf983e37aa00bdc2743e64c90a2e5a3e7faff..7417e03c40ea0f64d4765faa3b22152da5596397 100644 (file)
@@ -1218,7 +1218,7 @@ types (§Types).
 
        StructType = "struct" [ "{" [ FieldDeclList ] "}" ] .
        FieldDeclList = FieldDecl { ";" FieldDecl } [ ";" ] .
-       FieldDecl = (IdentifierList CompleteType | TypeName) [ Tag ] .
+       FieldDecl = (IdentifierList CompleteType | [ "*" ] TypeName) [ Tag ] .
        Tag = StringLit .
 
        // An empty struct.
@@ -1387,7 +1387,7 @@ the set of methods specified by the interface type, and the value "nil".
 
        InterfaceType = "interface" [ "{" [ MethodSpecList ] "}" ] .
        MethodSpecList = MethodSpec { ";" MethodSpec } [ ";" ] .
-       MethodSpec = IdentifierList Signature .
+       MethodSpec = IdentifierList Signature | TypeName .
 
        // An interface specifying a basic File type.
        interface {
@@ -1425,6 +1425,21 @@ If S1 and S2 also implement
 
 they implement the Lock interface as well as the File interface.
 
+An interface may contain a type name T in place of a method specification.
+T must denote another, complete (and not forward-declared) interface type.
+Using this notation is equivalent to enumerating the methods of T explicitly
+in the interface containing T.
+
+       type ReadWrite interface {
+               Read, Write     (b Buffer) bool;
+       }
+
+       type File interface {
+               ReadWrite;  // same as enumerating the methods in ReadWrite
+               Lock;       // same as enumerating the methods in Lock
+               Close();
+       }
+
 Forward declaration:
 A interface type consisting of only the reserved word "interface" may be used in
 a type declaration; it declares an incomplete interface type (§Type declarations).