summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-02-11 15:09:15 -0800
committerRobert Griesemer <gri@golang.org>2009-02-11 15:09:15 -0800
commita0cfe5c034413449494b330fd538bfdccadb6b2b (patch)
tree5653f5a7bca17563fc18ff8116bdb9a17a5d6dcd
parentf61fef6f099a8ab2c009b4f9904569d38d0744e8 (diff)
downloadgolang-a0cfe5c034413449494b330fd538bfdccadb6b2b.tar.gz
- language for embedded interfaces (as discussed this morning)
- fixed a syntax error R=r DELTA=17 (15 added, 0 deleted, 2 changed) OCL=24876 CL=24889
-rw-r--r--doc/go_spec.txt19
1 files changed, 17 insertions, 2 deletions
diff --git a/doc/go_spec.txt b/doc/go_spec.txt
index cddcf983e..7417e03c4 100644
--- a/doc/go_spec.txt
+++ b/doc/go_spec.txt
@@ -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).