1
0
mirror of https://github.com/golang/go synced 2024-11-21 17:44:40 -07:00

fix for incorrect type switch clause:

- nil is not a keyword
- type -> Type

R=rsc
DELTA=10  (4 added, 0 deleted, 6 changed)
OCL=30433
CL=30435
This commit is contained in:
Robert Griesemer 2009-06-17 14:31:33 -07:00
parent 410ba58604
commit 3b576a7704

View File

@ -7,6 +7,7 @@ Open issues:
- declaration "type T S" strips methods of S. why/why not?
- no mechanism to declare a local type name: type T P.T
Todo's:
[ ] document illegality of package-external tuple assignments to structs
w/ private fields: P.T(1, 2) illegal since same as P.T(a: 1, b: 2) for
@ -447,7 +448,7 @@ because the size of the pointer itself is always known.
interface fit in here.)
</p>
<p>
A type may have a method set associated with it
A type may have a <i>method set</i> associated with it
(§Interface types, §Method declarations).
The method set of an interface type (§Interface types) is its interface.
The method set of any other named type <code>T</code>
@ -1341,7 +1342,7 @@ If an identifier satisfies these two conditions:
declared at the top level;
</ol>
<p>
it will be exported automatically.
it will be exported.
</p>
<h3>Const declarations</h3>
@ -3303,10 +3304,13 @@ in the type assertion.
TypeSwitchStmt = "switch" [ [ SimpleStmt ] ";" ] TypeSwitchGuard "{" { TypeCaseClause } "}" .
TypeSwitchGuard = identifier ":=" Expression "." "(" "type" ")" .
TypeCaseClause = TypeSwitchCase ":" [ StatementList ] .
TypeSwitchCase = "case" ( type | "nil" ) | "default" .
TypeSwitchCase = "case" Type | "default" .
</pre>
<p>
As a special case, the type in the type switch case may be an
identifier denoting the predeclared constant <code>nil</code>
(§Predeclared identifiers).
If the interface value equals <code>nil</code>,
only an explict <code>nil</code> case or "default"
case will execute.