Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(476)

Side by Side Diff: docs/language/informal/generalized-void.md

Issue 3001063002: Removed permission to do `voidExpression is T` and `.. is! T`. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 ## Feature: Generalized Void 1 ## Feature: Generalized Void
2 2
3 Author: eernst@ 3 Author: eernst@
4 4
5 **Status**: Under implementation. 5 **Status**: Under implementation.
6 6
7 **This document** is an informal specification of the generalized support 7 **This document** is an informal specification of the generalized support
8 in Dart 1.x for the type `void`. Dart 2 will have a very similar kind of 8 in Dart 1.x for the type `void`. Dart 2 will have a very similar kind of
9 generalized support for `void`, without the function type subtype exception 9 generalized support for `void`, without the function type subtype exception
10 that this feature includes for backward compatibility in Dart 1.x. This 10 that this feature includes for backward compatibility in Dart 1.x. This
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 able to treat the type void as `Object` in all cases during subtype 263 able to treat the type void as `Object` in all cases during subtype
264 checks.* 264 checks.*
265 265
266 It is a static warning for an expression to have type void, except for the 266 It is a static warning for an expression to have type void, except for the
267 following situations: 267 following situations:
268 268
269 * In an expressionStatement `e;`, e may have type void. 269 * In an expressionStatement `e;`, e may have type void.
270 * In the initialization and increment expressions of a for-loop, 270 * In the initialization and increment expressions of a for-loop,
271 `for (e1; e2; e3) {..}`, `e1` and `e3` may have type void. 271 `for (e1; e2; e3) {..}`, `e1` and `e3` may have type void.
272 * In a typeCast `e as T`, `e` may have type void. 272 * In a typeCast `e as T`, `e` may have type void.
273 * In a typeTest `e is T` or `e is! T`, `e` may have type void.
274 * In a parenthesized expression `(e)`, `e` may have type void. 273 * In a parenthesized expression `(e)`, `e` may have type void.
275 * In a return statement `return e;`, when the return type of the innermost 274 * In a return statement `return e;`, when the return type of the innermost
276 enclosing function is the type void, `e` may have type void. 275 enclosing function is the type void, `e` may have type void.
277 276
278 *Note that the parenthesized expression itself has type void, so it is 277 *Note that the parenthesized expression itself has type void, so it is
279 again subject to the same constraints. Also note that we may not allow 278 again subject to the same constraints. Also note that we may not allow
280 return statements returning an expression of type void in the future, but 279 return statements returning an expression of type void in the future, but
281 it is allowed here for backward compatibility.* 280 it is allowed here for backward compatibility.*
282 281
283 During bounds checking, it is possible that a bound of a formal type 282 During bounds checking, it is possible that a bound of a formal type
(...skipping 21 matching lines...) Expand all
305 this would presumably require a transitive traversal of all generic classes 304 this would presumably require a transitive traversal of all generic classes
306 and functions where the corresponding formal type parameter is passed on to 305 and functions where the corresponding formal type parameter is passed on to
307 other generic classes or functions, which would be highly brittle: A tiny 306 other generic classes or functions, which would be highly brittle: A tiny
308 change to a generic class or function could break code far away. So we do 307 change to a generic class or function could break code far away. So we do
309 not wish to prevent formal type parameter bounds from indirectly becoming 308 not wish to prevent formal type parameter bounds from indirectly becoming
310 the type void. This motivated the decision to treat such a void-valued 309 the type void. This motivated the decision to treat such a void-valued
311 bound as `Object`. 310 bound as `Object`.
312 311
313 ## Updates 312 ## Updates
314 313
314 * August 16h 2017: Removed exceptions allowing `e is T` and `e is! T`.
315
315 * August 9th 2017: Transferred to SDK repo, docs/language/informal. 316 * August 9th 2017: Transferred to SDK repo, docs/language/informal.
316 317
317 * July 16th 2017: Reformatted as a gist. 318 * July 16th 2017: Reformatted as a gist.
318 319
319 * June 13th 2017: Compile-time error for using a void value was changed to 320 * June 13th 2017: Compile-time error for using a void value was changed to
320 static warning. 321 static warning.
321 * June 12th 2017: Grammar changed extensively, to use 322 * June 12th 2017: Grammar changed extensively, to use
322 `typeNotVoid` rather than 323 `typeNotVoid` rather than
323 `voidOrType`. 324 `voidOrType`.
324 * June 5th 2017: Added `typeCast` and 325 * June 5th 2017: Added `typeCast` and
325 `typeTest` to the locations where void 326 `typeTest` to the locations where void
326 expressions may occur. 327 expressions may occur.
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698