Commit Graph

12 Commits

Author SHA1 Message Date
Erik Ernst 5b3b1996a8 Integrated generalized-void.md into dartLangSpec.tex
Also marked the feature specification generalized-void.md
as background material

Change-Id: I08c9b54d956208db5aa8e695540b0c1fc941e46b
Reviewed-on: https://dart-review.googlesource.com/c/86421
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-12-21 18:33:19 +00:00
Erik Ernst f071f7ce64 Updated the status of each feature specification as needed
Change-Id: I23c7e77ac64ce2cad288f42505ccf07257f00abc
Reviewed-on: https://dart-review.googlesource.com/71861
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-09-07 07:03:52 +00:00
Erik Ernst 0c187585c5 Added return-void-2-dynamic to whitelist of generalized-void.md
We need to clarify the following case:
`dynamic foo() => print('');`,
`dynamic bar() { return print(''); }`
that is, using `return e` where `e` has type `void`, when the return
type of the enclosing function is `dynamic` (inferred or explicit).

We do not currently have any elements in the generalized-void.md
whitelist for that, so it's an error. However, invalid_returns.md
from https://dart-review.googlesource.com/c/sdk/+/60401 implies
(patchset 6: line 19-20 and 34-35) that it is allowed.
It is my impression that we agree on invalid_returns.md, and also
that it describes the current behavior (maybe not 100%?).

This indicates to me that we should, probably, add an element to
the above-mentioned whitelist to allow it.

This CL makes that change to generalized-void.md.

Change-Id: I0326081960deda907b3b4ff34bd2d60f7c9dc35b
Reviewed-on: https://dart-review.googlesource.com/64341
Reviewed-by: Erik Ernst <eernst@google.com>
2018-08-01 12:18:07 +00:00
Leaf Petersen 73663ae7c6 Allow void on the RHS of null coalescing expressions
Change-Id: I2e2d16c890c735260669d60725085861e66996aa
Reviewed-on: https://dart-review.googlesource.com/67081
Reviewed-by: Erik Ernst <eernst@google.com>
2018-07-30 17:44:40 +00:00
Erik Ernst 7d07f8d68b Add new allowed placements of void expressions for void-to-void flow.
As an example of a void-to-void data flow, consider `void x = foo();`,
where `foo` has return type `void`. In general, a void-to-void data
flow is a computation which is trivial (we may select one of two
branches in a conditional expression and otherwise only pass the value
on without any computation) where the expression being evaluated has
type void, and the target that receives the value is also of type
void.

This CL makes adjustments to generalized-void.md such that void-to-void
data flows are allowed.

Change-Id: Ia1722cd399c77c57cc5c61e9c10b7a84a18fe107
Reviewed-on: https://dart-review.googlesource.com/38060
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2018-03-14 16:46:40 +00:00
Erik Ernst f5a00ae3a8 Removed references to FutureOr<void> from generalized-void.md
It turns out that the special case for FutureOr<void> that I added in
https://dart-review.googlesource.com/c/sdk/+/35920 was misunderstood,
nobody really wanted it.

This CL removes all references to `FutureOr` in generalized-void.md,
which removes that special case and also the concept of types that are
"void equivalent" (because such types are not used any more).

The message here is that we are now more consistent in our protection
of developers against accidentally discarding a value which is
meaningful (just like `void foo() { return 42; }`), because they've
forgotten that the return type is `void`.

Change-Id: Ia4e6e00b2d33ff434923de7eb78d000cd7cc1c3e
Reviewed-on: https://dart-review.googlesource.com/41822
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Reviewed-by: Leaf Petersen <leafp@google.com>
2018-02-22 07:58:19 +00:00
Erik Ernst c01d59bc7e Adjusted generalized-void.md to make for-in on a void iterator an error, except when the iteration variable has type void.
A similar rule applies to asynchronous for-in loops.

Change-Id: I88ba234c27a38167eaac0350d269e88894a0fe9e
Reviewed-on: https://dart-review.googlesource.com/35920
Reviewed-by: Leaf Petersen <leafp@google.com>
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2018-02-14 18:44:03 +00:00
Erik Ernst 9f9987f709 It is now an error to have void foo() { return 42; }
The language team several times agreed to make it an error when a
non-void expression `e` is used in `return e;` in the body of a
function whose return type is `void`.

When `void` is changed from a near-bottom type to a top type, the
wording in the language specification (dartLangSpec.tex) does _not_
ensure that this is an error, because all types are assignable to
`void`, so we need a specific rule saying that it is an error.

This CL adds such a rule to the feature spec for generalized void.
It also adds a rule that makes it an error to have return type `void`
in a function marked `async*` or `sync*`, based on the reasoning
that they "are returning a Future/Stream/Iterable semantically",
and it would now be an error if they did that explicitly.

Change-Id: I22fed9e9fc6097bb50100a151b964045e41ef173
Reviewed-on: https://dart-review.googlesource.com/35680
Reviewed-by: Leaf Petersen <leafp@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
2018-02-14 11:15:12 +00:00
Erik Ernst 9f803a36eb Adjusted status indications on feature specs
The Dart 1 specification of 'generic method syntax' had no status
indicator, it is now marked as 'background material' because generic
methods (in full) have been integrated into the language specification.
Several other changes of a similar nature.

Implication: It should now be possible for readers of these documents
to trust their status indication. As we go, we will need to update them
again, especially when something is integrated into the language
specification.

Do we want to migrate background material to another directory? Do we
want to rename the directory `informal` to `feature` or somesuch?

Change-Id: Ia3851bdbe7b5a46d71848c376906f95feb4db349
Reviewed-on: https://dart-review.googlesource.com/34663
Reviewed-by: Lasse R.H. Nielsen <lrn@google.com>
2018-01-16 13:22:28 +00:00
Erik Ernst 839c321608 Generalized void informal spec clarified in several locations.
R=lrn@google.com

Review-Url: https://codereview.chromium.org/2994363003 .
2017-08-31 12:10:06 +02:00
Erik Ernst 8514557c5a Removed permission to do voidExpression is T and .. is! T.
The informal spec of generalized void used to allow a `typeTest` on
an expression of type void. This CL removes that permission, thus
leaving only `as` as a narrow escape hatch from void, as decided at the
language team meeting on 2017-08-15.

R=lrn@google.com

Review-Url: https://codereview.chromium.org/3001063002 .
2017-08-17 11:31:31 +02:00
Erik Ernst db092ff2fc Transferred the generalized void informal spec to docs/language/informal
R=lrn@google.com

Review-Url: https://codereview.chromium.org/2994003002 .
2017-08-09 16:30:59 +02:00