Commit e2cb60b3 authored by Robert Griesemer's avatar Robert Griesemer

fix for conversion rule

R=rsc
DELTA=25  (10 added, 7 deleted, 8 changed)
OCL=30516
CL=30531
parent a6c7a80b
...@@ -997,7 +997,7 @@ A channel provides a mechanism for two concurrently executing functions ...@@ -997,7 +997,7 @@ A channel provides a mechanism for two concurrently executing functions
to synchronize execution and communicate by passing a value of a to synchronize execution and communicate by passing a value of a
specified element type. The element type must be complete (§Types). specified element type. The element type must be complete (§Types).
(TODO: is completeness necessary here?) (TODO: is completeness necessary here?)
A channel value may be <code>nil</code>. A value of channel type may be <code>nil</code>.
</p> </p>
<pre class="grammar"> <pre class="grammar">
...@@ -1161,19 +1161,22 @@ be assigned to otherwise incompatible types: ...@@ -1161,19 +1161,22 @@ be assigned to otherwise incompatible types:
</p> </p>
<ul> <ul>
<li> <li>
A value can be assigned to an interface variable if the static
type of the value implements the interface.
</li>
<li>
The predeclared constant <code>nil</code> can be assigned to any The predeclared constant <code>nil</code> can be assigned to any
pointer, function, slice, map, channel, or interface variable. pointer, function, slice, map, channel, or interface variable.
<li> <li>
A pointer to an array can be assigned to a slice variable with compatible element type. A pointer <code>p</code> to an array can be assigned to a slice variable
<code>v</code> with compatible element type
if the type of <code>p</code> or <code>v</code> is unnamed.
The slice variable then refers to the original array; the data is not copied. The slice variable then refers to the original array; the data is not copied.
</li> </li>
<li> <li>
A value can be assigned to an interface variable if the static A bidirectional channel <code>c</code> can be assigned to a channel variable
type of the value implements the interface. <code>v</code> with compatible channel value type
</li> if the type of <code>c</code> or <code>v</code> is unnamed.
<li>
A value of bidirectional channel type can be assigned to any channel
variable of compatible channel value type.
</li> </li>
</ul> </ul>
...@@ -3846,13 +3849,13 @@ The following conversion rules apply: ...@@ -3846,13 +3849,13 @@ The following conversion rules apply:
</p> </p>
<ul> <ul>
<li> <li>
1) Between two compatible types (§Type identity and compatibility). 1) The conversion succeeds if the value is assignment-compatible
The conversion always succeeds. to a variable of type T.
</li> </li>
<li> <li>
2) Between two types that would be compatible if they 2) The conversion succeeds if the value would be assignment-compatible
or any of their component types were unnamed (§Type identity and compatibility). to a variable of type T if the value type or T or any of their component
The conversion always succeeds. types are unnamed (§Type identity and compatibility).
</li> </li>
<li> <li>
3) Between integer types. If the value is a signed quantity, it is 3) Between integer types. If the value is a signed quantity, it is
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment