OLD | NEW |
1 \documentclass{article} | 1 \documentclass{article} |
2 \usepackage{epsfig} | 2 \usepackage{epsfig} |
3 \usepackage{color} | 3 \usepackage{color} |
4 \usepackage{dart} | 4 \usepackage{dart} |
5 \usepackage{bnf} | 5 \usepackage{bnf} |
6 \usepackage{hyperref} | 6 \usepackage{hyperref} |
7 \usepackage{lmodern} | 7 \usepackage{lmodern} |
8 \usepackage[T1]{fontenc} | 8 \usepackage[T1]{fontenc} |
9 \newcommand{\code}[1]{{\sf #1}} | 9 \newcommand{\code}[1]{{\sf #1}} |
10 \title{Dart Programming Language Specification \\ | 10 \title{Dart Programming Language Specification \\ |
(...skipping 6435 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6446 | 6446 |
6447 \LMHash{} | 6447 \LMHash{} |
6448 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct
ion. | 6448 Let $T$ be the static type of $e$ and let $f$ be the immediately enclosing funct
ion. |
6449 | 6449 |
6450 \LMHash{} | 6450 \LMHash{} |
6451 It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \
code{Future<flatten(T)>} (\ref{functionExpressions}) may not be assigned to the
declared return type of $f$. Otherwise, it is a static type warning if $T$ ma
y not be assigned to the declared return type of $f$. | 6451 It is a static type warning if the body of $f$ is marked \ASYNC{} and the type \
code{Future<flatten(T)>} (\ref{functionExpressions}) may not be assigned to the
declared return type of $f$. Otherwise, it is a static type warning if $T$ ma
y not be assigned to the declared return type of $f$. |
6452 | 6452 |
6453 \LMHash{} | 6453 \LMHash{} |
6454 Let $S$ be the runtime type of $o$. In checked mode: | 6454 Let $S$ be the runtime type of $o$. In checked mode: |
6455 \begin{itemize} | 6455 \begin{itemize} |
6456 \item If the body of $f$ is marked \ASYNC{} (\ref{functions}) it is a dynamic t
ype error if $o$ is not \NULL{} (\ref{null}) and \code{Future<flatten(S)>} is no
t a subtype of the actual return type (\ref{actualTypeOfADeclaration}) of $f$. | 6456 \item If the body of $f$ is marked \ASYNC{} (\ref{functions}) |
6457 \item Otherwise, it is a dynamic type error if $o$ is not \NULL{} and the runtim
e type of $o$ is not a subtype of the actual return type of $f$. | 6457 it is a dynamic type error if $o$ is not \NULL{} (\ref{null}), |
| 6458 the actual return type (\ref{actualTypeOfADeclaration}) of $f$ is not \VOID, |
| 6459 and \code{Future<flatten(S)>} is not a subtype of the actual return type of $f$. |
| 6460 % TODO(lrn): The "void foo() async { return e }" case is somewhat speculative. |
| 6461 % When we disallow "return e" in a void function, we might also want to revisit |
| 6462 % this rule. Currently it also covers the "void foo() async => e;" case, which |
| 6463 % we might want to allow. |
| 6464 \item Otherwise, it is a dynamic type error if $o$ is not \NULL{}, |
| 6465 the actual return type of $f$ is not \VOID{}, |
| 6466 and the runtime type of $o$ is not a subtype of the actual return type of $f$. |
6458 \end{itemize} | 6467 \end{itemize} |
6459 | 6468 |
6460 \LMHash{} | 6469 \LMHash{} |
6461 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$
;} appears in a generative constructor (\ref{generativeConstructors}). | 6470 It is a compile-time error if a return statement of the form \code{\RETURN{} $e$
;} appears in a generative constructor (\ref{generativeConstructors}). |
6462 | 6471 |
6463 \rationale{ | 6472 \rationale{ |
6464 It is quite easy to forget to add the factory prefix for a constructor, accident
ally converting a factory into a generative constructor. The static checker may
detect a type mismatch in some, but not all, of these cases. The rule above help
s catch such errors, which can otherwise be very hard to recognize. There is no
real downside to it, as returning a value from a generative constructor is meani
ngless. | 6473 It is quite easy to forget to add the factory prefix for a constructor, accident
ally converting a factory into a generative constructor. The static checker may
detect a type mismatch in some, but not all, of these cases. The rule above help
s catch such errors, which can otherwise be very hard to recognize. There is no
real downside to it, as returning a value from a generative constructor is meani
ngless. |
6465 } | 6474 } |
6466 | 6475 |
6467 \LMHash{} | 6476 \LMHash{} |
(...skipping 1681 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8149 | 8158 |
8150 The invariant that each normative paragraph is associated with a line | 8159 The invariant that each normative paragraph is associated with a line |
8151 containing the text \LMHash{} should be maintained. Extra occurrences | 8160 containing the text \LMHash{} should be maintained. Extra occurrences |
8152 of \LMHash{} can be added if needed, e.g., in order to make | 8161 of \LMHash{} can be added if needed, e.g., in order to make |
8153 individual \item{}s in itemized lists addressable. Each \LM.. command | 8162 individual \item{}s in itemized lists addressable. Each \LM.. command |
8154 must occur on a separate line. \LMHash{} must occur immediately | 8163 must occur on a separate line. \LMHash{} must occur immediately |
8155 before the associated paragraph, and \LMLabel must occur immediately | 8164 before the associated paragraph, and \LMLabel must occur immediately |
8156 after the associated \section{}, \subsection{} etc. | 8165 after the associated \section{}, \subsection{} etc. |
8157 | 8166 |
8158 ---------------------------------------------------------------------- | 8167 ---------------------------------------------------------------------- |
OLD | NEW |